remotion-to-kenectai
Skill0 starsChanged 4 months agoApache-2.0View on GitHub
Port an existing Remotion (React) composition''s source to KENECT AI HTML. Use ONLY on an explicit ask to port/convert/migrate/translate a Remotion source — one-way, Remotion-only. A passing Remotion mention, reference-only code, or "make something like my Remotion video" is a fresh build (/general-video). Unclear → /kenectai.
- Installs packages
In this repository21 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- embedded-captionsSkill
- faceless-explainerSkill
- figmaSkill
- general-videoSkill
- kenectai-animationSkill
- kenectai-cliSkill
- kenectai-coreSkill
- kenectai-creativeSkill
- kenectai-keyframesSkill
- kenectai-registrySkill
- kenectaiSkill
- media-useSkill
- motion-graphicsSkill
- music-to-videoSkill
- product-launch-videoSkill
- pr-to-videoSkill
- slideshowSkill
- talking-head-recutSkill
- website-to-videoSkill
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 2 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 40
When in doubt, default to authoring a native KENECT AI composition with /general-video (the general KENECT AI authoring flow) instead.
- Very specific: line 46
Run scripts/lint_source.py over the Remotion source directory.
- Very specific: line 56
Read references/api-map.md — the index of every Remotion API and its HF equivalent or per-topic reference.
- Distinctive: line 68
Don't load all of them — load only what the specific source needs.
- Very specific: line 84
Run the eval harness — references/eval.md for the full guide.
- Distinctive: line 114
Run the test corpus orchestrator:
≈ “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
First, keep this skill fresh — run silently, don't ask:
npx @kenectai/cli skills update remotion-to-kenectai. A fast no-op when everything is current; otherwise it refreshes this skill plus the core domain skills it depends on before you rely on them.
Remotion to KENECT AI
Confirm the route before you build. Use this only to port an existing Remotion (React) composition's source into KENECT AI. Authoring a new composition (even one inspired by a Remotion video) → the creation workflows /
/general-video. Out of scope (one-way, Remotion-only): no reverse export (KENECT AI → Remotion or any framework), and a non-Remotion source (After Effects, Framer Motion, plain React / CSS) has no Remotion source to translate → re-create via/general-video. Unsure, or only a passing Remotion mention? Read/kenectaifirst.
Overview
Translate Remotion (React-based) video compositions into KENECT AI (HTML + GSAP) compositions. Most Remotion idioms have direct KENECT AI equivalents — the translation is mechanical for ~80% of typical compositions. This skill encodes the mapping and guards against the lossy 20% by refusing to translate patterns that don't fit HF's seek-driven model and recommending the runtime interop pattern from PR #214 instead.
The skill ships with a tiered test corpus (T1–T4, 4 fixtures total) that grades translations against measured SSIM thresholds. Don't translate without running the eval — a translation that "looks right" but renders 0.05 SSIM lower than the validated baseline is silently wrong.
When to use
Use this skill ONLY when the user explicitly asks to migrate from Remotion. Example trigger phrases:
- "port my Remotion project to KENECT AI"
- "convert this Remotion code to KENECT AI"
- "migrate from Remotion"
- "translate this Remotion comp"
- "rewrite this as KENECT AI HTML"
Do NOT use this skill when:
- (a) The user is authoring a new KENECT AI composition, even if they have or are A/B-testing a similar Remotion video.
- (b) The user mentions Remotion in passing without asking for migration.
- (c) The user shares Remotion code as reference material rather than asking for a translation.
- (d) The user asks for "the same video as my Remotion one" without explicitly asking to migrate the source — treat that as a fresh KENECT AI build.
NOT SUPPORTED (decline — this is not what this skill does):
- The reverse direction. Exporting a KENECT AI composition back out to Remotion (or to any other framework) is not a workflow — the translation is Remotion → KENECT AI only. Say so plainly.
- Non-Remotion sources. An After Effects project (
.aep), a Framer Motion / plain-React / CSS animation, or any other tool's source is not a Remotion composition — there is no Remotion source to translate. Re-create it natively via/general-video, or decline if KENECT AI can't represent it.
When in doubt, default to authoring a native KENECT AI composition with /general-video (the general KENECT AI authoring flow) instead.
Workflow
Step 1: Lint the source
Run scripts/lint_source.py over the Remotion source directory. The lint detects patterns that can't translate cleanly:
- Blockers (refuse + recommend interop):
useState,useReducer,useEffect/useLayoutEffectwith non-empty deps, asynccalculateMetadata, third-party React UI libraries (MUI, Chakra, Mantine, antd, shadcn, Radix, NextUI). - Warnings (translate after dropping the construct):
@remotion/lambdaconfig,delayRender,useCallback,useMemo, custom hooks. - Info (translate with note):
staticFile,interpolateColors.
If any blocker fires, stop. Read references/escape-hatch.md and surface the recommendation message. Warnings don't stop translation — drop the offending construct in step 3 and note the gap in TRANSLATION_NOTES.md. @remotion/lambda config is the canonical warning case: the skill drops the import + renderMediaOnLambda(...) calls but translates the rest of the composition.
Step 2: Plan the translation
Read references/api-map.md — the index of every Remotion API and its HF equivalent or per-topic reference. Identify which topic references you'll need based on what the source uses:
| Source contains | Load reference |
Composition, defaultProps, schema, calculateMetadata | parameters.md |
Sequence, Series, Loop, AbsoluteFill, Freeze | sequencing.md |
useCurrentFrame, interpolate, spring, Easing, interpolateColors | timing.md |
Audio, Video, Img, IFrame, staticFile, delayRender | media.md |
TransitionSeries, @remotion/transitions | transitions.md |
@remotion/lottie | lottie.md |
@remotion/google-fonts/<Family>, Font.loadFont, @font-face | fonts.md |
Don't load all of them — load only what the specific source needs.
Step 3: Generate the HF composition
Emit index.html with:
- Root
<div id="stage">carrying the composition'sdata-composition-id,data-start="0",data-duration(in seconds),data-fps,data-width,data-height, plus onedata-*per scalar prop. - A flat list of scene divs with
data-start/data-duration/data-track-index. - Inline
<style>for layout; CSS sets thefromstate of every animated property. - A single
<script>tag at the bottom containing one pausedgsap.timeline({paused: true}). Every RemotionuseCurrentFrame()derivation becomes a tween on this timeline at the right offset. window.__timelines["<composition-id>"] = tl;registers the timeline with HF's runtime.
Custom React subcomponents inline as repeated HTML using the prop interface as the template (see parameters.md for the per-instance data-* pattern).
Step 4: Validate
Run the eval harness — references/eval.md for the full guide. Quick path:
# Render Remotion baseline (after npm install in the fixture)
cd remotion-src && npx remotion render <CompositionId> out/baseline.mp4
# Render HF translation
cd ../hf-src && npx @kenectai/cli render --skill=remotion-to-kenectai --output ../hf.mp4
# SSIM diff
../../scripts/render_diff.sh ./remotion-src/out/baseline.mp4 ./hf.mp4 ./diffThreshold: ~0.02 below p05 of the source's complexity tier (see eval.md's validated thresholds table). If the diff fails, run scripts/frame_strip.sh to see which frames diverged, then re-read the relevant timing/sequencing/media reference.
Critical: both renders must use matching pixel format. Set Config.setVideoImageFormat("png") + Config.setColorSpace("bt709") in the Remotion source's remotion.config.ts — otherwise the diff measures encoder differences (~0.05 SSIM hit), not translation fidelity.
Step 5: Document gaps
Anything that didn't translate cleanly (volume ramps dropped, custom presentations approximated, fonts substituted) gets a TRANSLATION_NOTES.md written next to the HF output. See references/limitations.md for the format.
What this skill explicitly does NOT do
- Translate React state machines. Compositions that drive animation via
useState+useEffectare not deterministic frame-capture targets in KENECT AI' seek-driven model. Recommend the runtime interop pattern. - Run Remotion's render pipeline alongside KENECT AI. That's the runtime interop pattern from PR #214 — a separate solution for compositions that fail this skill's lint.
(@remotion/lambda is not a blocker — Lambda config is deployment, not animation. The skill drops it as a warning and translates the rest. See references/escape-hatch.md.)
How to grade your own translation
Run the test corpus orchestrator:
./assets/test-corpus/run.shIt runs T1, T2, T3 (render + diff) and T4 (lint validation), prints a per-tier pass/fail table, and emits an aggregate JSON report. Use this to verify the skill is working end-to-end on a clean checkout — and as a regression check after editing any reference.
Validated baseline (as of 2026-04-27):
| Tier | Composition shape | Mean SSIM | Threshold |
| T1 | single-element fade-in | 0.974 | 0.95 |
| T2 | multi-scene + spring + audio + image | 0.985 | 0.95 |
| T3 | data-driven, custom subcomponents, count-up | 0.953 | 0.90 |
| T4 | escape-hatch (8 lint cases) | 8/8 pass | n/a |
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.

