Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
</p>

<p>
<a href="https://github.com/Sportinger/MasterSelects/releases"><img src="https://img.shields.io/badge/version-1.7.0-blue.svg" alt="Version"></a>
<a href="https://github.com/Sportinger/MasterSelects/releases"><img src="https://img.shields.io/badge/version-1.7.2-blue.svg" alt="Version"></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License"></a>
<a href="https://app.fossa.com/projects/custom%2b61097%2fmasterselects"><img src="https://app.fossa.com/api/projects/custom%2b61097%2fmasterselects.svg?type=shield" alt="FOSSA Status"></a>
</p>
Expand Down Expand Up @@ -146,7 +146,7 @@ This requires the Native Helper to be running, a MasterSelects editor tab to be
| [**Export Pipeline**](docs/Features/Export.md) | WebCodecs Fast/Precise, FFmpeg intermediates, image/audio-only export, FCPXML, and project-persistent presets |
| [**Live EQ & Audio**](docs/Features/Audio.md) | 10-band parametric EQ with real-time Web Audio preview |
| [**Download Panel**](docs/Features/Download-Panel.md) | YouTube, TikTok, Instagram, Twitter/X, Vimeo, and other yt-dlp-supported sites via Native Helper |
| [**Vector Animation**](docs/Features/Vector-Animation.md) | `.lottie` and Lottie JSON clips with loop controls, fit, and deterministic preview/export |
| [**Vector Animation**](docs/Features/Vector-Animation.md) | `.lottie` and Lottie JSON clips with bounce playback, render resolution overrides, keyframed state machines, and deterministic preview/export |
| [**Text & Solids**](docs/Features/Text-Clips.md) | 50 Google Fonts, stroke, shadow, and solid color clips |
| [**Proxy System**](docs/Features/Proxy-System.md) | GPU-accelerated proxies with resume and cache indicator |
| [**Output Manager**](docs/Features/Preview.md) | Multi-window outputs, source routing, corner pin warping, slice masks |
Expand Down
14 changes: 13 additions & 1 deletion docs/Features/Keyframes.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

[<- Back to Index](./README.md)

The keyframe system animates clip properties over time using per-clip keyframe maps, curve editors, and Bezier handles. It supports transform properties, speed, and numeric effect parameters.
The keyframe system animates clip properties over time using per-clip keyframe maps, curve editors, and Bezier handles. It supports transform properties, speed, numeric effect parameters, and vector-animation state/input properties.

---

Expand Down Expand Up @@ -40,6 +40,17 @@ Examples:

Audio fades are built from `audio-volume.volume` keyframes, and EQ lanes use the same effect-property naming pattern.

### Vector Animation Properties

Lottie state machines use the same keyframe store as transform and effect properties:

```text
lottieState.{stateMachine}
lottieInput.{stateMachine}.{input}
```

`lottieState.*` keyframes are discrete named states. They render as blue diamonds and stepped curves because a state change should hold until the next state keyframe, not ease between values. Boolean and numeric `lottieInput.*` properties use the normal stopwatch/keyframe workflow.

### Visibility Rules

- 2D clips hide `rotation.x`, `rotation.y`, `position.z`, and `scale.z` in the timeline UI.
Expand Down Expand Up @@ -99,6 +110,7 @@ When recording is enabled:
- Dragging a handle updates the stored handle position and switches the keyframe to Bezier mode.
- `Shift+drag` on a keyframe constrains movement to one axis in the curve editor.
- Right-clicking a handle resets it to the default 1/3-distance handle for that segment.
- Lottie state keyframes show state labels on the value axis and draw stepped segments instead of Bezier curves.

### Delete and Copy/Paste

Expand Down
10 changes: 5 additions & 5 deletions docs/Features/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Current feature documentation for the `staging` branch.

Version 1.5.4 | April 2026
Version 1.7.2 | May 2026

---

Expand All @@ -23,7 +23,7 @@ The docs in this folder were re-audited against the current codebase and now tra
| **AI Control** | OpenAI/Cloud or local Lemonade chat with 79 exported tools plus local/native bridge access for external agents |
| **AI Video Workspace** | Classic AI Video plus FlashBoard board-mode generation and media import |
| **3D Layers** | Shared-scene 3D layers, camera clips, Gaussian splats, and splat effectors |
| **Vector Animation** | Lottie clips with deterministic canvas playback, looping, and export |
| **Vector Animation** | Lottie clips with deterministic canvas playback, bounce modes, render resolution overrides, keyframed state machines, and export |
| **Audio** | Element-synced playback, drift correction, waveform extraction, EQ, and audio export |
| **Project Storage** | `project.json` source of truth, RAW-copy-first media flow, autosave, relink, backups |
| **Native Helper** | Firefox storage backend, yt-dlp download flow, local AI bridge, native jobs |
Expand Down Expand Up @@ -55,7 +55,7 @@ The docs in this folder were re-audited against the current codebase and now tra
| [Masks](./Masks.md) | Overlay mask editing, feathering, stored modes, and current limitations |
| [Text Clips](./Text-Clips.md) | Canvas-backed text rendering, typography controls, and timeline text items |
| [3D Layers](./3D-Layers.md) | Shared-scene path, native Gaussian splats, cameras, and splat effectors |
| [Vector Animation](./Vector-Animation.md) | Lottie import, runtime playback, looping, and export behavior |
| [Vector Animation](./Vector-Animation.md) | Lottie import, runtime playback, bounce modes, state-machine keyframes, and export behavior |
| [Audio](./Audio.md) | Playback sync, EQ, waveform extraction, audio clip behavior, and export |
| [Export](./Export.md) | WebCodecs fast/precise export, animated GIF, FFmpeg intermediates, image frame/sequence export, audio-only export, FCPXML, and project-persistent presets |
| [Proxy System](./Proxy-System.md) | Proxy generation, on-disk frame layout, audio proxies, and warmup behavior |
Expand Down Expand Up @@ -113,7 +113,7 @@ Native Helper Rust service with HTTP/WebSocket bridge, yt-dlp, helper-backed

## Audit Notes

- The authoritative app version is [`src/version.ts`](../../src/version.ts), currently `1.5.4`.
- The authoritative app version is [`src/version.ts`](../../src/version.ts), currently `1.7.2`.
- Preview quality is wired into engine-backed preview resolution through `useEngine()`; it does not affect export resolution or the HTML-only source monitor.
- `openComposition` and `searchVideos` are still the two known AI dispatch gaps.
- Gaussian AI tool definitions exist in code but are not exported through `AI_TOOLS` yet.
Expand All @@ -124,4 +124,4 @@ Native Helper Rust service with HTTP/WebSocket bridge, yt-dlp, helper-backed
## Version History

See [`src/version.ts`](../../src/version.ts) and [`src/changelog-data.json`](../../src/changelog-data.json) for the authoritative changelog.
Current version: 1.5.4.
Current version: 1.7.2.
5 changes: 4 additions & 1 deletion docs/Features/Timeline.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ getTrackChildren() // Query child tracks
### Lottie
- Imported from `.lottie` packages or Lottie JSON files from the Media Panel.
- Uses the same canvas-backed render path as text and solids, so preview, nested comps, and export stay deterministic.
- Exposes per-clip loop, end behavior, fit, animation selection, and background controls in the Properties panel.
- Exposes per-clip loop, end behavior, playback mode, fit, render resolution, animation selection, and background controls in the Properties panel.
- `.lottie` state machines can be selected in the Lottie tab, with state changes stored as blue stepped keyframes.
- Boolean and numeric `.lottie` state-machine inputs appear as normal stopwatch-keyframed properties.
- When loop is enabled, the clip can be extended beyond its source duration on the right trim edge without freezing on the first pass.

### Solid
Expand Down Expand Up @@ -129,6 +131,7 @@ getTrackChildren() // Query child tracks
- The UI hides `rotation.x`, `rotation.y`, `position.z`, and `scale.z` for 2D clips.
- Camera clips and native-render gaussian splats keep the camera-style property model visible.
- Numeric effect parameters appear as `effect.{effectId}.{paramName}` lanes.
- Lottie state changes appear as `lottieState.{stateMachine}` lanes; state-machine inputs appear as `lottieInput.{stateMachine}.{input}` lanes.
- Audio EQ lanes sort `volume` and the band parameters first.

### Curve Editor
Expand Down
13 changes: 13 additions & 0 deletions docs/Features/Vector-Animation.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,13 @@ Current controls:

- Loop toggle
- End behavior: `hold`, `clear`, or `loop`
- Playback mode: `forward`, `reverse`, `bounce`, or `reverse-bounce`
- Fit: `contain`, `cover`, or `fill`
- Render resolution override with fallback to the imported animation size
- Animation picker when a `.lottie` package exposes multiple animations
- State Machine picker when a `.lottie` package exposes state machines
- State override plus stepped state keyframes for discrete timeline-driven state changes
- Boolean and numeric state-machine inputs as normal stopwatch keyframe properties
- Background color override

The tab also shows the clip name plus imported width, height, and frame rate metadata when available.
Expand All @@ -48,7 +53,11 @@ The tab also shows the clip name plus imported width, height, and frame rate met
Lottie playback is driven by `src/services/vectorAnimation/LottieRuntimeManager.ts`.

- Each clip gets a dedicated runtime canvas.
- The runtime canvas can use the imported animation size or the clip-level render resolution override.
- Timeline time is converted into a deterministic target frame rather than relying on autoplay.
- Bounce modes are resolved in the timeline-time mapping, so preview and export render the same ping-pong frames.
- If a state machine is selected, `lottieState.{stateMachine}` keyframes resolve the active state at the current timeline time before the frame is rendered.
- If state-machine inputs are keyframed, the interpolated input values are applied before the frame is rendered.
- The runtime canvas is marked as dynamic, so `TextureManager` re-uploads it every frame instead of caching only the first frame.
- The same canvas-backed source flows through preview, nested comps, slot/background playback, thumbnails, and export.

Expand All @@ -62,6 +71,7 @@ Saved data includes:

- media-level vector metadata
- clip-level `vectorAnimationSettings`
- Lottie playback mode, render resolution, state machine selection, static state override, state keyframes, and state-machine input values
- serialized timeline clip type `lottie`
- clipboard payloads and nested-composition clip data

Expand All @@ -86,5 +96,8 @@ This keeps Lottie clips deterministic in fast preview, precise export, and image
## Current Limits

- Only Lottie is implemented today. Rive is not.
- State machine support currently targets `.lottie` packages through `@lottiefiles/dotlottie-web`; Rive state machines are still not wired.
- Boolean and numeric state-machine inputs are exposed as keyframe controls. String inputs are static for now, and trigger/event inputs are not deterministic timeline controls yet.
- State selection uses stepped `lottieState.{stateMachine}` keyframes rather than bezier curves because named states are discrete strings.
- Export output is rasterized; there is no vector-native export target.
- If no `Raw/` copy or file handle is available after reload, the clip still needs the normal relink flow.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "masterselects",
"private": true,
"version": "1.7.1",
"version": "1.7.2",
"type": "module",
"scripts": {
"dev": "vite",
Expand Down
Loading
Loading