animation-export-presets
Skill0 starsChanged 2 months agoMITView on GitHub
Renders a finished Remotion animation to delivery files for every target - LinkedIn feed (4:5, 1:1, 9:16, 16:9), PowerPoint embed, GIF loop, a custom size or 4K at any fps - with sourced H.264 and GIF presets, ffmpeg post-steps, an ffprobe file checker. Use when the user asks to render, export, encode or resize the video for LinkedIn, PowerPoint, GIF, a screen or resolution. Not for animating.
In this repository10 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- add-skillSkill
- publish-repoSkill
- animation-frame-qaSkill
- animation-storyboardSkill
- smooth-motion-choreographySkill
- storytelling-animationSkill
- vector-asset-sourcingSkill
- vector-scene-layoutSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 18
Use when the animation is done and someone needs the MP4/GIF for a platform, a different size or fps, a fix for a file a platform or …
- Very specific: line 22
Do NOT use for: animating (smooth-motion-choreography), judging the look of frames (animation-frame-qa), storyboards or layout, compressing …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
animation-export-presets
Turns a rendered Remotion composition into files that play where they are going.
It fixes the failures that show up after "the render worked": yuv444p or odd-sized
MP4s LinkedIn rejects, untagged colour that shifts on some players, moov-at-the-end
files that stall, PowerPoint clips that scrub badly or show a seam, GIFs posted to
LinkedIn as a static image, and 4K rooms fed a soft 1080p upscale. Every preset
carries its source URL and date in assets/presets.json.
When to use / when NOT to use
Use when the animation is done and someone needs the MP4/GIF for a platform, a different size or fps, a fix for a file a platform or PowerPoint refused, or a check that a delivered file matches a preset.
Do NOT use for: animating (smooth-motion-choreography), judging the look of frames
(animation-frame-qa), storyboards or layout, compressing screen recordings, deck
conversion, uploading or writing the post, or installing ffmpeg.
Workflow
- Preconditions:
animation.config.jsonhasremotion_license_basis(the renderer refuses otherwise), every target in it has a composition (Root.tsx),npx remotion compositions src/index.tslists them, ffmpeg and ffprobe are on PATH. - Pick presets from
assets/presets.json:linkedin-4x5(default feed),linkedin-1x1,linkedin-9x16,linkedin-16x9,pptx-16x9,pptx-4k,gif-loop,custom(compositioncustomfrom the storyboard'scustom_size). Why each is what it is:references/delivery-specs.md. - Render from the project root (the script runs Remotion inside
--project):
One master per composition (CRF 10, PNG frames, BT.709, with a sidecar recording the storyboard and flags it came from), then one ffmpeg pass per deliverable. Each deliverable is checked before it replacespython3 "${CLAUDE_SKILL_DIR}/scripts/render.py" --project . --preset linkedin-4x5 --preset pptx-16x9out/<preset>.mp4|gif; a failed check leaves the previous file untouched.--reuse-mastersreuses a master whose sidecar matches;--input file.mp4re-encodes an existing file (the repair path for "PowerPoint won't play it");--dry-runprints the commands. - Check any file against its preset (the renderer already did this for what it
published; run it on files from elsewhere or after edits):
Expected size and fps come from the preset and the project'spython3 "${CLAUDE_SKILL_DIR}/scripts/check_output.py" out/linkedin-4x5.mp4 --preset linkedin-4x5 --project .storyboard.json(custom_sizefor the custom preset). Checks: container, codec, profile, pixel format, even dimensions, exact fps and platform fps range, duration bounds, byte floor and cap, bitrate range, BT.709 tags, faststart atom order, no audio, GIF infinite-loop extension, full decode. Fix the source of a failure (usually the composition or the storyboard), never the checker. - Hand off: file paths per preset, the checker's summary, and the platform notes
below. Next:
animation-frame-qalooks at the frames before delivery.
Output spec
out/<preset>.mp4or.gifper requested preset, plusout/masters/*.mp4.check_output.pyexits 0 for every deliverable.- The reply states, per file, where it is meant to go and any handling note
(PowerPoint: insert, Start Automatically, Loop until Stopped for loops, do not run
Compress Media; LinkedIn: upload the MP4, add the credit line from
ATTRIBUTION.mdto the post text if one exists; GIF: README/email/desktop decks only).
Gotchas
- LinkedIn's video platform does not accommodate animated GIFs, and PowerPoint for the web cannot play them. GIF is for README, email and desktop decks.
- PowerPoint on Windows and Mac plays H.264/AAC MP4; HEVC, VP9 and ProRes are not in Microsoft's supported list, WebM needs an extension, and alpha video is not a documented insert format: bake the slide background colour into the render.
- Compress Media (Windows only) re-encodes to 1080p/720p/480p and drops embedded subtitles; tell the presenter to leave it off.
- Remotion tags only the colour matrix; primaries and transfer are tagged in the
ffmpeg pass (
h264_metadatabitstream filter). Untagged video reads as BT.601 in some players and brand colours shift. - LinkedIn re-encodes: CRF 18 is this skill's policy for the upload; thin saturated strokes and long gradients are what break in the re-encode, not bitrate. The checker also enforces LinkedIn's 75 KB and 192 Kbps floors that sparse vector clips can miss.
- 4K for PowerPoint is
--scale 2on the 1080p composition, not a bigger design; everything scales because tokens are fractions of the frame. - Rendering at 60 fps doubles time and no target requires it; keep the storyboard's fps.
- Remotion's free license covers individuals, companies of up to 3 people and non-profits; the renderer stops without a recorded basis (remotion.pro/license).
Pointers
assets/presets.json— the presets with source URLs, dates and the reason for each value.scripts/render.py— masters + checked deliverables;--input,--dry-run,--reuse-masters,--self-test.scripts/check_output.py— per-preset checks against the project's storyboard;--self-test.references/delivery-specs.md— LinkedIn, PowerPoint, GIF and encoding facts with sources.
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.

