Repository navigation
Releases: alpha2-sh/alpha2
Release list
alpha2 v0.4.0
Native archives are dynamically linked to the pinned LGPL FFmpeg 8
runtime. bundled archives include the replaceable shared runtime;
thin archives (Linux and macOS) require an ABI-compatible system
FFmpeg 8 install; on macOS they look in /opt/homebrew/lib,
/usr/local/lib and /opt/local/lib. Windows ships bundled only.
Every archive includes license notices, the exact FFmpeg runtime
lock, build audit, dynamic dependency report, and source location.
Corresponding FFmpeg source: https://github.com/alpha2-sh/ffmpeg-builds/releases/download/ffmpeg-8.1.3-shared-build3/ffmpeg-8.1.3.tar.xz
Full Changelog: v0.3.1...v0.4.0
alpha2 v0.3.1
Native archives are dynamically linked to the pinned LGPL FFmpeg 8
runtime. bundled archives include the replaceable shared runtime;
thin archives (Linux and macOS) require an ABI-compatible system
FFmpeg 8 install; on macOS they look in /opt/homebrew/lib,
/usr/local/lib and /opt/local/lib. Windows ships bundled only.
Every archive includes license notices, the exact FFmpeg runtime
lock, build audit, dynamic dependency report, and source location.
Corresponding FFmpeg source: https://github.com/alpha2-sh/ffmpeg-builds/releases/download/ffmpeg-8.1.3-shared-build3/ffmpeg-8.1.3.tar.xz
What's Changed
- Prerelease v0.3.1 by @AtlasYang in #7
Full Changelog: v0.3.0...v0.3.1
alpha2 v0.3.0
alpha2 v0.3.0 release notes
All crates and npm packages are now at 0.3.0.
Highlights
- Vector shapes. A new shape system works like After Effects/Lottie shape layers, rendered by alpha2's own vector rasterizer. Native and wasm builds produce the same bytes.
- Effects with more than one input. An effect can sample extra named images, so multi-pass effects can be built from groups.
- More export formats. Exports can be MP4, MOV, MKV or WebM, with VP9, AV1 and Opus encoded in software.
- Lighter preview playback. The preview renders each frame once, skips frames that haven't changed, and has an adjustable resolution scale.
Breaking changes
- The shape generator is gone. Use shapes instead, which takes a tree of items (see below).
- Shape masks have a new layout. shape is now any shape geometry (rectangle, ellipse, polystar or path), and that geometry holds its own center, size and rotation. Masks gained fill_rule.
- Mask feather is now a Gaussian blur (sigma = 0.3125 * feather). Feathered masks render differently from 0.2.x.
- The clip transform position is now an animated point. Its JSON still accepts the old form; keyframes can add optional spatial tangents.
- MediabunnyMp4Sink was renamed MediabunnySink in alpha2/mediabunny. It now writes MP4, MOV, MKV and WebM.
- Browser preview canvas size. The canvas's backing store is now the size frames render at, not the document size. Size the canvas on the page with CSS (EditorPreview already does this).
- Host protocol. Effect requests now carry each definition's inputs, so a 0.2.x host can't run them.
New
Shapes and masks
- Generator::Shapes is an ordered content tree of groups, rectangles, ellipses, polystars, Bezier paths, fills, strokes (with dashes) and trims.
- It follows Lottie's paint order: paints listed earlier draw on top.
- Every value can be keyframed.
- Positions can move along spatial Bezier curves.
- A new alpha2-geometry crate turns a shape tree into device-pixel fills and rasterizes them with a deterministic sparse-coverage rasterizer.
- It uses kurbo strokes and computes trim and arc length deterministically.
- The render graph draws shapes as vector nodes from cached tile coverage.
- A new alpha2/geometry npm export gives editors the engine's own geometry code:
- shapeBounds, hitTest, nearestPoint
- pathLength, trimPath, resamplePath
- toPath, motionPath
- Shape errors (InvalidShape) give the exact location, such as items[2].items[0].path.
- The linter now flags empty subpaths and fills or strokes that have no geometry before them.
Effects with multiple inputs
- An EffectDefinition can declare up to 8 named inputs. An effect node connects them under inputs: { name: node }.
- In WGSL the shader reads each one with sample_(uv) and size_().
- To use an image as an input, connect an existing media node.
- Multi-pass effects are built from group compositions; there is no new engine primitive.
- New BrowserBridge.registerEffects(definitions) registers runtime effects and transitions on every renderer the bridge creates (preview, worker, after GPU loss, and each export attempt).
- With a preview bound, a batch is compiled all or none.
- Errors: invalid_effect, or effect_conflict when the same id@version is registered with a different definition.
Containers and codecs
- One shared container table is used by the native host, the host protocol, @alpha2-sh/node and the browser exporter (TS copy in alpha2/containers):
| Container | Video | Audio |
|---|---|---|
| mp4 | h264, hevc, vp9, av1, mpeg4-part2 | aac, opus |
| mov | h264, hevc, mpeg4-part2 | aac |
| mkv | h264, hevc, vp9, av1, mpeg4-part2 | aac, opus |
| webm | vp9, av1 | opus |
- How the container is chosen: from the output's extension, or from an explicit container field or --container flag. Codec defaults follow the container: H.264 + AAC, or VP9 + Opus for WebM.
- What gets refused: an extension that doesn't match the container, or a codec the container doesn't offer, is refused with INVALID_INPUT before anything is opened.
- New request options: audioCodec (aac or opus) on the host protocol, the CLI (--audio-codec), @alpha2-sh/node and startExport.
- Capabilities: the host reports the container table as encode.containers.
- FFmpeg SDK: updated to ffmpeg-8.1.3-shared-build3, which adds libvpx (VP9), SVT-AV1 (AV1) and libopus (Opus). Hosts without a GPU encoder can now write VP9 or AV1.
- Deterministic Matroska output: MKV and WebM are written with fflags=+bitexact, so exports stay byte-identical across runs.
- Transcode: alpha2 transcode writes to whatever container the output's extension names.
Preview
- New previewScale bridge option (default 0.5, allowed range above 0 up to 8) and BrowserBridge.setPreviewScale(scale). At scale 1 the preview matches export pixel for pixel.
- New setPassTiming(enabled) for per-pass GPU and CPU timing.
- diagnostics.host now reports these counters:
- renders, unchanged, skippedRequests, bitmapTransfers
- renderSize, previewScale, backend
- Worker-mode diagnostics are forwarded to the main thread.
Changed / performance
- Playback pacing. Playback now advances by frame start times, and the bridge requests each frame only once.
- Unchanged-frame skip. When a frame's render-graph key equals the frame already on screen, it isn't rendered, presented or copied to a bitmap.
- In an Electron benchmark, CPU use dropped about 60-67% during motion and about 92% on static content.
- Video sources still upload a new frame every time, so the skip mostly helps stills, generated content, text and repeated seeks.
- Text speed. The text crates (rustybuzz, ttf-parser) are now built at opt-level 3 instead of z.
- Wasm budget. The core wasm size budget was raised for the vector renderer (about +540 KB).
Fixes
- Windows: fixed the wasm-opt step in the wasm build script, the win-x64 build harness, and a device lock in test scripts.
- Fixed platform test code (D3D12 and VideoToolbox encoder tests) and a lint error.
- Fixed geometry golden tests under kurbo std and the fuzz targets after the shape change. Added a new vector_raster fuzz target.
- CI: libsvtav1 is hidden from the valgrind run, because its encoder reads memory it never wrote.
- Tests: WebDriver sessions now get 180 s to start, and the geckodriver log is kept. The sink test checks the encoder's latency mode before counting quantizers.
Native archives are dynamically linked to the pinned LGPL FFmpeg 8
runtime. bundled archives include the replaceable shared runtime;
thin archives (Linux and macOS) require an ABI-compatible system
FFmpeg 8 install; on macOS they look in /opt/homebrew/lib,
/usr/local/lib and /opt/local/lib. Windows ships bundled only.
Every archive includes license notices, the exact FFmpeg runtime
lock, build audit, dynamic dependency report, and source location.
Corresponding FFmpeg source: https://github.com/alpha2-sh/ffmpeg-builds/releases/download/ffmpeg-8.1.3-shared-build3/ffmpeg-8.1.3.tar.xz
Full Changelog: v0.2.2...v0.3.0
alpha2 v0.2.2
Native archives are dynamically linked to the pinned LGPL FFmpeg 8
runtime. bundled archives include the replaceable shared runtime;
thin archives (Linux and macOS) require an ABI-compatible system
FFmpeg 8 install; on macOS they look in /opt/homebrew/lib,
/usr/local/lib and /opt/local/lib. Windows ships bundled only.
Every archive includes license notices, the exact FFmpeg runtime
lock, build audit, dynamic dependency report, and source location.
Corresponding FFmpeg source: https://github.com/alpha2-sh/ffmpeg-builds/releases/download/ffmpeg-8.1.3-shared-build1/ffmpeg-8.1.3.tar.xz
What's Changed
- Prerelease v0.2.2 by @AtlasYang in #5
- feat: measure where text generators draw their text by @AtlasYang in #6
Full Changelog: v0.2.1...v0.2.2
alpha2 v0.2.1
Native archives are dynamically linked to the pinned LGPL FFmpeg 8
runtime. bundled archives include the replaceable shared runtime;
thin archives (Linux and macOS) require an ABI-compatible system
FFmpeg 8 install; on macOS they look in /opt/homebrew/lib,
/usr/local/lib and /opt/local/lib. Windows ships bundled only.
Every archive includes license notices, the exact FFmpeg runtime
lock, build audit, dynamic dependency report, and source location.
Corresponding FFmpeg source: https://github.com/alpha2-sh/ffmpeg-builds/releases/download/ffmpeg-8.1.3-shared-build1/ffmpeg-8.1.3.tar.xz
What's Changed
- Prerelease v0.2.1 by @AtlasYang in #4
Full Changelog: v0.2.0...v0.2.1
alpha2 v0.2.0
Native archives are dynamically linked to the pinned LGPL FFmpeg 8
runtime. bundled archives include the replaceable shared runtime;
thin archives (Linux and macOS) require an ABI-compatible system
FFmpeg 8 install; on macOS they look in /opt/homebrew/lib,
/usr/local/lib and /opt/local/lib. Windows ships bundled only.
Every archive includes license notices, the exact FFmpeg runtime
lock, build audit, dynamic dependency report, and source location.
Corresponding FFmpeg source: https://github.com/alpha2-sh/ffmpeg-builds/releases/download/ffmpeg-8.1.3-shared-build1/ffmpeg-8.1.3.tar.xz
What's Changed
- Feat: Colored emoji support by @AtlasYang in #2
- Prerelease v0.2.0 by @AtlasYang in #3
New Contributors
- @AtlasYang made their first contribution in #2
Full Changelog: v0.1.0...v0.2.0
alpha2 v0.1.0
Native archives are dynamically linked to the pinned LGPL FFmpeg 8
runtime. bundled archives include the replaceable shared runtime;
thin archives (Linux and macOS) require an ABI-compatible system
FFmpeg 8 install; on macOS they look in /opt/homebrew/lib,
/usr/local/lib and /opt/local/lib. Windows ships bundled only.
Every archive includes license notices, the exact FFmpeg runtime
lock, build audit, dynamic dependency report, and source location.
Corresponding FFmpeg source: https://github.com/alpha2-sh/ffmpeg-builds/releases/download/ffmpeg-8.1.3-shared-build1/ffmpeg-8.1.3.tar.xz
Full Changelog: https://github.com/alpha2-sh/alpha2/commits/v0.1.0