Skip to content

Phase 4: Convert H.264 export frames to YUV 4:2:0 on the GPU - #28

Merged
Brent001 merged 73 commits into
mainfrom
phase4/gpu-yuv420-export
Oct 20, 2026
Merged

Brent001 merged 73 commits into
mainfrom
phase4/gpu-yuv420-export

Conversation

@Brent001

Copy link
Copy Markdown
Owner

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.

vangel76 and others added 30 commits October 19, 2026 15:16
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
…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
Brent001 marked this pull request as ready for review October 20, 2026 11:27
@Brent001
Brent001 merged commit ef05845 into main Oct 20, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants