Materializr
開源參數式 3D CAD 給創客 — 受限草圖、實體建模、螺紋、SVG 與文字雕刻、STL/STEP 匯出。Android、iPad、Linux、Mac、Windows。Vibe 編碼。
AI 翻譯
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A Flash-style animation editor that exports DragonBones
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A Flash-style animation editor that exports DragonBones.
I used Flash for fifteen years. Now that I am making my own 2D games I wanted an
animation program with the same approach: a timeline, layers, keyframes, symbols you
can open and animate inside.
But I wanted the result to be compatible with DragonBones skeletal animation, so I
could use it in PixiJS today and in other frameworks later. That is where Animo comes
from. It keeps full compatibility with the DragonBones format and, at the same time,
most of what made Flash worth using, with the same feel.檢視完整 README ↗A Flash-style animation editor that exports DragonBones.
Website · Architecture · Contributing
I used Flash for fifteen years. Now that I am making my own 2D games I wanted an animation program with the same approach: a timeline, layers, keyframes, symbols you can open and animate inside.
But I wanted the result to be compatible with DragonBones skeletal animation, so I could use it in PixiJS today and in other frameworks later. That is where Animo comes from. It keeps full compatibility with the DragonBones format and, at the same time, most of what made Flash worth using, with the same feel.
The two models line up better than they have any right to. DragonBones composes a transform exactly as Flash does:
a = cos(skY)·scX c = -sin(skX)·scY tx = x
b = sin(skY)·scX d = cos(skX)·scY ty = y
A pure rotation is skX == skY; shear is the difference between them. Scale, skew and
rotation map one-to-one, so nothing is approximated between what you draw and what the
runtime plays.
It runs in the browser. No install, no account, no upload: your project is a file on your disk.
The Preview panel and Play mode are not a second renderer. They export the project in memory and hand the actual DragonBones runtime the exact bytes that would go to disk. If the stage and the preview disagree, the export is wrong, and you find that out while authoring, not after shipping.
Editor and runtime world matrices currently agree to 0 at keyframes and to ~3e-6 mid-tween, which is the exporter's own rounding.
| Timeline | Flash frame algebra: F5/F6/F7, keyframe drag, frame ranges, three clipboards, Paste and Overwrite, per-property easing with a curve editor |
| Symbols | Symbol = armature. Convert to Symbol, edit in place with the scene dimmed behind, nested symbols drawn at the playhead |
| Bones and IK | Two-bone and look-at chains, solved with a transcription of the runtime's own solver, so the stage shows what the runtime will do |
| Layers | Groups, z-order as one depth-first list, several displays per layer, exclude-from-export for reference art |
| Masks | A mask layer clipping the layers linked to it, nested symbols included |
| Onion skin | Ghosts between two markers on the ruler, past/future tinted, plus Edit Multiple Frames, which moves every keyframe in the range as one object |
| Motion blur | Per-sprite, from real pixel motion, driven by a shutter angle |
| PSD import | Groups become symbols, layers become images, raster masks applied, positions preserved |
| Export | DragonBones 5.5 skeleton, MaxRects atlas with alpha trimming, as a zip or straight to a folder |
| The rest | Undoable everything, rebindable keymap, dockable and floatable panels, rulers, guides, snapping, preferences |
npm install
npm run dev # http://localhost:5180
Chrome or Edge. Saving to a real file needs the File System Access API (elsewhere it falls back to a download and a file picker); the preview needs WebGL.
npm test # vitest
npm run build # tsc --noEmit && vite build
M, bind artwork to them, add IK targets with K.F6, tweens in between, easing per property.The export contains <name>_ske.json, the atlas pages and, when the project uses a
feature the format cannot carry, <name>_ext.json plus animo-pixi.js. In your game:
import { installExtensions } from "./animo-pixi.js";
const factory = dragonBones.PixiFactory.factory;
factory.parseDragonBonesData(skeletonJson); // <name>_ske.json
factory.parseTextureAtlasData(atlasJson, atlasTexture);
const display = factory.buildArmatureDisplay("<armature>");
app.stage.addChild(display);
// extJson is <name>_ext.json, loaded as plain JSON.
const extensions = installExtensions(display, extJson, { PIXI, ticker: PIXI.Ticker.shared });
display.animation.play();
// When the armature is removed:
extensions.destroy();
A project that uses neither masks nor motion blur exports plain DragonBones 5.5 and needs none of this.
DragonBones is the format and the runtime. Animo writes DragonBones 5.5 data read out
of the runtime's own parser rather than out of documentation. Every part of that contract
fails silently when you guess it wrong, so the source is the authority
(the list is in the architecture doc).
The runtime is vendored in public/vendor/ so the preview can run the real thing.
PixiJS 8 is the reference host. DragonBones 5.5 has no mask and no motion blur, not in
the format, not in the parser, not in PixiSlot, so both ship beside the skeleton as
runtime extensions, in a manifest modelled on glTF's. Each one is written into the export
only when the project actually uses it:
ANIMO_masks lets you show one part of the artwork and hide another, softly if you
want: the clip follows the alpha channel, so a semi-transparent mask leaves what is
under it semi-transparent. An export that carries masks marks it required, because a
player that skips it draws artwork meant to be hidden.ANIMO_motion_blur makes fast movement read as more cinematic, dialled in per
element. It is optional: a player that skips it plays the animation without the
softening.One file, src/runtime/animo-pixi.js, implements both. The editor's own preview imports it
and the export ships it byte for byte, so the preview cannot drift from what a game sees.
The manifest stores intent (a shutter angle, not a Pixi filter setup), so another runtime
can implement the same extension names, and a future video export can honour the same
numbers exactly.
A stock DragonBones player (the official one, Cocos, Unity) ignores the extensions. The export diagnostics say so out loud rather than letting you find out later.
The one rule everything else rests on: core/ imports nothing from view/, app/ or
io/, and touches no DOM. That is what lets the risky logic (transform maths, frame
algebra, the export contract, the atlas packer) run under vitest in Node.
src/
core/ pure logic: math · document model and frame algebra · history · atlas · export · keys
app/ Store, AssetStore, TimelineOps, clipboards, ProjectService, Keymap
view/ shell, dockable panels, canvas viewport, tools, timeline
io/ atlas rendering, zip bundling, file access, PSD reading
preview/ the runtime iframe host and its client
runtime/ animo-pixi.js, the extension module that ships inside the export
docs/ARCHITECTURE.md is the real documentation: 1500 lines on how this is put together and, mostly, on the things that fail silently when you get them wrong. Read the section covering what you are about to touch.
Stated plainly, because a feature list that quietly omits these is worse than useless:
PixiSlot applies only the colour multipliers, so Flash's
additive Tint is not reproducible. The exporter warns if a document carries offsets.A paid desktop edition is in the works, and it pays for the work on this one: video and spritesheet export, extra export formats, and an MCP server so an agent can drive the editor. It will be at morenoise.it. Everything you see in this repository stays free and open source.
You can also sponsor the project.
AGPL-3.0-or-later. See LICENSE.
What you export is yours. The skeleton, the atlas, the extension manifest and
animo-pixi.js shipped beside them are MIT-licensed and put no obligation on the game you
put them in. That carve-out is explicit: LICENSE-EXCEPTION.md.
Commercial licences for the editor are available: [email protected].
Issues and pull requests are welcome. Please read CONTRIBUTING.md first; it is short, and it points at the three rules in this codebase that are easy to break by accident. Contributors sign a CLA, which is what keeps the dual licence above possible.
Built on DragonBones and PixiJS, both MIT, plus ag-psd and fflate. Full notices in THIRD-PARTY-NOTICES.md.
By Morenoise.
DragonBones is a trademark of Egret Technology. PixiJS, Photoshop and Adobe Animate are trademarks of their respective owners. Animo is an independent project, not affiliated with or endorsed by any of them.