Skip to content

Phase 4: Complete accessibility and keyboard navigation across editor panels - #33

Merged
Brent001 merged 94 commits into
mainfrom
phase4/accessibility-followup
Oct 20, 2026
Merged

Brent001 merged 94 commits into
mainfrom
phase4/accessibility-followup

Conversation

@Brent001

@Brent001 Brent001 commented Oct 20, 2026 •

Copy link
Copy Markdown
Owner

Phase 4 — accessibility and keyboard navigation

Combined, fork-rebased port of upstream PRs #1339 and #1341. This includes the shared AccessKit helpers, accessible names/roles/states, keyboard interaction for Effects & Presets, Render Queue, Flowchart and Script Console, readable Info and camera-tracker outputs, settings/panel controls, and accessibility/contrast/keyboard audit tests.

Sources: storytold/effectcraft#1339 and storytold/effectcraft#1341

The complete patch is now based on this fork's main, rather than an upstream-only branch. Keep this as draft until the Windows compile and UI test suite pass; visually inspect focus movement and keyboard shortcuts to ensure existing workflows remain intact.

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 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
Phase 4: Convert H.264 export frames to YUV 4:2:0 on the GPU
Phase 4: Run Content-Aware Fill PatchMatch and flow on the GPU
Phase 4: Enable AVI import across supported entry points
Phase 4: Render Illustrator EPS artwork
@Brent001
Brent001 marked this pull request as ready for review October 20, 2026 11:32
@Brent001
Brent001 merged commit d23e0c0 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