Skip to content

Commit 324a5e8

Browse files
committed
feat: update AI chat, landing, and flashboard
1 parent bb12ec9 commit 324a5e8

25 files changed

Lines changed: 2693 additions & 649 deletions

AGENTS.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,28 @@ Die alten Claude-Commands unter `C:\Users\admin\.claude\commands\` sollen in Cod
3838

3939
Wenn ein Skill nicht verfuegbar ist, direkt ueber lokale Skripte, MCP-Tools, HTTP-Bridge oder API arbeiten. Nicht an Claude-Command-Dateien haengen bleiben.
4040

41-
## 0.2 MasterSelects Debug Bridge
41+
## 0.2 gstack Integration
42+
43+
`gstack` ist fuer strukturierte Planung, Reviews, Browser-QA und Security-Checks verfuegbar. Global installieren, nicht ins Repo vendorisieren.
44+
45+
Installationspfade:
46+
47+
- Codex: `git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/gstack && cd ~/gstack && ./setup --host codex`
48+
- Claude Code: `git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setup --team`
49+
- Windows: Git Bash oder WSL verwenden; `bun` und `node` muessen installiert sein
50+
- Nach der Codex-Installation Codex neu starten, damit neue Skills geladen werden
51+
52+
Einsatzregeln:
53+
54+
- `masterselects` bleibt erste Wahl fuer Timeline-, Preview-, Clip- und Debug-Bridge-Automation in der lokalen App
55+
- `gstack-office-hours`, `gstack-autoplan`, `gstack-plan-eng-review`, `gstack-plan-design-review` und `gstack-plan-devex-review` fuer Discovery, Scope und Plan-Qualitaet
56+
- `gstack-review` fuer unabhaengige Code-Reviews
57+
- `gstack-investigate` fuer Root-Cause-Debugging statt Trial-and-Error-Fixes
58+
- `gstack-cso` fuer Security-Reviews
59+
- `gstack-qa`, `gstack-qa-only`, `gstack-browse`, `gstack-open-gstack-browser` und `gstack-setup-browser-cookies` fuer Browser-QA, Repros und auth-geschuetzte Flows
60+
- `gstack-upgrade` verwenden, statt eine Repo-lokale gstack-Kopie zu pflegen
61+
62+
## 0.3 MasterSelects Debug Bridge
4263

4364
Fuer App-Debugging existieren lokale AI-Tools hinter `POST http://localhost:5173/api/ai-tools`. Voraussetzung: Dev-Server laeuft und die App ist im Browser geoeffnet.
4465

CLAUDE.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,30 @@ Die `/masterselects` Skill stellt 4 Debug-Tools bereit, die über den HTTP Bridg
3030

3131
---
3232

33+
## 0.2 gstack Integration
34+
35+
`gstack` ist fuer strukturierte Planung, Reviews, Browser-QA und Security-Checks verfuegbar. Global installieren, nicht ins Repo vendorisieren.
36+
37+
Installationspfade:
38+
39+
- Codex: `git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/gstack && cd ~/gstack && ./setup --host codex`
40+
- Claude Code: `git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setup --team`
41+
- Windows: Git Bash oder WSL verwenden; `bun` und `node` muessen installiert sein
42+
- Nach der Codex-Installation Codex neu starten, damit neue Skills geladen werden
43+
44+
Einsatzregeln:
45+
46+
- `/masterselects` bleibt erste Wahl fuer Timeline-, Preview-, Clip- und Debug-Bridge-Automation in der lokalen App
47+
- `gstack-office-hours`, `gstack-autoplan`, `gstack-plan-eng-review`, `gstack-plan-design-review` und `gstack-plan-devex-review` fuer Discovery, Scope und Plan-Qualitaet in Codex
48+
- `/office-hours`, `/autoplan`, `/plan-eng-review`, `/plan-design-review` und `/plan-devex-review` fuer denselben Workflow in Claude Code
49+
- `gstack-review` oder `/review` fuer unabhaengige Code-Reviews
50+
- `gstack-investigate` oder `/investigate` fuer Root-Cause-Debugging statt Trial-and-Error-Fixes
51+
- `gstack-cso` oder `/cso` fuer Security-Reviews
52+
- `gstack-qa`, `gstack-qa-only`, `gstack-browse`, `gstack-open-gstack-browser`, `gstack-setup-browser-cookies` oder die entsprechenden Slash-Commands fuer Browser-QA, Repros und auth-geschuetzte Flows
53+
- `gstack-upgrade` oder `/gstack-upgrade` verwenden, statt eine Repo-lokale gstack-Kopie zu pflegen
54+
55+
---
56+
3357
## 1. Workflow (WICHTIG!)
3458

3559
### Branch-Regeln

docs/Features/3D-Layers.md

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ Legacy gaussian-avatar support still exists in code for migration and old projec
1313
|---|---|---|
1414
| Per-layer 3D toggle | Stable | Any normal video/image layer can be switched between 2D and 3D. |
1515
| OBJ / glTF / GLB / FBX model import | Stable | Model clips are always 3D and render through Three.js. |
16+
| Numbered GLB sequences | Stable | Numbered `.glb` frames import as a single 30fps model-sequence clip. |
1617
| Primitive mesh clips | Stable | Cube, sphere, plane, cylinder, torus, cone, and 3D text are created from the Media Panel. |
1718
| Scene camera clips | Stable | Timeline camera clips control the shared Three.js scene. |
1819
| Gaussian splat clips | Stable but specialized | Default route is shared-scene Three.js; native WebGPU rendering is optional. |
19-
| Splat effector clips | Stable but specialized | They deform Three.js splats live at playback time. |
20+
| Numbered PLY / SPLAT sequences | Stable | Numbered `.ply` / `.splat` frames import as one shared-scene gaussian-splat sequence clip. |
21+
| 3D effector clips | Stable but specialized | They influence shared-scene 3D layers live at playback time. |
2022
| Gaussian avatar import | Legacy only | Import is blocked; existing projects may still expose blendshape editing. |
2123
| Temporal / particle splat settings | Experimental | Wired in the engine/export path, but not yet exposed as a dedicated properties tab. |
2224

@@ -34,7 +36,7 @@ Legacy gaussian-avatar support still exists in code for migration and old projec
3436

3537
Three.js is used as the shared 3D scene for classic 3D layers and for the default gaussian-splat route. The native gaussian-splat renderer is a separate WebGPU path, enabled by the clip-level `useNativeRenderer` setting.
3638

37-
Camera clips and splat effectors only affect the shared Three.js scene. They do not drive the native gaussian-splat renderer.
39+
Camera clips and 3D effectors only affect the shared Three.js scene. They do not drive the native gaussian-splat renderer.
3840

3941
## Stable 3D Features
4042

@@ -51,6 +53,8 @@ Camera clips and splat effectors only affect the shared Three.js scene. They do
5153
- Models are auto-centered and normalized to fit the viewport.
5254
- Default lighting is Ambient plus Directional lighting.
5355
- The Transform panel exposes a wireframe debug toggle for model clips.
56+
- Numbered `.glb` files like `frame000000.glb`, `frame000001.glb`, `frame000002.glb` are grouped into one model-sequence asset during import.
57+
- GLB sequences currently default to 30fps and use frame-based playback through the existing model clip path.
5458

5559
### Primitive Meshes and 3D Text
5660

@@ -90,11 +94,14 @@ The Transform tab also turns into camera-orbit controls for the active scene cam
9094
Gaussian splat clips are imported from `.ply` and `.splat` files.
9195

9296
- Clips are created as `is3D: true`.
93-
- The clip-level render tab exposes `useNativeRenderer`, `maxSplats`, `sortFrequency`, `splatScale`, `nearPlane`, and `farPlane`.
97+
- The clip-level render tab exposes `useNativeRenderer`, `maxSplats`, `sortFrequency`, `splatScale`, `orientationPreset`, `nearPlane`, and `farPlane`.
9498
- The default renderer is the shared Three.js scene path.
9599
- Native WebGPU rendering is optional and off by default.
96-
- The shared-scene route participates in scene cameras and splat effectors.
100+
- Numbered `.ply` or `.splat` files like `scan000000.ply`, `scan000001.ply`, `scan000002.ply` are grouped into one gaussian-splat sequence asset during batch import.
101+
- Gaussian-splat sequences currently stay on the shared Three.js scene path even if a clip was previously set to native render.
102+
- The shared-scene route participates in scene cameras and 3D effectors.
97103
- The native route uses its own camera-style navigation controls in the Transform tab.
104+
- A per-clip `3D Effector` toggle in the Transform tab lets you opt shared-scene splat/model layers in or out.
98105

99106
Some gaussian-splat settings exist in the data model and export pipeline but are not yet surfaced as a full dedicated UI:
100107

@@ -104,16 +111,20 @@ Some gaussian-splat settings exist in the data model and export pipeline but are
104111

105112
Those are wired through the renderer and export code, but they should still be treated as in-progress surface area.
106113

107-
## Splat Effectors
114+
## 3D Effectors
108115

109-
Splat effector clips are timeline clips that only affect Three.js splats.
116+
3D effector clips are non-rendering timeline clips that influence shared-scene 3D layers.
110117

111118
- Modes: `repel`, `attract`, `swirl`, and `noise`
112119
- Controls: strength, falloff, speed, and seed
113120
- Transform scale acts as the effector radius
114121
- They do not render visible content on their own
122+
- Shared-scene gaussian splats use the direct splat deformation path
123+
- Shared-scene gaussian-splat sequences also use that direct splat deformation path frame by frame
124+
- Models, primitive meshes, and 3D text receive object-level motion
125+
- Native gaussian splats ignore 3D effectors because they do not run in the shared Three.js scene
115126

116-
This is a good example of a specialized 3D feature that is stable in the UI, but limited to the shared-scene splat path.
127+
This is a shared-scene 3D feature that is stable in the UI, but it does not extend into the native gaussian-splat renderer.
117128

118129
## Legacy Gaussian Avatars
119130

@@ -133,7 +144,7 @@ If you see avatar-specific code paths in the renderer or AI tooling, treat them
133144
| Regular 2D clip | Transform, Effects, Masks, Transcript, Analysis |
134145
| Camera clip | Transform, Camera |
135146
| Gaussian splat clip | Transform, Gaussian, Effects, Masks, Transcript, Analysis |
136-
| Splat effector clip | Transform, Effector, Effects, Masks, Transcript, Analysis |
147+
| 3D effector clip | Transform, Effector, Effects, Masks, Transcript, Analysis |
137148
| 3D text clip | 3D Text, Transform, Effects, Masks |
138149
| Legacy gaussian avatar clip | Transform, Blendshapes |
139150

@@ -164,11 +175,11 @@ The Transform tab is context-sensitive:
164175
| `src/stores/timeline/meshClipSlice.ts` | Primitive mesh and 3D text clip creation |
165176
| `src/stores/timeline/cameraClipSlice.ts` | Timeline camera clip creation |
166177
| `src/stores/timeline/clip/addGaussianSplatClip.ts` | Gaussian splat clip creation |
167-
| `src/stores/timeline/splatEffectorClipSlice.ts` | Splat effector clip creation |
178+
| `src/stores/timeline/splatEffectorClipSlice.ts` | 3D effector clip creation |
168179
| `src/components/panels/properties/TransformTab.tsx` | Context-sensitive 3D transform and camera controls |
169180
| `src/components/panels/properties/GaussianSplatTab.tsx` | Gaussian splat render settings tab |
170181
| `src/components/panels/properties/CameraTab.tsx` | Scene camera settings tab |
171-
| `src/components/panels/properties/SplatEffectorTab.tsx` | Splat effector settings tab |
182+
| `src/components/panels/properties/SplatEffectorTab.tsx` | 3D effector settings tab |
172183
| `src/components/panels/properties/BlendshapesTab.tsx` | Legacy gaussian-avatar blendshapes tab |
173184
| `src/engine/featureFlags.ts` | 3D feature flags |
174185

@@ -178,10 +189,10 @@ The Transform tab is context-sensitive:
178189
|---|---|---|
179190
| `.obj` | Supported | Imported as a Three.js model clip. |
180191
| `.gltf` | Supported | Imported as a Three.js model clip. |
181-
| `.glb` | Supported | Imported as a Three.js model clip. |
192+
| `.glb` | Supported | Imported as a Three.js model clip. Numbered `.glb` frames are grouped into a model-sequence clip. |
182193
| `.fbx` | Supported | Imported as a Three.js model clip. |
183-
| `.ply` | Supported | Gaussian splat import. |
184-
| `.splat` | Supported | Gaussian splat import. |
194+
| `.ply` | Supported | Gaussian splat import. Numbered `.ply` frames are grouped into a shared-scene sequence clip. |
195+
| `.splat` | Supported | Gaussian splat import. Numbered `.splat` frames are grouped into a shared-scene sequence clip. |
185196
| `.ksplat` | Not yet supported | Parser stubs exist, but the file is rejected today. |
186197
| `.gsplat-zip` | Not yet supported | Parser stubs exist, but the file is rejected today. |
187198
| Gaussian avatar `.zip` | Legacy only | Import is blocked in the current product surface. |

docs/Features/AI-Integration.md

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,29 +29,40 @@ GPT-powered editing with 79 exported tools across 15 exported definition groups,
2929

3030
### Features
3131
- Interactive chat interface
32-
- Model selection dropdown
32+
- Model selection badge with popover
33+
- Shared hosted-credit pricing per model
3334
- Conversation history
3435
- Clear chat button
3536
- Auto-scrolling
3637
- Tool execution indicators
38+
- Styled approval cards for mutating/sensitive tool calls
39+
- Compact control pills below the prompt box
40+
- Optional per-panel approval bypass toggle below the send button
41+
- Thinking-effort selector for supported OpenAI chat models
3742

3843
### Available Models
3944
```
40-
GPT-5.2, GPT-5.2 Pro
41-
GPT-5.1, GPT-5.1 Codex, GPT-5.1 Codex Mini
45+
GPT-5.4, GPT-5.4 Mini, GPT-5.4 Nano
46+
GPT-5.3 Chat, GPT-5.3 Codex
47+
GPT-5.2, GPT-5.2 Codex
48+
GPT-5.1, GPT-5.1 Codex Mini
4249
GPT-5, GPT-5 Mini, GPT-5 Nano
4350
GPT-4.1, GPT-4.1 Mini, GPT-4.1 Nano
4451
GPT-4o, GPT-4o Mini
45-
o3, o4-mini, o3-pro (reasoning)
52+
o3, o4-mini, o3-mini
4653
```
4754

4855
Default model: `gpt-5.1`
4956

57+
The dropdown is sourced from `src/shared/openAiModelCatalog.ts`. That same catalog also drives hosted chat billing in `functions/lib/modelPricing.ts`, so the UI label and the charged credits stay in sync.
58+
The same catalog also marks which models support OpenAI reasoning effort controls, so the chat panel only shows the Thinking control when the selected model can use it.
59+
5060
### Editor Mode
51-
When enabled:
61+
The AI chat panel always runs with editor tools enabled:
5262
- Includes timeline context in prompts
5363
- Uses the exported AI tool catalog from `src/services/aiTools/definitions`
5464
- The chat UI applies its own approval gate before calling mutating or sensitive tools
65+
- Users can temporarily bypass those confirmations from the panel
5566
- AI can manipulate timeline directly
5667

5768
The current tool surface is 79 exported tool definitions across 15 exported definition groups. Two dispatch gaps remain in the shared registry:
@@ -92,6 +103,7 @@ That console surface is dev-only. The Vite dev bridge and the Native Helper HTTP
92103
- Active IN / OUT / REF assignments appear as removable color badges around the prompt box
93104
- Hovering a prompt-box badge strongly emphasizes the linked board node for as long as the badge is hovered
94105
- Nano Banana 2 accepts up to 14 ordered reference images; the composer labels them as `REF 1`, `REF 2`, ... so prompts can refer to them explicitly
106+
- FlashBoard's Kie.ai catalog includes Kling 3.0, Seedance 2.0, and Nano Banana 2; Seedance 2.0 currently ships as a Board-only Kie option with text-to-video and image-to-video support
95107
- IN / OUT / REF outlines scale with zoom and use a stronger glow so references stay readable while navigating the board
96108

97109
### Current Backends
@@ -100,7 +112,7 @@ The current AI Video stack is no longer best described as "PiAPI as one unified
100112

101113
| Backend | Where it is used | Notes |
102114
|---------|------------------|-------|
103-
| `Kie.ai` | Classic generator and FlashBoard | Current provider list comes from `getKieAiProviders()`; user-supplied key in Settings |
115+
| `Kie.ai` | Classic generator and FlashBoard | Classic provider list comes from `getKieAiProviders()`; FlashBoard extends the Kie catalog with Seedance 2.0; user-supplied key in Settings |
104116
| `MasterSelects Cloud` | Classic generator and FlashBoard when hosted access is available | Hosted credits/account flow; board mode resolves to hosted Kling when no local Kie key is present |
105117
| `PiAPI` | Legacy compatibility and some catalog/pricing metadata | Still present in older history/key migration paths and FlashBoard pricing/catalog helpers, but not the primary runtime path the current panel describes |
106118

docs/Features/FlashBoard.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ FlashBoard is the AI canvas workspace behind the AI Video panel's Board mode. It
1313
FlashBoard is not a separate model backend. It is a workspace layer on top of the existing AI services:
1414

1515
- `piapi` for the PiAPI catalog
16-
- `kieai` for Kie.ai Kling 3.0 and Nano Banana 2
16+
- `kieai` for Kie.ai Kling 3.0, Seedance 2.0, and Nano Banana 2
1717
- `cloud` for hosted Kling 3.0 and hosted Nano Banana 2
1818

1919
The AI Video panel switches into FlashBoard when the user selects Board mode. If the user has no Kie.ai key and is signed in to MasterSelects Cloud, the board uses the hosted cloud service scope. Otherwise it stays on Kie.ai.
@@ -68,10 +68,13 @@ The board uses the shared catalog from `FlashBoardModelCatalog`:
6868

6969
- PiAPI video providers from the shared PiAPI catalog
7070
- Kie.ai Kling 3.0 video
71+
- Kie.ai Seedance 2.0 video
7172
- Kie.ai Nano Banana 2 image generation
7273
- Cloud Kling 3.0 video
7374
- Cloud Nano Banana 2 image generation
7475

76+
Seedance 2.0 is currently exposed only in FlashBoard on the Kie.ai path. The existing Classic AI Video flow remains narrower and continues to focus on the classic Kie provider list.
77+
7578
The classic AI Video flow is narrower: it currently exposes only the Kie.ai Kling 3.0 provider list, while FlashBoard exposes the richer catalog.
7679

7780
---

docs/Features/Media-Panel.md

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ The panel also accepts a few specialized asset types that flow into the timeline
3939
- `model` files: OBJ, glTF/GLB, FBX
4040
- `gaussian-splat` files: PLY, SPLAT
4141

42+
Numbered `.glb` files with a shared prefix are detected as a sequence during batch import. A folder containing `frame000000.glb`, `frame000001.glb`, `frame000002.glb` and so on will appear as one model asset instead of many separate files.
43+
Numbered `.ply` or `.splat` files with a shared prefix are also detected as a sequence during batch import. A folder containing `scan000000.ply`, `scan000001.ply`, `scan000002.ply` and so on will appear as one gaussian-splat asset instead of many separate files.
44+
4245
Lottie imports are treated as first-class media items. `.json` files are only accepted when their contents actually match Lottie structure, so arbitrary JSON data is not misclassified as animation.
4346

4447
### Import Methods
@@ -54,7 +57,7 @@ Click the **+ Add** button for creating new items:
5457
- **3D Text** - New 3D text mesh item
5558
- **Solid** - New solid color item (placed in auto-created "Solids" folder)
5659
- **Camera** - New camera item
57-
- **Splat Effector** - New splat-effector item
60+
- **3D Effector** - New shared-scene 3D effector item
5861
- **Mesh** ▶ - Submenu with 3D primitive meshes (placed in auto-created "Meshes" folder):
5962
- Cube, Sphere, Plane, Cylinder, Torus, Cone
6063
- Creates a `MeshItem` which can be dragged to the timeline as a 3D clip
@@ -75,11 +78,13 @@ Imports use a two-phase approach:
7578

7679
1. **Phase 1 (instant):** A placeholder entry appears immediately in the panel with `isImporting: true`, showing file name and size
7780
2. **Phase 2 (background):** Full processing runs in the background:
78-
- Media info extraction (dimensions, duration, FPS, codec, bitrate, audio detection)
79-
- Thumbnail generation (for video and image files)
80-
- File hash calculation (for deduplication and proxy matching)
81-
- Copy to project RAW folder when `copyMediaToProject` is enabled, or when the import is forced
82-
- Existing proxy detection (by file hash)
81+
- Media info extraction (dimensions, duration, FPS, codec, bitrate, audio detection)
82+
- Thumbnail generation (for video and image files)
83+
- File hash calculation (for deduplication and proxy matching)
84+
- Copy to project RAW folder when `copyMediaToProject` is enabled, or when the import is forced
85+
- Numbered GLB sequence grouping into a single 30fps model-sequence asset
86+
- Numbered PLY/SPLAT sequence grouping into a single 30fps gaussian-splat sequence asset
87+
- Existing proxy detection (by file hash)
8388

8489
**Deduplication:** Files with matching name + size are automatically skipped.
8590

@@ -448,6 +453,7 @@ interface MediaFile {
448453
- Uses actual media duration
449454
- Audio-only files restricted to audio tracks
450455
- Files still importing or missing cannot be dragged to timeline
456+
- Numbered gaussian-splat sequences always stay on the shared Three.js 3D renderer path after drop
451457
- Compositions cannot be dragged into themselves (active comp check)
452458
- Mesh items create 3D clips with `is3D: true` and `meshType` (rendered via Three.js)
453459

0 commit comments

Comments
 (0)