Repository navigation
Free keyframes: keys per property, ◆ in the Inspector, key rows and autokey in the timeline - #23
Merged
Merged
Conversation
Keys per property (transform, material, modifier and shape settings), each with its own time, value and curve. Transform keys ride as a pose link outside a node's motion; setting keys win over cycles in the renderer and geoMotion; edits to keyed properties key at the playhead (autokey starts keys). Files without keys load unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
‹ ◆ › next to the transform fields, opacity and every animatable setting (↻ keeps the cycle); a row per keyed property in the timeline with draggable diamonds, a key editor and Backspace to delete; a record switch for autokey. morpho describe and timing show keys, set writes them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
◆ pauses on the frame it keys and keys the value there; ‹ › look at click time while playing; key edits outside a drag settle the layer's own transform onto the key, so its outline sits where it's drawn; timeline rows use the layer's label; timing notes keys that jump at the loop seam. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
A number box selected its text a frame after taking focus, so keys typed in that frame were selected and the next one replaced them (45 became 5 in CI). It now selects only while its text is untouched. The free-keys e2e waits for the box to settle, polls for each key and says where it typed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Free keyframes: any number of keys per property, each at its own time with its own value and its own curve, like Figma Motion's timeline. "Rotate 0° at 0 s → 45° at 1 s → 30° at 2.5 s" is now three clicks, or one
morpho set. Presets (entrance / Then / loop) stay the main path; keys are the "more control" layer, and both act at once (a layer can float and follow keys).Model (
ui/src/state/keys.ts, evaluation inmotion.ts)Key { t, v, ease? }, whereeaseis the curve into the key: an easing or time spring stretched over the gap from the key before, or a physics spring at its own pace. The default is ease in out.node.keysholds the transform (x, y, rotation, scale, opacity) and geometry (the samemod:/sym:/morph:t/line:names asanimate).style.keysholds material settings, numbers and colours.migrate()sorts keys and drops malformed ones.Evaluation
buildScenehands them to the renderer as their ownMotionLink, after the node's own motion and posed about the layer's origin, so a keyed rotation is exactly the layer with that rotation.effectUniformsfor materials, andgeoDriversin geoMotion, so moving geometry rebuilds as it does for cycles.morpho timingsays so.placement,effectUniformsandmovingDocAt.Inspector
Timeline
morpho CLI (kept small)
edit.ts:Star.keys.rotation=[[0,0],[1,45],[2.5,30,"linear"]], and likewisekeys.<material param>and geometry keys.nullremoves them. Values and curves are checked, and the timeline grows to hold the last key.describe.tslists keys.timing.tsdraws ◆ rows and notes keys past the end or jumping at the loop seam.catalog keyframesdocuments keys.page.ts: one-line change so keyed designs count as moving.Tests
state/keys.test.tscovers evaluation, transform and group poses, composition with motion, geometry keys winning over cycles, edit/autokey semantics, parsing and migration.agent/keys.test.tscovers set, describe, timing and catalog.tracks.test.tscovers key rows.npm testandnpm run typecheckpass.origin/maincrashed the same way.fill()race; the test now types like a person.npm run build && npm run test:e2eon a quieter machine before merging.npm run morpho -- videoof a star with 4 rotation keys plus fill keys; frames 0, 30, 75 and 119 show 0°, 45°, 30° and ≈−90°.Known limits / follow-ups
morpho videostill prints "(loops seamlessly)" for any looping timeline. That line is inscripts/morpho.mjs, which another session is editing, so it's left alone here.🤖 Generated with Claude Code