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
10 changes: 9 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,15 @@ Diese Datei ist das Codex-Pendant zu `CLAUDE.md`. Wenn sich Workflow, Branch-Reg

---

## 0. Projektziel / Vision
## -1. Arbeitsprinzip / Top Memory

MasterSelects wird nicht fuer kurzfristige Loesungen optimiert. Da das Projekt AI-powered sehr schnell entwickelt werden kann und aktuell keine externen User blockiert, sind grosse, richtige Architekturentscheidungen ausdruecklich erlaubt und bevorzugt.

Default ist: langfristig denken, echte Zielarchitektur bauen, keine MVPs, keine Mocks, keine Wegwerf-Prototypen und keine kleinen Zwischenloesungen, wenn die robuste Loesung direkt erreichbar ist. Kurzfristige Hacks nur dann verwenden, wenn der User sie explizit verlangt oder ein harter technischer Blocker keine bessere Umsetzung erlaubt.

---

## 0. Projektziel

MasterSelects soll bis Juni 2026 ALLE Media-Dateien unterstuetzen, nicht nur Video, Audio und Bilder, sondern wirklich alles:

Expand Down
8 changes: 7 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
# CLAUDE.md

## -1. Arbeitsprinzip / Top Memory

MasterSelects wird nicht fuer kurzfristige Loesungen optimiert. Da das Projekt AI-powered sehr schnell entwickelt werden kann und aktuell keine externen User blockiert, sind grosse, richtige Architekturentscheidungen ausdruecklich erlaubt und bevorzugt.

Default ist: langfristig denken, echte Zielarchitektur bauen, keine MVPs, keine Mocks, keine Wegwerf-Prototypen und keine kleinen Zwischenloesungen, wenn die robuste Loesung direkt erreichbar ist. Kurzfristige Hacks nur dann verwenden, wenn der User sie explizit verlangt oder ein harter technischer Blocker keine bessere Umsetzung erlaubt.

Anweisungen für AI-Assistenten (Claude, GPT, etc.) bei der Arbeit an diesem Projekt.

---

## 0. Projektziel / Vision (Deadline: Juni 2026)
## 0. Projektziel (Deadline: Juni 2026)

**MasterSelects muss ALLE Media-Dateien unterstützen** — nicht nur Video/Audio/Bild, sondern wirklich ALLES:
3D (OBJ, FBX, glTF), PDF, SVG, CAD (DXF/STEP), Binärdaten, Point Clouds, JSON, CSV, und mehr.
Expand Down
4 changes: 3 additions & 1 deletion docs/Features/Audio.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,14 @@ Audio export is handled by `engine/audio`:
- `FrameExporter` uses `AudioExportPipeline.exportAudio()` for normal video exports with audio.
- `FrameExporter` uses `AudioExportPipeline.exportRawAudio()` for the FFmpeg export path.
- `ExportPanel` also exposes standalone audio export through the same pipeline.
- Audio-only WAV export uses `exportRawAudio()` and writes a 16-bit PCM WAV file.
- The pipeline applies clip trimming, speed changes, EQ, volume, mixing, and then encoding.
- `AudioEncoderWrapper` prefers AAC-LC and falls back to Opus if the browser supports it.
- Peak normalization is optional and only happens during export when enabled.

Important limitation:
the WebCodecs audio encoder is required for the standalone encoded audio path.
the WebCodecs audio encoder is required for the standalone browser-compressed audio path.
Audio-only WAV export does not require WebCodecs audio encoding.
FFmpeg exports can still receive raw audio because they use `exportRawAudio()`.

## Limitations
Expand Down
5 changes: 5 additions & 0 deletions docs/Features/Debugging.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ The playback-related AI tools read from the same sources:
- `getStatsHistory`
- `getLogs`
- `getPlaybackTrace`
- `purgePlaybackPath`

Those tools surface:
- Engine state and readiness
Expand All @@ -171,6 +172,10 @@ Those tools surface:
- Render loop and render dispatcher state
- WebCodecs / VF pipeline event windows

`purgePlaybackPath` resets the live playback path at the current playhead without a page reload. It clears VideoSync warmups/seeks, retargets active HTMLVideo/WebCodecs providers, resets GPU-ready state, and can resume playback automatically. The health monitor can invoke the same path when `vf_preview_frame` telemetry shows the playhead target moving while the preview frame remains frozen.

When playback start has to wait for active HTML video readiness, `TimelineState.playbackWarmup` is set until the readiness gate finishes or is canceled. The main preview renders a small `Preparing playback` overlay only for that pre-start gate, so background VideoSync warmups during normal playback do not look like blocking loading states.

`getStatsHistory` is capped to 1-30 samples, `getLogs` caps the returned buffer to 1-500 entries, and `getPlaybackTrace` caps the inspected time window and event count so the bridge stays responsive.

---
Expand Down
5 changes: 4 additions & 1 deletion docs/Features/Export.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ FCPXML is exposed as a selectable export container for NLE interchange.
- `Basic` contains output naming and container selection. The container row is grouped by `Video`, `Image`, `Audio`, and `XML`, and switches output mode by selecting a deliverable directly.
- The `Video` group contains codec selection, resolution, frame rate, bitrate/rate controls, animated GIF palette controls, stacked-alpha, and range toggles.
- In `Image` mode the same middle group becomes an `Image` panel with format-aware resolution and quality controls, and it can export either the current playhead frame or a numbered image sequence folder.
- The `Audio` group contains sample rate, bitrate, normalization, and audio-only range controls.
- The `Audio` group contains audio-only format selection, sample rate, bitrate for browser-compressed audio, normalization, and audio-only range controls.
- Lower in the panel, legacy `Advanced Video`, `Advanced Audio`, and `Range & Summary` sections still exist for raw-value access.
- Export settings and preset selection now live in a shared store, so changes inside the Export tab participate in global undo/redo and are restored with the project.

Expand Down Expand Up @@ -152,10 +152,13 @@ Audio export is handled separately from the video encoder.

- Audio is extracted from the selected timeline range.
- `AudioExportPipeline` renders the mixed audio.
- Audio-only WAV export writes the mixed `AudioBuffer` as 16-bit PCM WAV.
- WebCodecs export can mux the audio chunks into the final file.

### Supported Behavior

- Audio-only export supports uncompressed WAV (`.wav`) without WebCodecs audio encoding.
- The existing browser-compressed audio-only path writes the detected browser codec (`.aac` or `.ogg`).
- AAC is used for MP4 when supported.
- Opus is used for WebM when supported.
- If the browser cannot encode a usable audio format, the export can proceed without audio.
Expand Down
2 changes: 1 addition & 1 deletion docs/Features/Math-Scene-Clips-Plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ Scope:

- Add the dedicated `Math` dock panel.
- Add object list, parameter list, animation list, and inspector.
- Add reusable Math Scene media items in the Media panel.
- Expand the reusable Math Scene media items in the Media panel beyond the current default preset item.
- Add preset buttons: function, point, tangent, area, label, camera move.
- Add timeline badges and better clip display.
- Add copy/paste and duplicate behavior for Math Scene objects.
Expand Down
2 changes: 1 addition & 1 deletion docs/Features/Motion-Design.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ The motion design system follows `docs/plans/motion-design-system-plan.md`. It i
- `src/services/properties/PropertyRegistry.ts` describes transform, effect, color, mask, vector-animation, and motion properties without owning Zustand state.
- `src/stores/timeline/motionClipSlice.ts` can create rectangle/ellipse shape clips, null clips, adjustment clips, update motion definitions, and convert solid clips to motion rectangle clips.
- `src/components/panels/properties/MotionShapeTab.tsx` exposes primitive, size, corner radius, fill, and stroke controls for motion shape clips.
- Video track-header context menus can create Motion Rectangle and Motion Ellipse clips at the playhead.
- The Media panel add/context menu can create Motion Rectangle and Motion Ellipse preset items that can be dragged to video tracks.
- Solid clip context menus can convert the selected solid to a motion shape while preserving its clip id and timing.
- The Motion tab exposes a first Grid Replicator section with enable, count, spacing, and opacity fade controls.
- `src/engine/motion/MotionRenderer.ts` renders rectangle and ellipse primitives into transparent `rgba8unorm` textures using analytic WGSL SDFs.
Expand Down
2 changes: 1 addition & 1 deletion docs/Features/Timeline.md
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ Soloing multiple tracks is supported. Non-solo tracks dim visually when any solo

### Track Header Context Menu

- Video tracks can create Motion Rectangle, Motion Ellipse, or Math Scene clips at the playhead.
- Math Scene and Motion Shape presets are created from the Media panel add/context menu and then dragged to video tracks.
- `Duplicate Track` currently creates a new empty track of the same type.
- `Delete` is blocked for the last remaining track of that type.
- Deleting a populated track shows the affected clip count in the menu label/tooltip.
Expand Down
Loading
Loading