kinetograph.
Guides

Migrate from Remotion

Every Remotion package a video can import, what works in Kinetograph, what doesn't, and the steps to move a project.

Most Remotion projects run on Kinetograph as they are.

Your remotion and @remotion/* imports are mapped onto Kinetograph's own versions of those packages. You don't edit them.

Three things need work:

  • The tooling around the video.
  • A few packages that have no equivalent.
  • Anything the engine can't draw yet.

An agent can do this for you. See Use with agents for the kinetograph-migrate skill.

How much of Remotion is covered

Kinetograph exports 310 of the 318 names in remotion and the 24 @remotion/* packages it maps. Another 90 names belong to nine tooling packages that are left out on purpose.

Read the number with care:

  • It counts runtime names (functions, components, constants) in Remotion 4.0.540. Types are not counted.
  • A name that exists can still have gaps. What works lists them.
  • It is not "99% of your project works". Run doctor to see what yours uses.
  • Names that Kinetograph adds are not counted. remotion alone has 105, such as Layer and Scene3D.

Package by package

Status: Works means every export exists and you use the package as usual. Partly means some calls throw or draw less. Not planned means Kinetograph has something else.

Packages that work

PackageStatusExports presentNotes
remotionWorks57 of 60Internals and FolderContext are internal to Remotion. createEffectImplementation is missing.
@remotion/transitionsWorks11 of 11All 19 presentations.
@remotion/motion-blurWorks2 of 3HtmlInCanvasMotionBlur is missing.
@remotion/noiseWorks3 of 3
@remotion/pathsWorks21 of 22PathInternals is internal.
@remotion/shapesWorks22 of 22
@remotion/layout-utilsWorks4 of 4
@remotion/animation-utilsWorks23 of 23
@remotion/captionsWorks4 of 5CaptionsInternals is internal.
@remotion/google-fontsWorks0 of 1Each @remotion/google-fonts/<Family> import works. getAvailableFonts is missing.
@remotion/fontsWorks1 of 1
@remotion/lottieWorks2 of 2
@remotion/gifWorks3 of 3
@remotion/media-utilsWorks12 of 12visualizeAudio follows the documented behaviour, but its numbers are not identical.
@remotion/mediaWorks5 of 6Provides <Audio> and <Video>. AudioForPreview is internal.
@remotion/light-leaksWorks4 of 4
@remotion/starburstWorks4 of 4
@remotion/sfxWorks32 of 32The first render downloads each sound. After that it is offline.
@remotion/zod-typesWorks4 of 4Props are not checked against the schema.
@remotion/timeline-utilsWorks33 of 33extractFrames throws UnsupportedApiError.
@remotion/canvasWorks24 of 24This is Remotion Studio's editor canvas. It bundles, but every call throws UnsupportedApiError. The count is from 4.0.532, because 4.0.536 is not on npm.
@remotion/riveYes1 of 1getRenderer() is null. CDN assets are not fetched.

Packages that work in part

PackageStatusExports presentNotes
@remotion/media-parserPartly13 of 13Local files only. There is no box tree and there are no sample callbacks. See What works.
@remotion/webcodecsPartly24 of 24Encode and decode throw UnsupportedApiError. convertMedia writes sound to WAV.
@remotion/skiaPartly1 of 1Needs the @kinetographdev/skia add-on. Some Skia features are not drawn. It also covers @shopify/react-native-skia.

Packages that Kinetograph replaces

PackageStatusExports presentUse instead
@remotion/threeNot plannednot countedThe own 3D layer, Scene3D. The steps are in the skill.
@remotion/playerNot planned0 of 3The studio, with kinetograph studio. There is no embeddable player.
@remotion/rendererNot planned0 of 22kinetograph render, still and compositions.
@remotion/bundlerNot planned0 of 4Nothing to do. render bundles for you.
@remotion/cliNot planned0 of 2The kinetograph CLI.
@remotion/lambdaNot planned0 of 25There is no cloud renderer. Run kinetograph render on a machine with a GPU.
@remotion/cloudrunNot planned0 of 14Same as Lambda.
@remotion/studioNot planned0 of 18kinetograph studio.
@remotion/tailwind, @remotion/tailwind-v4Not planned0 of 1 eachThey only configure webpack. Tailwind itself works.
IFrame (from remotion)Not plannedexportedIt needs a browser. It is reported as unsupported and left out.

Any other @remotion/* import stops the build with "..." is not supported by Kinetograph yet.

Counts come from loading the built modules in Node and from each Remotion package's published export list.

Migrate by hand

Follow these steps in order.

  1. Find the entry. It is the file that calls registerRoot, often src/index.ts. Check that it loads with compositions. If an import is not supported, the command stops and names it. Fix that first.
  2. Run doctor. It goes through every frame without the GPU. It lists each element and property the engine can't draw, and the frames they happen on.
  3. Fix each finding. The common cases are below.
  4. Lint and look. lint checks the project. strip draws twelve frames into one picture. Open it.
  5. Render with --strict. It stops on the first frame with something unsupported, so nothing is silently missing.
  6. Write down what changed. Note anything you left out or approximated. The video can differ from the Remotion one.

The commands for steps 1, 2, 4 and 5 are below. They differ only in the entry. A Remotion project points at its entry file and picks a composition with --comp. A HyperFrames page points at its index.html or the directory that holds it. Your project keeps its own layout. Only the files the commands write go in out/.

npx kinetograph compositions src/index.ts
npx kinetograph doctor src/index.ts
npx kinetograph lint src/index.ts
npx kinetograph strip src/index.ts -n 12
npx kinetograph render src/index.ts --comp <id> --strict

Fixing findings

  • Tooling imports (player, renderer, bundler, lambda): remove them and use the CLI.
    • remotion render becomes kinetograph render <entry> --comp <id>.
    • remotion studio becomes kinetograph studio <entry>.
  • @remotion/three: rebuild the scene with Scene3D, Camera3D, lights, Mesh and Model. Rotations are in degrees. See Authoring, section 6.6.
  • IFrame: rebuild the page as components, or use a screenshot.
  • A CSS property or element in the report: change it to one the engine draws, or remove it.

Nothing in this path starts a browser. If something can't be ported, leave it out or approximate it. See What works for how warnings work.

The agent skill

The kinetograph-migrate skill follows these steps for an agent.

It has reference files for 3D, tooling and unsupported content. It loads them only when a finding needs one.

See Use with agents.

On this page