Remotion
Niche workflow, useful if you're producing short-form video and want a programmatic pipeline.
The bundled zen-remotion-generate workflow takes a script and produces a Remotion composition: the React components, the timeline, the render config. You hand it the script and an output target; the workflow writes the composition and (optionally) kicks off the render.
When to use it
You're shooting one-per-week short videos and the assembly is mostly the same shape every time. You don't want to rebuild the Remotion project from scratch every episode; you want a workflow that takes the script and produces the next composition.
If you're not producing video, this page isn't for you. Move along.
How it works
zen workflow run zen-remotion-generate "<path to your script file>"The workflow:
- Reads the script. Pulls out scenes, beats, visual notes.
- Maps each scene to a Remotion component. Reuses your component library if you've written one.
- Writes the composition file into your Remotion project.
- Optionally runs the render command (
npx remotion render) and stashes the output.
The workflow is Remotion-specific in the sense that it knows the Remotion file conventions. For other video tools (After Effects, Final Cut, plain ffmpeg), this exact workflow won't help; you'd want a different one with the same shape.
Customizing
zen workflow show zen-remotion-generate prints the YAML. Copy it to .zen/workflows/, edit the components it maps to, the render config it uses, the post-processing it triggers. The whole pipeline is in one file.
Provider choice
The default is Claude for the script-to-composition reasoning. The render step is a bash node and doesn't use any provider. If you want a different provider for the reasoning, swap provider: claude for provider: codex on the relevant nodes.
Niche but solid
This is the kind of workflow Z.E.N. is built for: a repetitive structured task you'd otherwise do by hand every Tuesday. If your work has a similar shape (recurring publication, structured output, mostly the same components every time), the pattern probably works for you too with a different bundled-default as the starting point.