ralphy render <project> is the one-shot path from a populated workspace to a finished mp4. The editor, audio, video, and voice verbs are the observability and post-processing helpers that bracket it — preflight checks before the render, ffmpeg recipes after. Per AGENTS.md invariant #5, there is no auto-launched Studio; iterations happen via ralphy generate + ralphy render, not Studio scrubbing.
ralphy render
Readsscenario.json + asset-manifest.json, drives HyperFrames (Puppeteer rasterizer + FFmpeg muxer) against workspace/projects/<id>/index.html, optionally post-processes with EBU R128 loudnorm.
workspace/projects/<id>/render/final.mp4. With --loudnorm, the raw render writes to final.raw.mp4 and the ffmpeg pass produces final.mp4 at -16 LUFS (TikTok/Reels target).
Custom output path. Default:
workspace/projects/<id>/render/final.mp4.Post-process with
loudnorm=I=-16:TP=-1.5:LRA=11. Adds a few seconds, fixes the “too quiet on mobile” problem.Frame rate. Default: 30.
Quality preset:
draft | standard | high. Default: standard.Print the resolved render plan; skip the actual render.
/reference/cli/render.
When it fails
HyperFrames render exits non-zero → the log line goes togenerations.jsonl with status: "error" and E_INTERNAL raises with the last 500 bytes of stderr. Loudnorm failure → same, with the ffmpeg tail.
ralphy editor
Editor-stage observability — preflight every clip with ffprobe, sum durations, flag missing slots, surface aspect / fps / codec mismatches before the render.preflight exits 1 on red — wire it into CI ahead of ralphy render and you’ll catch wrong-aspect leftovers from a model swap, missing scenes, codec drift. Full surface: /reference/cli/editor.
ralphy audio
Audio recipes wrappingcli/lib/ffmpeg-recipes.ts. Three recipes ship in v1:
generations.jsonl when --project is set. Full surface: /reference/cli/audio.
ralphy video
Video recipes — alsocli/lib/ffmpeg-recipes.ts. Common subset:
optimize reports the compression ratio in the result. Full surface: /reference/cli/video.
ralphy voice
Pre-flight checks against the ElevenLabs voice library. The single most common mid-batch failure is a deleted voice ID; theexists verb catches it before the batch commits.
/reference/cli/voice.
The render → eval → publish loop
eval is the quality gate after the render; see Eval and research. When eval flags issues, the agent regenerates the offending slots and re-runs render — iterations are CLI-native.
Related
- Rendering a project — the end-to-end walkthrough
- Generation verbs — what feeds into the render
- Eval and research — post-render QA
- Editor playbook, HyperFrames playbook
- cli/commands/render.ts, cli/commands/editor.ts