Repository navigation
Phase 4: Convert H.264 export frames to YUV 4:2:0 on the GPU - #28
Merged
Merged
Conversation
A new L1 crate without dependencies: a lossless RIFX chunk tree with a byte-identical round trip, bounded for hostile input; the .aepx XML form read into the same tree; a read-only typed view of items, compositions, layers, properties, keyframes, expressions, effects, masks, shapes, text documents, markers, footage, cameras, lights, layer styles and project settings; and the effect and layer-style tables the importer and the exporter share. Every decoded field comes from project files generated for this purpose in After Effects 2026, one change per file; docs/aep-format.md lists each field with its case numbers and a confidence code, and what is not decoded. The fixtures are those generated files (each with a sidecar and an ATTRIBUTION.md row). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new L3 crate that maps the typed view of effectcraft-aep into an EffectCraft project: folders, project settings, compositions, solid, null, adjustment, footage (stills, clips, image sequences), precomp, text, shape, camera and light layers with timing, switches, blend modes, parents, track mattes, markers and time remapping; Transform values and keyframes with ease and spatial tangents; expressions; masks; Source Text and text animators; shape groups and items; layer styles; and the effects of the shared table with their parameters and keys. Everything that is not imported is reported per category; by default an import that would lose anything is refused and changes nothing. The crate does no file access (the caller passes the bytes and a footage existence callback), builds for wasm32, and never panics on damaged input (fuzz and hostile-value tests). effectcraft-project gains NO_LAYER, the explicit "None" of a layer parameter whose unset value means the owning layer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new L3 crate that writes an EffectCraft project as an .aep After Effects 2026 opens. It does not write a file from nothing: it edits an embedded template (projects After Effects saved for this purpose, in template/) with effectcraft-aep, cloning item, layer and property records and changing only fields whose layout is verified. Covered: folders, project settings, compositions, solid, null, adjustment, footage, precomp, text, shape, camera and light layers, Transform values and keyframes, expressions, masks, markers, track mattes, time remapping, text animators, shape items, layer styles and the effects of the shared table. What cannot be written is reported per category; by default an export that would lose anything is refused. The output is deterministic, the crate does no file access and builds for wasm32. The examples are the developer tools that extract the template prototypes and run round trips. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Engine commands File > Import > After Effects Project... and File >
Export > After Effects Project... ({path, allowLosses?, dryRun?}, the
import also applySettings?), one undoable edit each, with menu entries,
file dialogs, automation read/write confinement and translations in all
ten catalogs. Losses are refused unless allowLosses is set; dryRun
returns only the report.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs/aep-import.md and docs/aep-export.md (what is imported and exported, what is reported, the rules After Effects needs, how it was verified), and the .aep rows in architecture.md, file-format-parity.md and agents.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Phase 2: Match After Effects glow, blur, wipes, noise and transform
Phase 2: Match After Effects mask feather, repeater opacity and Trim Paths
Phase 2: Match After Effects text layout and animator behavior
Phase 2: Match After Effects 3D rotation, keyframes, Timewarp and sequence gaps
Phase 3: Add 22 expression-driven Behaviors presets
Phase 3: Mute keyframes without deleting them
Phase 3: Add cubic-Bezier easing helper to expressions
…e Trim Paths start semantics
…dness Phase 3: Add per-corner Rectangle Path roundness
Phase 3: Add Cryptomatte point-picking engine command
Phase 3: Copy transform keyframes as After Effects-compatible text
Phase 3: Show Text Range Selector counts in Index units
Phase 3: Draw named timeline markers with labels
Phase 4: Optimize Match Grain CPU analysis
Brent001
marked this pull request as ready for review
October 20, 2026 11:27
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 4 — acceleration and ecosystem
Port upstream storytold#1631.
Source: storytold#1631
Draft status is deliberate until the target Windows/Intel HD 520 path is tested. Validate CPU fallback, visual parity, memory use, and performance on a representative low-memory machine; do not infer GPU speedups from discrete-GPU benchmarks.