Recording
Ultimate VJ records the program output only, silently, into a QuickTime .mov using H.264.
Starting and stopping
Press REC in the footer. You are asked where to save; the default filename is
UltimateVJ-recording.mov. Recording then runs at the composition size and your chosen frame rate.
The button becomes Stop REC, then briefly Finalizing… (disabled) while the file is completed. The
status line ends with either Saved <filename> or Recording failed: ….
There is no default recording folder — the location is entirely your choice each time.
What you get
| Property | Value |
|---|---|
| Container | QuickTime .mov |
| Video codec | H.264 (AVC) |
| Audio | None — the file has no audio track |
| Colour | Every frame declared BT.709, composited over black first |
| Dimensions | Equal to the composition size |
| Frame rate | Your Render frame rate preference |
| Minimum bit rate | At least 2 Mbps (width × height × fps ÷ 5, whichever is larger) |
| Keyframe interval | Twice the frame rate |
Recording has no audio input and no connection to the audio engine at all. Both surfaces say so, in slightly different words:
- The clip Inspector: "File audio follows forward, reverse and Bounce transport. Speed changes pitch. Recorded video is silent."
- Settings → Clip audio: "Audio follows clip transport, including reverse and Bounce. Speed changes pitch. Recordings remain silent."
Output mapping is applied to recordings, so what you see on screen is what lands in the file.
Two constraints that bite
Dimensions must be even. Recording requires even width and height between 2 and 8192. Since the composition settings allow any size from 16 to 4096, an odd composition dimension makes recording fail with "H.264 recording needs even output dimensions and 1–120 FPS." Change one dimension to an even number and retry.
Frame rate must be 1…120 fps — the same message covers both failures.
Things that are refused while recording
| Situation | Message |
|---|---|
| Recording onto an existing path | "Recording destination already exists. Choose a new filename." |
| Opening another set | "Stop recording before opening another set." |
| Changing resolution, or matching a display's resolution | "Stop recording before …" |
| Undo / Redo | "Stop recording before undoing set edits." |
| Updating the app | "Stop recording before updating UltimateVJ.", and later "Stop recording before restarting for the update." |
| Deleting a bank | Blocked while recording |
| No Metal device | "Metal is unavailable for recording." |
Quitting while recording
Quit waits for finalization. The app closes output, stops the render loop, then stops the recorder and
waits for any in-progress frame before replying to AppKit. A SIGTERM shutdown uses the same gate, so a
CLI restart cannot truncate your file either.
Frame dropping
Encoding back-pressure is handled by dropping frames: a one-permit semaphore allows a frame to be skipped rather than queued, and the dropped count is tracked. Frames whose presentation time does not advance are skipped. Dropped frames are not reported as an error — the file completes normally.
Finalizing with zero frames fails with "Recording has no frames."
Not verified
- Duration and file-size limits: none exist in source, but behaviour across very long recordings or under
disk pressure beyond the standard
Recording failed: …path was not explored. - Whether the default save location macOS offers you persists between takes — that is operating system behaviour, not app behaviour.