Skip to main content

quikgif record

Record a window or screen region as a GIF.

quikgif record [options]

Target Selection

Specify what to record. If no target is given, an interactive window picker is shown.

FlagTypeDescription
--windowUInt32Window ID to capture (use list-windows to find IDs)
--appStringFilter/auto-select by app name. Auto-selects if only one window matches
--regionStringScreen region: x,y,w,h (origin+size) or x1,y1:x2,y2 (corners) in points
--cropStringWindow sub-region: x,y,w,h or x1,y1:x2,y2 relative to content area. Requires --window or --app
--simulatorStringCapture the iOS Simulator's device framebuffer at native resolution. Takes a UDID or device name; omit the value to use the only booted simulator. [Pro]
--simulator-autoBoolShorthand for --simulator with no device argument (the only booted simulator)
info

--region and --crop are mutually exclusive. --region captures a screen area directly and cannot be combined with --window or --app. Use --crop to capture a sub-region of a specific window.

Simulator Capture

--simulator (or --simulator-auto) records the iOS Simulator's device framebuffer directly through simctl - not the Simulator window that macOS composites on screen. This is the only way to produce a native-resolution iOS asset (e.g. 1320×2868 for an iPhone 16 Pro Max), since the Simulator window itself is scaled down for on-screen display (~494×1054 at typical zoom). It is mutually exclusive with --window, --app, --region, and --crop.

quikgif record --simulator-auto --duration 5 --format mp4 --full-resolution -o preview.mp4

Because simctl captures a raw device recording with no window chrome, several flags do not apply and are rejected at validation time: --include-title-bar / --no-include-title-bar, --faux-title-bar, --cursor-smoothing, --click-indicators, --keystroke-badges, --zoom-cursor, and --type-smoothing (there are no captured input events to visualize).

--audio is rejected with --simulator

simctl captures no audio at all - there is no API to enable it. Combining --audio with --simulator fails validation with a clear error rather than silently producing a silent MP4. If you need audio alongside a Simulator demo, record the Simulator's on-screen window instead (--app Simulator), which trades away native resolution for the ability to capture system or microphone audio.

Scripted taps steal focus

Recording the Simulator on its own (no tap commands) is unobtrusive - it runs in the background like any other capture. But a .qgif script that issues tap commands is a different story: QuikGIF has no touch-injection API for the Simulator, so a tap is delivered as a synthesized mouse click, and a click always goes to whichever window is frontmost on macOS. To aim a tap correctly, QuikGIF must raise the Simulator window before every tap - which takes over your screen for the duration of the script. Do not use the machine while a tap-driven Simulator script is running.

If QuikGIF cannot raise the Simulator window, or cannot confidently calibrate the device screen to macOS screen points, the script fails loudly and delivers zero clicks rather than guessing. This is deliberate: a click it cannot aim precisely is a click that could land on a button in whatever app happens to be in front. See tap in the scripting reference for the full behavior.

Recording Parameters

FlagTypeDefaultDescription
--durationDouble--Auto-stop after N seconds. Without this, stop with Ctrl+C
--fpsInt30Frame rate
--show-cursor / --no-show-cursorBooltrueShow cursor in capture
--include-title-bar / --no-include-title-barBoolfalseInclude window title bar

Output

FlagTypeDefaultDescription
-o, --outputStringrecording.gifOutput file path
--max-widthInt800Max output width in pixels
--full-resolutionBoolfalseUse native resolution (ignores --max-width)
--sizeString--Exact output size as WxH in pixels, e.g. 1320x2868. Mutually exclusive with --max-width. [Pro]
--fitStringcontainHow to reach --size: contain (pad, never distorts), cover (crop to fill), or stretch (distorts to fill)
--pad-colorString000000Pad color for --fit contain, as RRGGBB hex
--loop-countInt0GIF loop count (0 = infinite)
--palette-strategyStringautoColor palette strategy: auto, global, or per-frame
--formatStringgifOutput format: gif, webp, apng, or mp4 [Pro]
--audioString--Capture audio into MP4: system, mic, or both. Requires --format mp4. [Pro] Mic prompts for permission once; denial degrades to no audio

Visual Effects

These features require Accessibility permission for event capture. Without it, the flags are accepted but have no effect.

FlagTypeDefaultDescription
--cursor-smoothing / --no-cursor-smoothingBoolfalseSmooth cursor movement between frames
--click-indicators / --no-click-indicatorsBoolfalseShow visual indicators on mouse clicks
--type-smoothing / --no-type-smoothingBoolfalseNormalize typing speed for consistent appearance
--keystroke-badges / --no-keystroke-badgesBoolfalseShow floating badges for keyboard shortcuts
--zoom-cursor / --no-zoom-cursorBoolfalseZoom to cursor region for detail focus
--zoom-sizeInt600Zoom crop width in pixels (height derived from aspect ratio)
--zoom-paddingInt80Zoom dead-zone padding in pixels

Timing

FlagTypeDefaultDescription
--idle-strategyString--Idle cushioning strategy: cut, ramp, or fade. Disabled by default
--idle-thresholdDouble2.0Seconds of inactivity before cushioning kicks in

Other

FlagDescription
-q, --quietSuppress progress output

Examples

Record Terminal for 10 seconds with click indicators:

quikgif record --app Terminal --duration 10 --click-indicators -o terminal.gif

Record a screen region at 60fps:

quikgif record --region 0,0,1920,1080 --fps 60 --full-resolution -o fullscreen.gif

Record a window sub-region with cursor zoom:

quikgif record --app "VS Code" --crop 0,0,800,400 --zoom-cursor -o editor.gif

Record with polished post-processing:

quikgif record --app Terminal --duration 8 \
--cursor-smoothing --click-indicators --type-smoothing \
--keystroke-badges --idle-strategy fade -o polished.gif

Record the iOS Simulator's native device framebuffer, letterboxed to an exact App Store size (--size and --full-resolution are mutually exclusive - --size already lands on exact output dimensions):

quikgif record --simulator-auto --duration 5 --format mp4 \
--size 1242x2688 --fit contain -o preview.mp4

Record the iOS Simulator at its raw native resolution, no resizing:

quikgif record --simulator-auto --duration 5 --format mp4 --full-resolution -o preview.mp4