macOS does not install the on-demand PingFang SC (macOS 27 on an English install ships Hiragino Sans GB, Heiti SC, Songti SC and STSong instead), and the Simplified Chinese fallback list named only Windows and Linux families. A Chinese character therefore fell through to the exhaustive search, which picks the first installed face that covers it — Hiragino Sans, the Japanese face — so Chinese text in a composition was drawn with Japanese glyph forms (#453). Japanese kana and kanji were already handled, and a Chinese-only character the Japanese face lacks (e.g. 页) still found a Chinese face, which is why the symptom looked selective. Add the macOS Chinese faces to the fallback lists: Hiragino Sans GB, Heiti SC, Songti SC and STSong for Simplified Chinese, Songti TC for Traditional (Heiti TC was already named). The interface language still chooses between the scripts and an English interface keeps the Japanese-first order for shared Han ideographs, as designed in #312; what changes is that a Chinese-locale request has an installed Chinese family to answer it on macOS. Tests: a text-layer render test draws Japanese and Chinese text and checks glyph coverage (skipped where no CJK face is installed); a layout test checks every CJK glyph comes from a face that has the character, so a missing-glyph box cannot creep back; and the fonts test fails without the list change ("Hiragino Sans GB missing from the Han list"), passes with it, and walks the Han branch's list to prove the first installed Simplified family is a Chinese face, not a Japanese one. Verified with CARGO_BUILD_JOBS=2 RUST_TEST_THREADS=2: effectcraft-text 64 passed; effectcraft-render 233 passed, 1 ignored; cargo clippy -p effectcraft-text -p effectcraft-render --all-targets -- -D warnings clean; cargo fmt --all -- --check clean. A 900x240 render of "骨直真具画 中文测试" with the zh-hans request now uses Hiragino Sans GB and differs from the Japanese render, which still uses Hiragino Sans.
6.8 KiB
Roadmap detail
Last reviewed: 2026-10-10 · Last updated: 2026-10-22 · Change: minor (the Chinese Han fallback reaches the installed Chinese faces, #453; previous: major, new file: milestones moved from ROADMAP.md, current focus and next steps with Opus 5.5 estimates) · Target: Adobe After Effects 2026
Forward-looking detail behind the ROADMAP. The work list itself, one gap at a
time, is gaps.md; the numbers are in target-app-parity.md.
There is no cargo xtask scorecard or cargo xtask parity in this repository yet.
Current focus
In this order (gap numbers from gaps.md):
- Crashes and the CI gate (gaps 3–4, G3): fix the eight open crash reports; run
cargo xtask cion every pull request. 15–30 h. - Fidelity harness (gap 2, G1): extend the AEsync ease oracle to rendered frames; a corpus case for every P0 feature, then P1. 60–100 h; needs After Effects running on the owner's Mac.
- Real-user reliability (gaps 5, 6, 8, 9, 11, G2): the open Linux and Windows interaction, mask, effect and text bugs, each with a scripted test. 60–120 h, parallel.
- Owner decision on
.aep(gap 1, G4): then the importer. 80–160 h after the decision. - Performance (gap 5, G5): benchmarks at 1080p and 4K; real-time cached playback. 40–70 h.
Alpha gate
The core workflows of a motion designer in After Effects, checked on EffectCraft's main platform
(macOS) from the scripted UI tests, the live After Effects ease oracle and the open issues
(standard: craftrules standards/progress-docs.md, "Stages"). All six pass, so EffectCraft is
alpha: each works end to end and the work saves and reopens; what's rough in them is listed, but
none blocks the workflow.
| Workflow | Works end to end? | Evidence | Hours to clear the rough edges |
|---|---|---|---|
| 1. Set up: new comp, import footage, stills, PSD/AI and audio, arrange and trim layers | yes | file.import and image-sequence tests, ui_drag_drop, ui_project_*; rough: a still imports as a sequence (#431), an MP3 layer can go silent (#324), multi-file drops (#552) |
2–4 |
| 2. Animate: keyframes, easing in the Graph Editor, motion paths, parenting | yes | 168 live samples match After Effects 26.3 (fidelity/); ui_keyframes; rough: Graph Editor jitter and clipped buttons (#456, #457), negative rotation drag (#569) |
3–6 |
| 3. Motion graphics: text layers with animators, shape layers with operators | yes | ui_text_edit, ui_timeline_shapes, text and shape engine tests; rough: paragraph alignment inverted (#316), Chinese text in comps follows the Han fallback (#453 fixed) |
3–6 |
| 4. Composite: masks, track mattes, blend modes, keying and effects | yes | Compositor and mask tests, 306 effects with CPU/GPU agreement; rough: mask bugs (#510, #513, #527), 32-bpc blend differences (#494), effect bugs (#580 crash, #514) | 6–12 |
| 5. Preview with audio (RAM preview, cache) | yes | ui_ram_preview, ui_live_preview; rough: stutter on cached frames (#595, #304), late audio (#554, #504) |
10–20 |
6. Save, reopen and deliver: .ecproj, auto-save, Render Queue to H.264 / ProRes / sequences |
yes | Versioned-schema reopen tests, crash recovery, render-queue and encoder tests; rough: the macOS default output folder is /, so a render fails until an output path is chosen (#446), ProRes 4444 colour tag (#340), projects don't relink when moved |
1–3 |
The gate is not beta: beta also needs After Effects' own .aep projects to open (gap 1) and
≈ 75% ready for real work.
Milestones
The original build plan; all but M7 and M12 are done. What is left after them is measured against After Effects in gaps.md, not as milestones.
| Milestone | State | |
|---|---|---|
| M0 | Skeleton: crates, compositor, the After Effects style shell, control channel, cargo xtask |
Done (web build: web.md) |
| M1 | Keyframes: temporal and spatial interpolation, Easy Ease, roving, velocity | Done |
| M2 | Compositing: 38 blend modes, track mattes, parenting, adjustment layers | Done |
| M3 | Project operations: settings dialogs, layer commands, .ecproj, undo, After Effects menu bar |
Done |
| M4 | Preview: precomps, motion blur, cached playback | Done |
| M5 | Timeline depth: graph editor, keyframe clipboard and dialogs, time remapping, pick-whips, expression editor | Done |
| M6 | Shapes, masks and footage: shape operators, masks and the pen tool, video and image import | Done |
| M7 | 3D: 3D layers, cameras, lights, shadows, depth of field, 3D views and camera tools | In review (3D gizmos, FBX/USD, Substance still missing: gaps 12–13) |
| M8 | Expressions with the After Effects object model | Done |
| M9 | Text and effects: text animators, layer styles, 306 effects incl. time and audio effects | Done |
| M10 | Export: render queue, H.264, ProRes, image sequences, GIF, audio | Done |
| M11 | Animation tools: audio, Lottie, presets, Motion Sketch, Wiggler, Smoother | Done (preset library: gap 7) |
| M12 | Performance: layer cache, parallel and GPU compositing, disk cache, motion tracking; GPU versions of the remaining CPU-only effects | Mostly done (benchmarks and hardware video: gaps 5, 15) |
| M13 | Puppet, paint, Roto Brush, tracking, plug-in API, timeline depth, trained models | Done |
| M14 | Built for agents: MCP server, CLI, control channel, Settings, shortcut editor, auto-save, crash recovery | Done |
| M15 | The web app (WebAssembly, WebGPU) | Done |
What's next, with estimates
| Next | Gaps | Opus 5.5 hours | Parallel? | Needs a human |
|---|---|---|---|---|
| Crash fixes and a PR CI gate | 3, 4 | 15–30 | yes | GPUs for #591 / #613 |
| G1 fidelity harness and P0/P1 corpus | 2 | 60–100 | after the harness | After Effects runs on the owner's Mac |
| Open bug backlog (Linux, Windows, masks, effects, text, 3D) | 5, 6, 8, 9, 11, 12, 24 | 100–190 | yes | Linux / Windows testers |
.aep / .aepx import |
1 | 80–160 | partly | Owner decision on clean-room scope |
| Performance benchmarks and real-time preview | 5, 15 | 50–100 | partly | — |
| Localization depth | 16 | 60–110 | yes | Native-speaker review |
| Preset library, 26.x features, Object Matte | 7, 14, 21 | 50–95 | yes | — |
| Formats: VFX stills, MXF, 3D models, templates | 13, 17, 18, 22, 23 | 80–160 | yes | — |
| Plug-in ecosystem, multi-monitor, accessibility | 19, 20, 25 | 65–130 | yes | Owner decision on SDK hosting |
To beta (≈ 75% ready and .aep opening): ≈ 350–620 h. To full parity: ≈ 850–1,500 h.
Revision history
| Date | Change | Summary |
|---|---|---|
| 2026-10-22 | minor | The Chinese Han fallback reaches the installed Chinese faces (#453) |
| 2026-10-10 | minor | Alpha gate: six core workflows checked; all pass, stage stays alpha |
| 2026-10-10 | major | New file: milestones from ROADMAP.md, current focus, next steps with estimates |