render
Skill0 starsChanged 47 days agoApache-2.0View on GitHub
Render a planned video-studio project (project/video-spec.json) into a finished package in dist/ - captioned 9:16/16:9 reel, clean master, SRT/VTT captions, transcript, thumbnail, social copy, render manifest and provenance - using only local tools (system TTS or silent voice, HyperFrames or ffmpeg motion graphics). Use when the user runs /video-studio:render, approves a plan, or asks to render, preview or export the video.
- Installs packages
15 other projects use a version of this.
Adopted by
Most recently taken up by
- pche-broken-artist/forge-of-thoughttheir own version, first seen Nov 6, 2026
- hiroqt/overdrivetheir own version, first seen Nov 1, 2026
- G1Joshi/Agent-Skillstheir own version, first seen Oct 13, 2026
- TheSethRose/render-skilltheir own version, first seen Oct 13, 2026
- mgiovani/cc-arsenaltheir own version, first seen Sep 25, 2026
- atharh/career-corpus-kittheir own version, first seen Sep 3, 2026
Used with
Projects with it also use publish.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
VercelSkillpublish
Publish a single demo to v0 and optionally create Typefully drafts. Use when the user says "publish", "publish to v0", or "create typefully draft" for a demo.
Also in 3 projects that use this
Other versions15 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 15
- G1Joshi/Agent-Skills★ 15same name
- imMamdouhaboammar/linkedin-animated-infographics★ 14same name
- pche-broken-artist/forge-of-thought★ 12same name
- mgiovani/cc-arsenal★ 8same name
- atharh/career-corpus-kit★ 4same name
- suxrobGM/rasterize★ 4same name
- flabanabba8/openscad-studio★ 2same name
- hiroqt/overdrive★ 2same name
- assafkip/claude-image★ 1same name
- fontezbrooks/loomDaddy★ 1same name
5 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository24 other files it gives its agents.
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 2 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 11 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 24
Call spec_validate {project_dir}.
- Very specific: line 28
When the spec has HyperFrames scenes (above all motion pages), run the stills skill first: stills {project_dir, at: "downbeats"} (or …
- Very specific: line 34
Call render_submit {project_dir, quality: "preview"} (voice and renderer default to auto).
- Very specific: line 52
Call job_status {job_id} every 10-20 seconds, passing the previous result's cursor as since so you only get what changed (the full result …
- Very specific: line 73
Call mcp__plugin_video-studio_engine__review {project_dir} and Read the contact sheet it returns (each scene's opening, middle and closing …
- Distinctive: line 97
Stop when nothing is left to fix, when a problem comes back unchanged after its fix, or after the second pass.
- Distinctive: line 126
If HyperFrames was skipped, say the ffmpeg renderer drew the scenes and offer the optional setup below.
- Very specific: line 136
Ask whether to render the final version.
“Common” is measured: kept by at least 6 in 10 of the 11 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Render a video
Rendering is local and free. The only paid API is ElevenLabs, and the engine
uses it only when a key is configured and it is allowed: policy.yaml
(<project>/policy.yaml, project/policy.yaml, or the user default in the
plugin data folder) lists it in providers.allow, the spec names it in
voice.provider_preference, or the user asked for voice: "elevenlabs".
Otherwise voice: "auto" uses the system voice and voice.reason says why
the key was not used. Never add providers.allow, provider_preference or
voice: "elevenlabs" on your own; only when the user asks for ElevenLabs.
Work in the project folder that holds project/video-spec.json; pass
absolute paths.
1. Check the spec
Call spec_validate {project_dir}. If ok is false, list the errors with
their fixes and stop (or fix them per the plan skill and re-validate).
render_submit refuses an invalid spec anyway.
When the spec has HyperFrames scenes (above all motion pages), run the
stills skill first: stills {project_dir, at: "downbeats"} (or {project_dir}
without music), Read the sheet and fix what looks wrong before rendering.
2. Preview first
Call render_submit {project_dir, quality: "preview"} (voice and renderer
default to auto). It returns a job_id immediately. Only pass voice /
renderer if the user asked (silent for no narration, ffmpeg to skip
HyperFrames). burn_in_captions: false keeps captions only as sidecars.
Paid voice and spend limits (policy.yaml spend): above
project_limit_usd / scene_limit_usd the engine refuses ElevenLabs; above
approval_above_usd it asks the user itself in an approval dialog (what,
how many characters, estimated cost) and records the answer in
project/consent.json. If render_submit returns REFUSED with
consent_required: true (the client has no approval dialog), tell the user
the characters and estimated cost from the message, ask them, and only after
a clear yes call it again with approve_paid_voice: true, or with
voice: "system" if they say no. asked_user: true means the user already
answered in the dialog: do not ask again or retry.
3. Poll
Call job_status {job_id} every 10-20 seconds, passing the previous
result's cursor as since so you only get what changed (the full result
arrives once when the job finishes). Tell the user the stage in
one short line when it changes (voice, scene 3/6, assemble, QA, export); do
not repeat identical updates. A preview of a 30 s reel usually takes well
under a minute; a final render several minutes. Other submissions queue:
only one render runs at a time. interrupted means the engine restarted:
submit again (all finished work is cached). If the user wants to stop a
render (wrong settings, taking too long), call render_cancel {job_id}: the
job ends as cancelled, the project's render lock is released and finished
scene clips stay cached for the next render_submit.
Errors start with a code in brackets (also code / error_code in the
structured result): RENDER_LOCKED (another render of this project is
running: wait and poll, or cancel it), SPEC_INVALID (fix the spec),
FFMPEG_MISSING_ENCODER / FFMPEG_MISSING_FILTER / FFMPEG_NOT_INSTALLED
(run doctor and relay its fix), FFMPEG_DISK_FULL, FFMPEG_BAD_INPUT
(name the file), NOT_FOUND, REFUSED, else ERROR.
4. Look at it before presenting
Call mcp__plugin_video-studio_engine__review {project_dir} and Read the contact sheet it returns (each
scene's opening, middle and closing frame, labelled). Check that text fits
and is readable, that nothing sits under the captions or the app UI, that
graphics are complete by the middle of their scene, and that crops keep the
subject. Look closer where needed:
mode: "strip"withscene(every frame of it): motion, transitions, and word cues. A cued item should appear as its word is spoken; compare withcaptions.jsontimes.mode: "crop"withcrop {x, y, w, h}(fractions of the frame): caption and small-text legibility, faces.
Review → fix → re-render loop (at most 2 passes).
- Collect the problems: the
flaggedscenes in the review result (lint findings: readqa/lint.mdfor theirfix) plus what you saw on the sheet. Keep only problems you can fix in the spec without asking the user: text too long or overflowing, a caption or headline under the UI, a cue on the wrong word, a crop that loses the subject (footage_focus/focus_track), a scene too short for its reads, a motion or transition hiding a reveal. - Apply those fixes to
project/video-spec.json, keeping every other value. Don't change the story, the facts, the voice or the look: those are the user's decisions (list them instead). spec_validate, then re-render the same quality (only changed scenes re-render) andreviewagain.- Stop when nothing is left to fix, when a problem comes back unchanged after its fix, or after the second pass. Then present, listing what you fixed and what you left and why.
5. Present the result
From result:
- Files:
dist/reel.mp4(size, duration, resolution, preview/final), then one line per platform package indist.targets[](dist/<id>/: video, cover, captions,post.json,qa.jsonstatus; say when the video was re-encoded and why), and the otherdist/files in one line. When the spec has acover, mentiondist/cover.jpg(the headline cover) anddist/cover-square-preview.jpg(how it looks cropped to a square grid tile); open both with Read to check the headline is legible. - QA:
pass, or each finding asid: detailwith its fix. With the silent voice, silence and loudness are not measured (a preview without narration audio). Frozen frames are never "expected":frozen_framesfails aboveacceptance.max_frozen_pct(default 15% of the runtime), andmotion_densitycounts big visual changes per second (sudden changes such as cuts, colour flips and elements appearing; smooth continuous motion is not counted). Reportfailfindings prominently. - Voice and renderer used, and why: quote
voice.reasonandrenderer.reasonsbriefly. If the voice fell back to silent, say why (e.g. no system TTS in this environment) and how to get narration (voice: "system"on macOS/Linux, or ElevenLabs: a key via/pluginplus the user's permission inpolicy.yamlproviders.allow). If a configured ElevenLabs key was not used, quote the policy reason. If HyperFrames was skipped, say the ffmpeg renderer drew the scenes and offer the optional setup below. - Timing adjustments: scenes whose narration ran long were extended in
the render only; suggest updating
duration_secin the spec or trimming the line. - Placeholders: scenes that need a video provider were drawn as titled cards (provider rendering arrives in a later phase).
6. Final render and export
Ask whether to render the final version. On approval call
render_submit {project_dir, quality: "final"} and poll again.
Then refine the post copy per target. Each dist/<target>/post.json has the
copy for that platform (source: "generated" is a deterministic draft) and
its limits. Write the refined copy into project/video-spec.json as
publish.<target> {post_caption, hashtags, ai_disclosure} (brief's tone,
the desired action, 3-6 relevant hashtags, claims only from the sources,
within limits), then run export again so every post.json picks it up.
Editing the spec is durable; dist/ files are regenerated on each export.
qa_run {project_dir} re-checks the reel.
Optional: HyperFrames renderer
Richer motion graphics need @hyperframes/producer and Google Chrome. The
engine never installs it by itself. If the user wants it, they run:
cd "${CLAUDE_PLUGIN_DATA}" && PUPPETEER_SKIP_DOWNLOAD=1 npm i @hyperframes/producer@0.8.78 --prefix depsthen /video-studio:doctor (check hyperframes) and re-render with
renderer: "auto" or "hyperframes".
Errors
- Tools missing: suggest
/video-studio:doctorand/mcp. - ffmpeg missing or without libass/libx264: run the doctor and follow its fix.
- A scene failed to render: show its reason; retry with
renderer: "ffmpeg".
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

