You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/Features/Project-Persistence.md
+7-1Lines changed: 7 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -93,6 +93,7 @@ Projects are stored in a local folder you choose:
93
93
```
94
94
MyProject/
95
95
+-- project.json # Main project file
96
+
+-- project.autosave.json # Fallback when browser FSA cannot update project.json
96
97
+-- .keys.enc # Encrypted API keys (auto-saved with project)
97
98
+-- Raw/ # Auto-copied media files (portable)
98
99
| +-- Interview_01.mp4
@@ -170,6 +171,8 @@ There are two save modes in the current branch:
170
171
1.**Continuous save** (default): `projectLifecycle.ts` subscribes to the media, timeline, FlashBoard, dock, and download-related stores, marks the project dirty, and writes the project after a short debounce. Keyframe changes flush more aggressively.
171
172
2.**Interval save**: `Toolbar.tsx` can still run a timer-based autosave loop. In this mode, the timer creates a backup first and then saves the project.
172
173
174
+
Project JSON writes are serialized so continuous save, interval save, manual save, and page-unload flushes do not open overlapping writers for the same file. If Chromium's File System Access API cannot create the temporary swap file for `project.json`, the current state is written to `project.autosave.json`; project load prefers that file when it is newer than `project.json`.
175
+
173
176
### Autosave Configuration
174
177
Access via **Settings -> General** for save mode, plus **File -> Autosave** for the interval controls:
175
178
@@ -324,11 +327,13 @@ interface ProjectFile {
324
327
- Composition view state per composition (playhead, zoom, scroll, in/out points)
325
328
- Media panel column order and name width
326
329
- Transcript language preference
327
-
- Global MIDI state: enabled flag and transport bindings (`Play / Pause`, `Stop`)
330
+
- Global MIDI state: enabled flag, transport bindings (`Play / Pause`, `Stop`), parameter mappings, mapping ranges, and invert flags
- Export panel state: live export settings, named export presets, and the selected preset
331
334
335
+
Temporary camera `NO KF` live offsets are intentionally not saved. They only affect the current preview session while the stored camera keyframes remain the project source of truth.
336
+
332
337
### Other Persisted Panels
333
338
- YouTube panel state is saved in `project.json`
334
339
- FlashBoard workspace state is saved in `project.json` when boards exist
@@ -337,6 +342,7 @@ interface ProjectFile {
337
342
| Location | Contents |
338
343
|----------|----------|
339
344
|`project.json`| Main project data |
345
+
|`project.autosave.json`| FSA fallback copy used when `project.json` cannot be updated directly |
Copy file name to clipboardExpand all lines: docs/Features/UI-Panels.md
+15-4Lines changed: 15 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -179,11 +179,12 @@ MasterSelects currently exposes 17 dockable panel types, plus the Slot Grid over
179
179
### MIDI Mapping Panel
180
180
181
181
- Open from `View -> Panels -> MIDI Mapping`
182
-
- Shows all currently assigned MIDI notes in one list
183
-
- Includes global transport bindings, per-marker bindings, and Slot Grid trigger bindings
182
+
- Shows all currently assigned MIDI notes and control-change bindings in one list
183
+
- Includes global transport bindings, per-marker bindings, Slot Grid trigger bindings, and property parameter bindings
184
184
- Each row shows the note, target, and resulting command behavior
185
-
- Click any mapping card to trigger the assigned action and preview what the MIDI note does
185
+
- Click any transport, marker, or slot mapping card to trigger the assigned action and preview what the MIDI note does
186
186
-`Edit` opens inline controls for manual channel/note changes and marker reassignment
187
+
- Parameter mappings expose inline `Min` / `Max` range inputs plus an `Invert` toggle
187
188
-`Learn` and `Clear` remain available directly from the panel
188
189
- Marker bindings support `Jump To Marker`, `Play From Marker`, and `Jump To Marker And Stop`
189
190
- Slot bindings can be created from the Slot Grid filled-slot context menu, which opens this panel with a pending `Listening...` mapping
@@ -347,6 +348,14 @@ The unified Properties panel adapts its tabs to the selected clip type and to sl
347
348
|**Splat effector**| Transform, Effector |
348
349
|**Slot Grid clip**| Slot Clip |
349
350
351
+
### Camera Transform Controls
352
+
353
+
- Camera clips expose `Nav Mode` controls at the top of the Transform tab.
354
+
-`FPS` switches preview navigation between orbit-style look and FPS-style look.
355
+
-`NO KF` keeps existing camera keyframes active during playback, but routes preview navigation and MIDI camera-look input into temporary live offsets instead of writing new camera keyframes.
356
+
- Live `NO KF` offsets are added on top of the keyframed camera pose for preview control and are cleared when `NO KF` is turned off.
357
+
- Live `NO KF` offsets are not saved to the project and are ignored for export renders, so the stored camera animation remains the source of truth.
358
+
350
359
### Solid Clip Behavior
351
360
352
361
- Solid clips show a color picker bar above the tabs
- The panel lists all assigned transportand marker bindings
427
+
- The panel lists all assigned transport, marker, slot, and parameter bindings
419
428
- Clicking a binding previews the exact trigger path without needing a physical MIDI note
429
+
- Parameter bindings can be range-adjusted and inverted directly in the mapping panel
420
430
- Empty-state guidance points back to Settings and the marker right-click menu
431
+
- Right-click a numeric parameter name in the Properties panel to open its MIDI menu and learn or clear a MIDI note/CC binding. Right-clicking the numeric value itself still resets the value to its default. Learned CC values map across the parameter's configured range and then use the same edit path as manual changes.
Copy file name to clipboardExpand all lines: src/changelog-data.json
+21Lines changed: 21 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -1,4 +1,25 @@
1
1
[
2
+
{
3
+
"date": "2026-04-27",
4
+
"type": "new",
5
+
"title": "Camera NO KF Live Override Mode",
6
+
"description": "Camera clips now expose a NO KF toggle next to FPS navigation. Existing camera keyframes keep driving playback while MIDI and preview navigation write temporary live offsets on top instead of creating new camera keyframes.",
7
+
"section": "Preview / Camera"
8
+
},
9
+
{
10
+
"date": "2026-04-27",
11
+
"type": "improve",
12
+
"title": "MIDI Parameter Mapping Gets Ranges and Invert",
13
+
"description": "Property labels can open MIDI learn with right-click while values still reset with right-click. Parameter mappings are now shown in the MIDI Mapping panel with editable min/max ranges and an invert toggle.",
14
+
"section": "MIDI"
15
+
},
16
+
{
17
+
"date": "2026-04-27",
18
+
"type": "fix",
19
+
"title": "MIDI and Marker State Persist Reliably",
20
+
"description": "Project saves now include MIDI enabled state, marker bindings, parameter mappings, mapping ranges, and invert settings so live-control setups restore with the project.",
0 commit comments