Skip to Content
Projects & historyProject files & storage

Project files & storage

Projects are local first. The desktop app owns the file; the optional server is a sync target rather than a requirement.

The .motion bundle

A project is a directory bundle, not a single opaque file:

    • scene.json
    • animation.json
    • metadata.json
      • a3f1…
      • 9c2e…
  • JSON chunks for the scene, the animation and the metadata.
  • A content-addressed blobs/ directory for asset bytes — the same image used twice is stored once.

Two properties worth knowing

Chunks are written atomically — temp file, then rename. A crash never leaves a half-written project.

Every path is contained within the bundle root. A chunk name cannot escape it. That matters because a project file is a thing people send each other.

The single-file export

File → Export → Project writes a single .json, which re-opens with File → Open.

Use it to hand a project to someone, to attach to an issue, or to keep a checkpoint outside the bundle.

The local project index

The desktop build keeps a SQLite index of known projects, which is what makes the dashboard instant. If the native driver is unavailable it falls back to an in-memory index rather than failing.

The same layer keeps the crash-recovery trail — see History & versions.

Saving

ActionShortcut
SaveCtrl/ + S
Save AsCtrl/ + Shift + S
Increment and SaveCtrl/ + Alt + Shift + S

Increment and Save writes a numbered copy and continues in it — the safe move before an experiment you might want to abandon.

Autosave runs debounced in the background regardless.

The cloud path

With the companion server running, projects, assets, versions and the render queue can live server-side, with signed URLs for file access.

Sync is end-to-end encrypted, with manifest diffing over an HTTP transport.

The decided architecture is: the desktop app is the source of truth, and the backend is services plus an opt-in, end-to-end-encrypted opaque sync vault. The server is not required to work, and it cannot read your project contents.

The chunked bundle plus its six-table local index is designed but not yet fully implemented. Treat the format as still moving, and keep exported .json copies of anything you cannot afford to lose. See Known gaps.

Assets

PathWhere bytes live
Local-firstThe bundle’s content-addressed blobs/ directory
CloudCloudinary, keyed <kind>:<public_id>
Last updated on