Skip to content

FAQ

The MIT License, copyright Alpha2 contributors. That covers the engine, the npm packages, the Python package and the Rust crates. Third-party components are listed in THIRD_PARTY_NOTICES.md.

Two parts come under other terms:

  • FFmpeg. The native archives carry FFmpeg 8 built as shared libraries under the LGPL 2.1 or later, with its GPL and nonfree parts disabled. alpha2 links it dynamically, and you can replace the libraries with an ABI-compatible FFmpeg 8 build. Each archive’s compliance/ directory says where to get the source.
  • OpenH264. Cisco’s software H.264 encoder is never shipped by alpha2. If you install it (install --openh264), you download Cisco’s binary from Cisco, under Cisco’s licence.

No. alpha2 is an engine: it renders a timeline project to a canvas for preview and to a file for export. It has no timeline UI, media bin or menus of its own. You build those, or you use an app built on it: studio.alpha2.sh is the editor app.

What alpha2 gives an editor is the hard part underneath: the project document, validation, GPU rendering in the browser and natively, export, and @alpha2-sh/editor with documents, commands, undo and a preview and export bridge. See Editor.

Which codecs and containers can it export?

Section titled “Which codecs and containers can it export?”
Container Video Audio
MP4 (.mp4, .m4v) H.264, HEVC, VP9, AV1, MPEG-4 Part 2 AAC, Opus
MOV H.264, HEVC, MPEG-4 Part 2, ProRes AAC
Matroska (.mkv) H.264, HEVC, VP9, AV1, MPEG-4 Part 2 AAC, Opus
WebM VP9, AV1 Opus

The default is H.264 and AAC, or VP9 and Opus for WebM. Transparency is kept with VP9 in WebM or Matroska, or ProRes 4444. Natively, which codecs a machine encodes depends on its encoders: see Platform support. In the browser it depends on the browser’s WebCodecs encoders.

Natively, alpha2-host decodes with FFmpeg 8, so it reads the video, audio and image files FFmpeg decodes. In the browser, the application decodes its media (WebCodecs, through alpha2/mediabunny or its own decoders) and uploads frames to the engine. Both also read SVG, animated images, Lottie, OpenEXR and image sequences through the engine’s extensions module, and SRT and WebVTT subtitles.

Yes. Nothing in alpha2 calls a server while it renders.

  • Browser: the engine is WebAssembly your page serves itself. Once the page and its .wasm files are loaded (or cached), preview and export run on the device.
  • Native: alpha2-host and alpha2 are programs on disk. Only the installers (npx @alpha2-sh/node install, python -m alpha2 install) download, once. Set ALPHA2_HOST_DOWNLOAD_URL to install from your own mirror, or unpack a release archive yourself and set ALPHA2_HOST_PATH.

That is the point of the design. The browser preview, the native export, Node.js, Python and Rust all run the same rendering code, so they draw the same frames. Text matches when every renderer has the same font files in the same order. The CPU renderer’s pictures are the same bytes on every machine and for any number of threads. Determinism explains what is guaranteed and how it is tested.

How does it compare to Remotion or FFmpeg?

Section titled “How does it compare to Remotion or FFmpeg?”
  • Remotion renders React components in a browser, so a frame can hold anything a web page can, and your code runs per frame. alpha2 renders a JSON document with a GPU engine: no DOM, but a document you can store, validate and generate, and GPU rendering on a server without a browser. See Coming from Remotion.
  • FFmpeg is a toolkit of filters over streams. alpha2 uses FFmpeg to decode and encode, and replaces the filtergraph with a timeline document that also previews in a browser. See Coming from FFmpeg.
  • Packages and programs share one version number: alpha2 0.5.0 is the alpha2 npm package, @alpha2-sh/node, @alpha2-sh/react, @alpha2-sh/editor, the Python package, the crates and the native archives, all at 0.5.0. The packages pin each other at that exact version, and @alpha2-sh/node installs the host archive of its own version.
  • The project document has a schema_version, 1 for this release. The engine refuses any other with unsupported schema version. The schema is project.v1.schema.json.
  • Effects and transitions are referenced by id and version in the document, so a project names the exact definition it was made with.
  • The host protocol has its own protocolVersion, 1.

alpha2 is before 1.0. These docs are versioned by minor release: the version menu shows the pages for earlier ones.

Yes. Runtime effects are WGSL shaders you register with the engine, in the browser and natively. They need a GPU: the CPU renderer refuses them with EFFECT_ERROR. See Extensions.

On GitHub issues. Include the project JSON (or the smallest one that shows the problem), the error code and message, and for a native export the alpha2-host version and the start lines it prints on standard error.