What the absorbed and upstream projects have, what Flare on main lacks, and the work packages
that close the gaps that matter most for Animate users moving to Flare. The summary is in
ROADMAP.md (Reference backlog). This file is the evidence behind it.
Checked on 2026-11-04 against origin/main (commit 5026a07). Gaps were confirmed by grepping
crates/ and apps/ for each feature's name and by reading ROADMAP.md,
SURFACES.md and crates/editing/flare-tools/src/not_yet.rs. A gap marked
"not found" means no matching name in the code, not a proof of absence.
Flare is BSD-3-Clause (root LICENSE, Cargo.toml license). A source can feed Flare
code only if its licence allows it to be copied into a BSD-3 project with its notice kept.
| Source | Licence (file read) | Compatible with Flare | Use |
|---|---|---|---|
Flare-RustBase (Flare-Animate/rustconversion-animatecraft, the AnimationCraft code) |
MIT OR Apache-2.0 (LICENSE-MIT, LICENSE-APACHE) |
Yes, with the notices kept | Port allowed, with attribution |
ArtCraft (storytold/artcraft) |
MIT OR Apache-2.0 (LICENSE-MIT, LICENSE-APACHE, NOTICE) |
Yes, with notices | Port allowed, with attribution |
OpenToonz (opentoonz/opentoonz) |
BSD-3-Clause (LICENSE.txt); thirdparty/ and stuff/library/mypaint brushes/ keep their own licences |
Yes, same licence family | Port allowed, notices kept, third-party files checked one by one |
Tahoma2D (tahoma2d/tahoma2d) |
BSD-3-Clause (LICENSE.txt), same third-party carve-outs |
Yes | Port allowed, same rule as OpenToonz |
Old Flare C++ (original/, this repo) |
BSD-3-Clause (root LICENSE) |
Yes | Read as reference only: AGENTS.md forbids depending on, linking or copying from original/ |
Next2Flash (SSF2-Mods-Official/Next2Flash) |
MIT (LICENSE); its editor is based on the Next2D NoCode Tool, MIT (app/LICENSE); toolchain/ffdec-worker is GPLv3 (bundles FFDec) |
Yes for the MIT parts; no for the GPLv3 worker | MIT parts: port allowed. FFDec and its worker: behaviour only, no code, no bundling |
minnamate (mirvoxtm/minnamate) |
No licence file in the repo (root listing, README.md, Cargo.toml, CLAUDE.md checked). Its CLAUDE.md says it is clean-room and that MIT/Apache inputs may be reused, which is about its inputs, not its own licence |
Unknown: with no licence, all rights are reserved | Behaviour only until the maintainer licenses it |
nflare (Flare-Animate/nflare) |
GPLv3 (full text in LICENSE); a fork of nanofl |
No: BSD-3 Flare cannot take GPLv3 code without relicensing | Behaviour only, no code |
ArtCraft's Replicraft |
Not found (see below) | Unknown | Not used |
bitmapflow (Bauxitedev/bitmapflow) |
No LICENSE file in the repository; its README says MIT, which is not relied on | Unknown | Behaviour and ideas only, no code (ENGINEERING.md) |
godot_moho_importer (jpdurigan/godot_moho_importer) |
MIT (LICENSE) |
Yes, with attribution | Format facts used with attribution (see Sources 9) |
moho-file-analyzer (sinahojati/moho-file-analyzer) |
No LICENSE file | No (no permission to copy) | Behaviour only, no code |
fla-decoder (eddiemoore/fla-decoder, binary FLA notes and a Python decoder) |
MIT (LICENSE, Copyright 2026 Ed Moore; NOTICE repeats MIT) |
Yes, with the notice kept | Its format notes inform the clean-room bounded layer reader; no decoder code is ported (see FLASH-FORMATS.md) |
fla-viewer (lifeart/fla-viewer, TypeScript binary FLA viewer) |
ISC per package.json and the README badge; no LICENSE file in the repository |
Probably yes, but not confirmed from a licence file | Facts and behaviour only, no code. Its fixtures are used locally, not committed |
Ruffle (third_party/ruffle, including swf and the test movies under tests/ and swf/tests/swfs) |
MIT OR Apache-2.0 (LICENSE-MIT, LICENSE-APACHE in swf/) |
Yes, with notices | The swf crate is a dependency; test movies are read in place, not copied |
Flashbang (cure53/Flashbang, Shumway test and example FLAs, XFL folders, SWFs) |
MPL-2.0 (LICENSE) |
Yes for test data, file-level copyleft for code | Used as read-only test inputs; nothing copied |
OStimNG (VersuchDrei/OStimNG) and CrazyFlashNight (FlashNightModReborn/CrazyFlashNight) |
GNU GPL (LICENSE; version not recorded) |
No for code | Read-only XFL test inputs, used locally, never committed |
| JPEXS Free Flash Decompiler | GPLv3 (not fetched in this session) |
No | Facts only, if ever; no code |
eisai-anime-interpolator (ShuhongChen/eisai-anime-interpolator) |
AGPL-3.0 (license.txt) |
No: copyleft, not permissive | Behaviour and ideas only, no code; its neural weights are not used (ENGINEERING.md) |
flipnote.js (jaames/flipnote.js, Flipnote Studio parsers, test samples) |
MIT (LICENSE, Copyright (c) 2018 James Daniel) |
Yes, with the notice kept | Port allowed with attribution: the PPM parser was followed in crates/io/flare-import/src/flipnote/ (ENGINEERING.md). Its KWZ parser is not used yet |
Flipnote Collective flipnote-studio-docs (wiki, Flipnote Studio PPM) |
GPL-2.0 (LICENSE text fetched from the repository page) |
No: GPL | Facts only; no text or code copied |
Flipnote Collective flipnote-studio-3d-docs (KWZ format wiki) |
CC BY-SA 4.0 (LICENSE) |
No: share-alike does not fit a BSD-3 code base | Facts only; no text copied |
Hatenatools (pbsds/Hatenatools, Flipnote Hatena and Studio tools) |
AGPL-3.0 (README) |
No: copyleft | Not read for code; nothing used |
Ugomemo.NET (purifetchi/Ugomemo.NET, a different format, Ugomemo) |
MIT (repository licence) |
Yes | Not used: not a Flipnote format |
sudomemo-utils (Sudomemo/sudomemo-utils) and flipnote-id (pummelator/flipnote-id) |
MIT (repository licence) |
Yes | Not read for code; listed as leads for the KWZ and FSID work |
Policy the work packages follow. ARCHITECTURE.md already marks flare-tween
as clean-room ("the code follows the feature descriptions and standard easing formulas"), and
ENGINEERING.md says reference projects are not committed. So the default for
every package below is behaviour-only, written fresh: read the reference to learn what the
feature does, then write Flare's own code. A package may port a file from a permissive source
(MIT, Apache or BSD) only when the maintainer records that decision in docs/decisions/ with
the source, its licence and the changes. This is a recommendation for the maintainer to confirm.
The Rust implementation of the Animate authoring model that Flare absorbed (original/docs/ANIMATIONCRAFT_ABSORPTION.md
calls it "AnimationCraft"; its README title is "Flare (Rust)"). The largest feature source here.
Its README, the part read in this session, lists:
- Tools: Free Transform with skew, Distort and Envelope; 3D Rotation and Translation; Bone with inverse kinematics; Asset Warp; Width; Magic Wand and Break Apart; Paint Brush modes; Fluid Brush; Gradient Transform; Camera and a free camera (VCam) that follows a named object.
- Files:
.acx(a ZIP of JSON parts and PNG), XFL and.flaimport and export with custom eases, PNG, SVG, animated GIF, PNG sequence, video through ffmpeg, Publish Settings, HTML5 Canvas, sprite sheets (PNG with JSON hash, JSON array or Starling XML), animated SVG (SMIL), Lottie, Photoshop (PSD) import, XDTS timing sheet import and export, SVG import, images (PNG, JPEG, GIF, BMP, TGA, TIFF, WebP, OpenEXR), numbered image sequences. - Effects: Motion Blur along real movement; about 200 EffectCraft effects; Trace Bitmap with a centerline mode; Shift and Trace.
- From OpenToonz: stroke styles (Herringbone, Chain, Rope, and more), deformers (Magnet, Pinch, Pump, Bender, Iron), drawing assistants (line, vanishing point, ellipse, perspective, fisheye, replicators, jitter), 25 MyPaint raster brushes, IK with joint constraints, particle emitter.
- Motion Editor with expressions, eases, motion tweens, shape hints, reverse frames, onion skin, layer parenting, scenes, buttons (Up, Over, Down, Hit), instance names, sound and lip sync.
- Scripting: frame scripts in JavaScript (sandboxed), a Script Console (JavaScript, Python,
Node.js or Ruby over a JSON protocol) and JSFL compatibility. Crates:
ac-core,ac-render(witheffectcraft.rs),ac-script,ac-xfl,ac-audio,ac-package,ac-app,ac-cli.
A generative-media creation app: image (16 models), video (25), music (5), 3D mesh (11) and
Gaussian-splat (5) providers, with crates desktop, api_clients, lib, schema. Its
EffectCraft, PhotoCraft (photocraft-psd) and VectorCraft crates are the parts AnimationCraft
uses (original/LOGIC-ATLAS.md). Only its README headings were read here. Issue #207 on
Flare asks to share its UI modules. The AI generation features are out of scope for Flare.
A fork of nanofl: a Haxe engine (engine/nanofl, with FilterDef.hx, Ease.hx,
TextureAtlasTools.hx, MaskTools.hx) and a TypeScript IDE (ide, modules/). Its README
lists: edges, polygons and boolean operations; png, jpeg and svg rasters; masks, classic tweens
and motion guides; blur, drop shadow, glow, tint and brightness; linear, radial and bitmap
gradient fills; canvas text with web fonts; HTML5 output on EaselJS; 3D through three.js with
glTF and Blender conversion. Licence GPLv3: behaviour only.
An Electron and Python editor for Flash and AIR projects. It imports a SWF to an editable
.n2d project or a folder of PNG, WAV and AS files, and exports a SWF back. Other features: a
timeline, layers, library, transform and colour tools, filters; AS3 decompile and recompile with
a bundled Flex lite SDK (mxmlc, compc, asconfigc); SWF to CS6 FLA export; in-place SWF
patching through FFDec; the n2f command line (n2f.py, server.py). Its editor is in
app/src and app/electron. Licence: the MIT parts are portable; the FFDec worker is GPLv3.
A clean-room Rust editor for Animate .fla files, with crates core (minnamate-core), apps/cli
and apps/editor (egui). It reads and saves FLA and XFL, keeping unknown attributes in Extra.
It draws with tiny-skia, publishes SWF through Ruffle's swf crate, writes HTML5 Canvas and
renders GIF, PNG and video (ffmpeg). Its model covers folders, masks, guides and parenting,
motion and shape tweens (motion.rs, shape_tween.rs), buttons (button.rs), gradients,
bitmaps, filters and blend modes (filters.rs), sound (sound.rs), layer tree (layer_tree.rs),
and a frame-script subset (script.rs: stop, play, goto, next and previous frame, trace,
navigateToURL). Not yet, by its README: bones, 3D, Asset Warp, input text, several documents, custom
workspaces. Its layout follows Animate 2024's Essentials workspace.
The C++ base of Flare's old code (about 105 tool sources in toonz/sources/tnztools/). Relevant
areas: magnettool.cpp, irontool.cpp, pinch, pump and bender tools; assistant.cpp and
assistants/ (line, ellipse, perspective, vanishing point, fisheye); shifttracetool.cpp;
mypainttoonzbrush.cpp with its brush library in stuff/library/mypaint brushes/; stopmotion;
tcleanupper (cleanup); toonz/sources/toonzqt/ (widgets); stuff/profiles/layouts/fxs/
(about 160 FX definitions) and stuff/library/shaders/. Flare's flare-profile already reads
room layouts (ROADMAP, OpenToonz feature areas).
An OpenToonz fork with the same tool layout. Only its licence and README sections were read in this session; its animation-specific changes are not catalogued here. Treat it as a second copy of the OpenToonz tool sources to compare when a package is started.
Per original/FEATURE_STATUS.md: Moho projects (structure and rig read, no rig rendering);
a FlipaClip layout profile; the Next2Flash sidecar (AS3 decompile, constant-string patch,
compile through the Flex SDK); a game-creation scaffold (common/tgame, an ECS with 7 systems);
a Rust backend behind a C ABI; an Android scaffold; an NSIS installer. original/docs/FLASH_CC_GAPS.md
and original/docs/animatecraft/FUNCTION-SOURCES.md list more. Read only.
The reference list for docs/FLIPNOTE.md. Each source's licence is in the table above.
- flipnote.js (MIT):
src/parsers/PpmParser.tsandKwzParser.ts. The PPM and KWZ readers are ported with attribution. The seven real.ppmand eight.kwzfiles in itstest/samples/were used as verification data outside the repository (FLARE_FLIPNOTE_SAMPLES); they are not committed. - Flipnote Collective
flipnote-studio-docs(GPL-2.0): the PPM wiki, read for layout facts. - Flipnote Collective
flipnote-studio-3d-docs(CC BY-SA 4.0): the KWZ wiki, read for layout facts. - Hatenatools (AGPL-3.0) and Ugomemo.NET (MIT): the second is a different format and not used.
- No
.fpbmformat was found in the search..kwcfiles are KFH sections like KWZ; the samplecomment.kwcis refused with the KWZ message. - Open work: the KWZ and PPM sound (ADPCM decodes exist, no document layer), the thumbnails, the KWZ layer depths and draw order, and an oracle comparison of decoded pixels with flipnote.js (refused in this run).
| Source | Licence (file read) | Use |
|---|---|---|
jpdurigan/godot_moho_importer (godot_moho_importer) |
MIT (LICENSE, 2022 João Pedro Durigan) |
Format facts (layer type names, mesh and bone key names, track names) with attribution in ROADMAP; its CharWalk.moho and CharWalk.mohoproj used as real samples, outside the repo (not committed) |
| sinahojati/moho-file-analyzer | No LICENSE file (README and .ps1 only) |
Behaviour only, no code; not a source of format facts that are copied |
| SimplSam/moho-bvh-bones | CC BY-NC-SA 4.0 |
Behaviour only (ENGINEERING.md); no code |
Web search (Moho Lost Marble Project.mohoproj) |
Not applicable: only file-extension directories and a forum thread; no open-source parser or JSON schema found | Nothing taken |
The real Moho 13 files and their layout are recorded in MOHO.md. Samples are not committed; the tests use synthetic files written to match the layout.
Tried: gh search repos replicraft (HTTP 502 from the GitHub search API, same for nflare
and artcraft); git ls-remote on storytold/replicraft, storytold/Replicraft,
Replicraft/Replicraft, replicraft/replicraft; the same names under ArtCraft/,
artcraft-ai/ and Flare-Animate/; a grep of docs/, original/, README.md and
PORTING_TRACKER.md for "replicraft" (no match). Next step: the maintainer gives the URL.
Status: Built (in the code, tested), Partial (a library or part exists), Gap (not found), Not planned (ROADMAP or PARITY says so).
| Feature | Found in | Status on main | Evidence |
|---|---|---|---|
| Merge drawing (planar map, shapes cut and merge) | AnimationCraft | Gap | ROADMAP high priority; only a drawing-mode switch in flare-animate panels/drawing_mode.rs |
| Motion Editor and custom eases | AnimationCraft (motion.rs, tween_edit.rs), minnamate motion tweens |
Partial | Segment editor built (flare_tween::edit, Motion Editor panel); per-property graphs left (ROADMAP, SURFACES) |
| Bones and inverse kinematics | AnimationCraft (rig.rs, ik.rs), OpenToonz skeleton |
Partial | flare-rig has bones, keyed poses, forward kinematics and bounded two-bone/CCD IK; weighted meshes, constraints and master controllers are still open (ROADMAP, SURFACES) |
| Trace Bitmap, centerline | AnimationCraft (trace.rs, centerline.rs) |
Gap | only a stub in flare-tools/src/not_yet.rs |
| Shift and Trace | AnimationCraft, OpenToonz shifttracetool.cpp |
Gap | listed in not_yet.rs, not implemented |
| Deformers: Magnet, Pinch, Pump, Bender, Iron | AnimationCraft (deform.rs), OpenToonz |
Gap | listed in not_yet.rs |
| Stroke styles (Herringbone, Rope, Zigzag, and Animate's Dashed, Dotted, Ragged, Stipple, Hatched) | AnimationCraft (strokes.rs), OpenToonz |
Partly | StrokeStyle (solid, dashed, dotted, stipple, hatched, ragged, herringbone, rope, zigzag) is on every stroke, drawn by flare-render (the geometric ones in pattern.rs), saved in .flare, set in Properties and the tool options, and by draw-rect --stroke-style and draw_rect's stroke_style. Deformers are still open |
| Drawing assistants, perspective, vanishing point | AnimationCraft (assist.rs), OpenToonz assistants/ |
Gap | "Assistant tool" and "Edit assistant tool" in not_yet.rs; flare-animate/src/workspace/assist.rs exists and was not read, so check it first |
| Raster (MyPaint) brushes, art brushes | AnimationCraft, OpenToonz | Gap | "MyPaint Toonz brush tool" in not_yet.rs; ROADMAP lower priority |
| Particles | AnimationCraft (particles.rs) |
Gap | only an i18n string matches |
| Drop shadow, glow, blur, motion blur, colour filters | AnimationCraft (fx.rs), nflare, minnamate (filters.rs) |
Gap | "drop shadow", "glow", "motion blur" match nothing |
| EffectCraft effects (about 200) | AnimationCraft (effectcraft.rs) |
Gap | none found; a git dependency on ArtCraft crates would be needed |
| Import SVG | AnimationCraft | Gap | "svg" appears only in icon build code and the HTML5 publisher; ROADMAP high priority |
| Import Photoshop PSD | AnimationCraft, ArtCraft (photocraft-psd) |
Gap | no match; ROADMAP high priority ("artwork from Photoshop") |
| Import WebP, TIFF, TGA, OpenEXR | AnimationCraft | Gap | no match |
| XDTS timing sheet import and export | AnimationCraft (xdts.rs) |
Gap | no match |
| Sprite sheets (JSON hash, array, Starling XML) | AnimationCraft | Gap | no match; ROADMAP lower priority (sprite export) |
| Animated SVG (SMIL) and Lottie JSON | AnimationCraft | Gap | no match |
| Editable keyboard shortcuts and shortcut sets | AnimationCraft (keyboard section), OpenToonz shortcuts/*.ini |
Partial | ShortcutMap (flare-menubar/src/shortcuts/) holds four sets, conflict checks and a validated file; the Keyboard Shortcuts window edits it, tool letters follow it; Ctrl/Alt chords are still fixed key handling in furniture.rs and the macOS native menu |
| Scripting: sandboxed frame scripts, Script Console, JSFL | AnimationCraft (ac-script), minnamate frame-script subset |
Gap | not built; ROADMAP lists ActionScript 3 as lower priority |
| Lip sync (mouth-shape workflow) | AnimationCraft | Gap | no match; ROADMAP lower priority |
| Shape hints | AnimationCraft | Partial | flare-eval/src/morph.rs mentions shape hints; ROADMAP says not done |
| Free Transform Distort and Envelope | AnimationCraft | Gap | no match for Distort or Envelope in the code |
| Gradient Transform tool | AnimationCraft, nflare | Partial | gradient fills exist (50 files); the tool is ROADMAP lower priority |
| Find and Replace | AnimationCraft (not checked), ROADMAP lower priority | Gap | dock pane Pane::FindReplace (flare-dock/src/lib.rs) and an empty find_replace_panel stub (flare-animate/src/workspace/panels/info.rs); no behaviour |
| Stop motion camera capture | OpenToonz stopmotion, flare-stopmotion |
Partial | NoCamera refuses by name (SURFACES) |
Toonz import (.tnz, .pli, .tlv) |
OpenToonz | Partial | flare-toonz reads headers; levels not decoded (ROADMAP) |
| Moho import | original/, Flare flare-moho |
Partial | parse and conversion done, image layers included; bone-bound layers keep their own placement, actions not converted (MOHO.md) |
| Xsheet, FX schematic, Plastic, cleanup, render farm | OpenToonz, Tahoma2D | Not planned or P2/P3 | ROADMAP OpenToonz feature areas |
| Camera, VCam, layer parenting, masks, onion skin, buttons | AnimationCraft, minnamate | Built (buttons: Up state only, ROADMAP item 2) | ROADMAP, SURFACES |
| 3D rotation and translation, glTF | AnimationCraft, nflare | Not planned | out of scope in ROADMAP for now |
Each package is independent: it can be a branch of its own. Sizes are rough: S under a week of focused work, M one or two weeks, L several weeks, XL a milestone. Priority combines value to an Animate user (ROADMAP's rule: how much a person animating with Flare misses it) with effort. The list is in the order to start.
Surfaces follow SURFACES.md: a feature is not done until desktop, browser,
flare (CLI) and flare-mcp have it, or the gap is written down there with its reason. "Test
approach" names the library tests (with failure paths) and the wiring tests the rule needs.
- Goal: the shortcut table can be edited and saved, with named sets (
flare,animate,opentoonz, which profiles name). - Read in reference: AnimationCraft README "Keyboard" section; OpenToonz
stuff/config/shortcuts/(the.iniset format, BSD). - Target:
flare-input(foundation: key parsing and maps) andflare-menubar(presentation: the table), with settings stored inflare-recent's neighbour config, whichever fits. - Surfaces: desktop yes, browser yes (same workspace); CLI and MCP n/a (no keys).
- Test approach: map round trip, conflict detection, a rejected duplicate leaves the map unchanged, a corrupt file falls back to the default set with a message.
- Licence: OpenToonz format and AnimationCraft behaviour are portable; write the parser fresh.
- Goal: per-property graphs, custom ease curves and a Motion Editor panel, driven by commands.
- Read in reference: AnimationCraft README "Animation" section and
ac-core/src/motion.rs,tween_edit.rs; minnamatemotion.rsfor XFL custom eases. - Target:
flare-tween(foundation, built), new commands inflare-commands(editing:SetKeyframeInterpolation,CreateInbetweens, both one undo step each, as ROADMAP's tween section lists), the editor panel inflare-animate(presentation). - Surfaces: desktop and browser (the panel); CLI
flare tween list|eval; MCPtween_evalwith the same calls, so SURFACES rows change to yes. - Test approach: command tests with rejected batches, undo back to the exact document,
flare-tweencurve tests (exist), a surface test for the CLI and MCP wiring. - Licence: clean-room (ARCHITECTURE: flare-tween is clean-room). Standard easing formulas are public.
- Goal: turn a bitmap into merge-shape fills (colour threshold, minimum area, curve fit, corner threshold) and a centerline mode; ghost keyframes that slide under the drawing.
- Read in reference: AnimationCraft
ac-core/src/trace.rs,centerline.rs; OpenToonzshifttracetool.cpp. - Target: a new module in
flare-core(foundation: the image work) andflare-tools(editing: the command that places the shapes as one undo step); the ghost display inflare-animateandflare-render. - Surfaces: desktop and browser; CLI
flare trace-bitmapand MCPtrace_bitmapwith the parameters; Shift and Trace is desktop and browser only (n/afor CLI and MCP, with a reason). - Test approach: golden tests on small synthetic bitmaps (a square, a ring, line art), a bound on the number of points, a failing bitmap (empty, huge) refused with an error.
- Licence: AnimationCraft's trace is MIT/Apache; behaviour first, port only with a decision.
-
Status: SVG done (
flare-importsvg.rs, usvg 0.45 without its text feature; MIT/Apache). Bitmap content kind, PNG and animated GIF import, andimport_image_sequenceare done. Left: JPEG/WebP (decoder dependency), PSD, a CLI/MCP/desktop entry for sequences, bitmap blend modes, SWF/XFL export of bitmaps. -
Goal: SVG as editable shapes, PSD as one bitmap layer per Photoshop layer (in place), WebP, TIFF, TGA and OpenEXR bitmaps, animated GIF as frames, XDTS timing sheets.
-
Read in reference: AnimationCraft
ac-core/src/xdts.rs,ac-render/src/formats.rs, its README "Import" paragraphs; ArtCraftphotocraft-psdcrate (MIT/Apache) for the PSD reader. -
Target:
flare-import(io) for the readers,flare-corefor the decoders where a crate is the right tool; each format behind a bound on size and pixel count (ROADMAP: input is untrusted). -
Surfaces: desktop and browser (File > Import); CLI
flare importextended; MCPimport_project. -
Test approach: fixtures for each format; corrupt and truncated files refused, never a panic; size limits tested at the bound and one past it.
-
Licence: photocraft-psd and the image crates are MIT/Apache; check each dependency's licence before adding it, and record it in
THIRD-PARTY-NOTICES.
-
Status: sprite sheet (PNG grid plus JSON hash atlas) done in
flare-runtimesprites.rs, CLI and MCP; left: desktop and browser entries, trimming and duplicate sharing, animated SVG, Lottie, XDTS. -
Goal: the game and web outputs of the references: sprite sheets (PNG plus JSON hash, JSON array or Starling XML, trimmed, duplicates shared), animated SVG with SMIL, Lottie JSON, XDTS out.
-
Read in reference: AnimationCraft export section and
ac-render/src/formats.rs; nflare'sTextureAtlasTools.hxfor the atlas packing idea (behaviour only, GPLv3). -
Target:
flare-export(io) andflare-publish(io), with the frame data fromflare-eval. -
Surfaces: desktop (Publish dialog), browser (download), CLI
flare export --format ..., MCPexport_*tools. -
Test approach: golden output files for each format (a file a viewer loads), a frame range test at both ends, failure paths for an empty document and an over-limit atlas.
-
Licence: all formats are public specs (Starling XML, Lottie JSON, SMIL); write fresh.
- Goal: Magnet, Pinch, Pump, Bender and Iron deformers on drawing objects and merge shapes; OpenToonz's extra stroke styles (Herringbone, Chain, Rope, Zigzag, Wave, Curl and the rest).
- Read in reference: AnimationCraft
ac-core/src/deform.rs,strokes.rs; OpenToonzmagnettool.cpp,irontool.cpp, and the stroke style sources intoonz/sources/. - Target:
flare-tools(editing: the operations, asops::functions and commands) andflare-render(the stroke pattern). - Surfaces: desktop and browser; CLI and MCP partly (a
deformcommand over a shape id; stroke styles desktop and browser only, with the reason in SURFACES). - Test approach: operation tests with radius and strength bounds, undo, rejected empty selection, a stroke pattern golden image at fixed parameters.
- Licence: OpenToonz is BSD-3: porting is allowed with the notice; the default is still behaviour-only.
- Goal: straight-line, ellipse, perspective (one, two and three point), vanishing point and fisheye assistants that straighten strokes; replicators (mirror, star, grid, affine); jitter.
- Read in reference: AnimationCraft
ac-core/src/assist.rs; OpenToonztnztools/assistants/andmodifiers/modifierassistants.cpp. - Target:
flare-tools(the geometry, pure functions),flare-animate(the assist panel; first readflare-animate/src/workspace/assist.rs, which exists). - Surfaces: desktop and browser; CLI and MCP
n/afor live drawing, with a reason. - Test approach: geometry tests on known inputs (a line snaps to the given vanishing point), a degenerate guide (zero length, coincident points) refused, the overlay never enters the export.
- Licence: geometry is public; write fresh.
- Goal: an ordered effect stack for objects and groups: drop shadow, glow, blur, colour adjust, motion blur along real movement, and then the EffectCraft set (about 200 effects).
- Read in reference: AnimationCraft
ac-core/src/fx.rs,ac-render/src/effectcraft.rs; minnamatefilters.rs(kept in the element'sExtra); nflare'sFilterDef.hx(behaviour). - Target:
flare-document(the stack, as data),flare-core(pixel work),flare-render(draw),flare-publish(SWF PlaceObject3 and HTML5, where the format can hold it, else a warning). - Surfaces: desktop, browser, CLI (
flare filter add|list), MCP (add_filter). - Test approach: golden images for each filter at fixed parameters; a bound on radius and sample count; a stack with a cycle or unknown filter refused; undo.
- Licence: EffectCraft is MIT/Apache and a git dependency today; adopting it needs a decision on the dependency (size, build time, WebAssembly). The rest is clean-room.
- Goal: bones on shapes and symbols, IK chains posed with the Selection tool, poses as keyframes, joint limits and pins (ROADMAP's rigging section sets the larger goal).
- Read in reference: AnimationCraft
ac-core/src/rig.rs,ik.rs; OpenToonz skeleton andtnztoolsskeleton sources (BSD);flare-mohofor the Moho bone model. - Target:
flare-document(bones in the model, with a version bump and an upgrade test),flare-commands,flare-eval(the solver),flare-animate(the Bone tool). Decision first indocs/decisions/RIGGING.md, because ROADMAP asks for a rig that is Flare's own. - Surfaces: desktop and browser; CLI and MCP
add_bone,pose_bone; Spine- and DragonBones-style formats stay out. - Test approach: solver tests on known chains (two-bone reach, unreachable target leaves the chain at its limit), random edit sequences keep the document valid, undo exact.
- Licence: IK solvers are public algorithms; write fresh. OpenToonz and AnimationCraft behaviour only.
- Goal: Find and Replace across text, fonts, colours and symbols; shape hints on shape tweens
(their evaluation is partly there in
flare-eval/src/morph.rs); a visual frame picker for a graphic's first frame; Convert to Frame-by-Frame; Gradient Transform (F). - Read in reference: AnimationCraft README "Animation" and "Objects"; minnamate
shape_tween.rsfor hints. - Target:
flare-commandsandflare-document(the operations),flare-animate(dialogs). - Surfaces: desktop and browser; CLI
flare replaceand MCPfind_replacefor the text and symbol parts; the gradient tool and frame picker are desktop and browser only. - Test approach: replace on a document with no match changes nothing; a replace that breaks a symbol name is refused; shape hints with two points and with an unmatched count fail with an error; undo.
- Licence: clean-room; behaviour from the references.
- Goal: pixel brushes on a keyframe's bitmap, with MyPaint-style brush presets (pencil, ink, charcoal, airbrush, watercolour, smudge, erasers).
- Read in reference: AnimationCraft raster brush code and its 25 presets; OpenToonz
mypainttoonzbrush.cpp. Check each brush file's licence instuff/library/mypaint brushes/(OpenToonzLicenses.txt) before using any preset. - Target:
flare-core(the brush stamping, bounded by brush size and dab count),flare-tools(the tool),flare-animate(presets panel). - Surfaces: desktop and browser; CLI
flare paint-rasterand MCP as adrawcall (partly). - Test approach: golden images at fixed stroke input, a stroke's dab count bounded, an unreadable preset file refused, and a performance measurement against PERFORMANCE.md (not a timing claim without numbers).
- Licence: brush presets are the blocker: each preset file needs its own check. Engine written fresh.
- Goal: frame scripts run in a sandbox during playback, a Script Console and a JSFL compatibility layer, as AnimationCraft has them; or a decision that ActionScript 3 (ROADMAP's lower-priority item) is the only scripting Flare offers.
- Read in reference: AnimationCraft
ac-script/src/lib.rs,jsfl.js, itsSCRIPTING.md(the API and the safety model); minnamatescript.rs(the frame-script subset). - Target: a new crate only when it has code and tests (AGENTS): likely
flare-script(services layer, with a JavaScript engine as an adapter). The decision goes first indocs/decisions/SCRIPTING.md: sandbox, resource limits, what a script may change (commands only, one undo step per run). - Surfaces: desktop and browser (Script Console); CLI
flare script runand MCPrun_script, which must refuse anything outside the sandbox. - Test approach: the sandbox refuses file and network access by test, a runaway loop hits the limit, a script that writes through commands is one undo step, a failed script changes nothing.
- Licence: AnimationCraft's API and safety model are MIT/Apache, so a port is allowed; the engine choice must have a licence that fits BSD-3.
- Moho rendering, 3D, the Spine and DragonBones formats, Android features beyond what SURFACES.md lists: out of scope per ROADMAP's "Not planned" section.
- Tahoma2D-specific features beyond OpenToonz's tool set were not catalogued (see Sources, 7).
- Replicraft, until its URL is known.