Editable by MotionForge
- Text and color literals
- Numbers and animated numbers
- Booleans and select values
- Properties declared with property.*()
MotionForge turns explicitly declared TSX properties into a focused visual interface, while every hook, expression, and line of React logic stays under developer control.
Reveal the headline word by word.
The developer decides what can be changed. MotionForge maps those declarations to precise controls instead of inferring intent from arbitrary React.
property.text()Text input with a validated string literal
property.color()Color control backed by a literal value
property.number()Numeric input with optional bounds
export default defineMotionComposition({
id: "LaunchCard",
properties: {
title: property.text({
defaultValue: "Launch faster",
}),
accent: property.color({
defaultValue: "#8B5CF6",
}),
scale: property.number({
defaultValue: 1,
min: 0.8,
max: 1.2,
}),
},
render: LaunchCard,
});Traditional editors tend to own their output. MotionForge owns only the small, explicit surface you hand to it.
AST validation identifies declared literals and rejects unsafe expression shapes.
Only the exact source range of a validated literal is updated.
A short-lived Vite session refreshes the selected composition with HMR.
Expressions stay intact and appear as developer-controlled values.
Formatting, neighboring code, imports, and control flow remain yours.
The composition mounts inside @remotion/player, not a visual approximation.
A deliberately narrow pipeline keeps visual editing understandable, reviewable, and safe.
Use defineMotionComposition() and property.*() to expose a controlled set of literals.
MotionForge parses declarations and creates matching visual controls.
Change text, color, numbers, and animated values in a focused inspector.
Validated literals update in place. The rest of the TSX remains unchanged.
MotionForge validates structure with an AST, but never treats arbitrary React as safe for automatic round-trip editing.
Entry source and preview files enter a short-lived Vite session. The editor talks to @remotion/player through a narrow message bridge.
npm imports, relative files, and the @/ alias
@motionforge/runtime wired through Vite
play(), pause(), and seekTo() via postMessage
TypeScript, import, bundler, and runtime errors
MotionForge Editor
source + files
Preview Session / Vite
npm, files, aliases
Sandboxed iframe
isolated execution
@remotion/player
real composition runtime
Support is intentionally explicit. Unsupported means MotionForge leaves the expression under developer control—it does not mean the composition is broken.
property.text({
defaultValue: "Launch faster",
})property.color({
defaultValue: "#7C3AED",
})property.number({
defaultValue: 24,
})Built on tools developers already use
Switch between Visual, Code, and Split views. Inspect declared properties while the timeline and isolated preview stay in sync.
MP4 export UI is present; server-side rendering is not implemented yet.
Start the editor and its isolated preview service with the repository's standard scripts.
$ npm install
$ npm run db:push
$ npm run devFor another origin, set NEXT_PUBLIC_MOTIONFORGE_PREVIEW_URL. Configure the bind address with MOTIONFORGE_PREVIEW_HOST and the port with MOTIONFORGE_PREVIEW_PORT.
npm run devDevelopment servernpm run buildProduction buildnpm startStart standalone buildnpm run checkLint, typecheck and testsnpm run db:pushSync Prisma schema to SQLiteWhat MotionForge edits, what it preserves, and what is still outside the product today.
No. MotionForge edits only properties explicitly declared through defineMotionComposition() and property.*(). Arbitrary component logic remains read-only.
Declarations create a predictable editing boundary. They tell the editor exactly which values are safe to expose and update.
No. It validates the source structure and updates only the exact literal range tied to a declared property.
Text, color, number, animated number, boolean, and select values are supported when their configuration uses supported literals.
Yes. The selected composition is mounted in @remotion/player inside an isolated preview session.
The Vite preview service resolves npm imports, relative preview files, the @/ alias, and @motionforge/runtime through an alias.
Preview code runs in a sandboxed iframe backed by a short-lived preview session. Editor controls communicate through postMessage.
The MP4 export interface exists, but server-side rendering is not implemented yet. The UI does not imply a completed render pipeline.
Yes. The current application includes persisted projects and template workflows backed by Prisma and SQLite.
No. It is a focused visual companion for declared composition properties, not a replacement for your IDE or normal TypeScript workflow.
Source stays source
Define a safe editing surface, work with the composition visually, and keep using the TypeScript workflow you already trust.