summaryrefslogtreecommitdiff
path: root/workspaces/test
AgeCommit message (Collapse)Author
17 hoursfeat: add Sequence V2 format support to timeline editorskal
Implements full support for the sequence v2 DAG format with explicit node routing and arrow syntax. New features: - timeline-format.js module for parsing/serializing v2 format - NODE declarations with typed buffers (u8x4_norm, f32x4, etc.) - Arrow syntax for effect routing: input1 input2 -> output1 output2 - Buffer chain visualization in properties panel and tooltips - Node editor modal for adding/deleting node declarations - Validation for undeclared node references (when NODEs explicit) - Backward compatible with auto-inferred nodes Files added: - tools/timeline_editor/timeline-format.js (214 lines) - tools/timeline_editor/test_format.html (automated tests) - workspaces/test/timeline_v2_test.seq (test file with NODE declarations) Files modified: - tools/timeline_editor/index.html (~40 changes for v2 support) All success criteria met. Round-trip tested with existing timelines. handoff(Claude): Timeline editor now fully supports v2 format with explicit node routing, NODE declarations, and buffer chain visualization. Parser handles both explicit NODE declarations and auto-inferred nodes. Validation only runs when explicit NODEs exist. Ready for production use. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
25 hoursfix: correct Heptagon effect rendering and SDF implementationskal
- Change draw call from 21 to 3 vertices (fullscreen triangle) - Replace broken folding-based SDF with IQ's atan-based regular polygon formula - Simplify test timeline to render Heptagon directly to sink - Reduce heptagon radius from 0.5 to 0.3 for better visibility The effect was not visible due to incorrect vertex count and broken SDF returning negative values everywhere (showing only fill color). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
25 hoursfix: port Hybrid3D effect to sequence v2 architectureskal
Hybrid3D was calling Renderer3D::render() which creates its own command encoder, bypassing the sequence system. Now uses renderer_.draw() with the passed encoder. Also adds texture blit support for RotatingCube compositing. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
26 hourstest: enhance GaussianBlur parameters and test timelineskal
- Fix shader struct to match C++ (add strength_audio, stretch) - Increase default blur strength to 8.0 for visibility - Add blur effect to test sequence for validation Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
26 hoursfix: add sequence index to generated class namesskal
Prevents compilation errors when multiple sequences share the same name. Compiler now appends _{index}_Sequence for unique class names. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
27 hoursrefactor: remove END_DEMO directive, auto-calculate from sequencesskal
Remove END_DEMO keyword from timeline format. Demo duration now calculated from max effect end time across all sequences. Sort sequences by start time at compile time for deterministic ordering. Changes: - seq_compiler.py: Auto-calculate duration, sort sequences - seq_compiler.cc: Remove END_DEMO parsing, sort by start time - workspaces/test/timeline.seq: Remove END_DEMO directive - Generated timeline.cc: Duration now 40.0f (was hardcoded) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
27 hoursadd back obj filesskal
31 hoursrefactor: remove 'Effect' suffix from effect names in timeline.seq filesskal
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
32 hoursfeat: Add PeakMeterEffect v2 for test_demo audio visualizationskal
Ports PeakMeterEffect to v2 Effect system with proper DAG routing. Red horizontal bar overlay displays audio_intensity for visual debugging of audio-visual synchronization. Changes: - New: src/effects/peak_meter_effect.{h,cc} - v2 implementation - Timeline: FlashEffect -> flash_out -> PeakMeterEffect -> sink - Build: Added to COMMON_GPU_EFFECTS and demo_effects.h - Test: Added to test_demo_effects.cc (9/9 effects pass) - Cleanup: Removed old disabled PeakMeterEffect code from test_demo.cc Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
33 hoursfeat: Add FlashEffect for audio/visual sync testingskal
- FlashEffect: Beat-synchronized white flash using ShaderComposer - Loads shader from assets (flash.wgsl) with sequence_uniforms include - Uses pow(1.0 - beat_phase, 4.0) for sharp flash at beat start - Updated test_demo.seq to use FlashEffect (was HeptagonEffect) - Added FlashEffect to test suite (test_demo_effects.cc) - Made cnn_test conditional on main workspace (fixes build error) - Flash intensity: 1.0 at beat start, fades to 0.0 by beat end Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
34 hoursrefactor: remove v2 versioning artifacts, establish Sequence as canonical systemskal
Complete v1→v2 migration cleanup: rename 29 files (sequence_v2→sequence, effect_v2→effect, 14 effect files, 8 shaders, compiler, docs), update all class names and references across 54 files. Archive v1 timeline. System now uses standard naming with all versioning removed. 30/34 tests passing. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
39 hoursfeat(sequence): add inline post-process functions for v2skal
- Create postprocess_inline.wgsl with 7 inline effect functions - Functions: vignette, flash, fade, theme, solarize, chroma_aberration, distort - Add example combined_postprocess_v2.wgsl showing usage - Register postprocess_inline snippet with ShaderComposer - Add to main and test workspace assets - All tests passing (36/36) Strategy: Simple effects become inline functions instead of separate classes. Complex effects (rotating_cube, hybrid_3d, particles) remain as TODO for v2 port. handoff(Claude): Inline functions ready, 7 simple effects consolidated
40 hoursfeat(sequence): complete phase 3 - v2 shader integration and effect portsskal
- Create v2-compatible WGSL shaders with UniformsSequenceParams - Add sequence_v2_uniforms snippet for ShaderComposer - Port 3 effects: PassthroughEffectV2, GaussianBlurEffectV2, HeptagonEffectV2 - Enable and fix end-to-end test (test_sequence_v2_e2e) - Fix shader binding order (sampler at 0, texture at 1) - Fix WebGPU validation (maxAnisotropy=1, explicit depthSlice) - Add v2 shaders to main and test workspace assets - All tests passing (36/36) handoff(Claude): Phase 3 complete, v2 effects functional, ready for phase 4
3 daysrefactor(wgsl): consolidate SDF shapes into single common fileskal
Merge sdf_primitives.wgsl into math/sdf_shapes.wgsl to eliminate duplication and establish single source of truth for all SDF functions. Changes: - Delete common/shaders/sdf_primitives.wgsl (duplicate of math/sdf_shapes.wgsl) - Add sdBox2D() and sdEllipse() to math/sdf_shapes.wgsl - Update ellipse.wgsl (main/test) to use #include "math/sdf_shapes" - Update scene1.wgsl to use math/sdf_shapes instead of sdf_primitives - Rename asset SHADER_SDF_PRIMITIVES → SHADER_SDF_SHAPES - Update shader registration and tests Impact: - ~60 lines eliminated from ellipse shaders - Single source for 3D primitives (sphere, box, torus, plane) and 2D (box, ellipse) - Consistent include path across codebase All tests passing (34/34). handoff(Claude): SDF shapes consolidated to math/sdf_shapes.wgsl Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3 daysrefactor(wgsl): replace inline fullscreen_vs with common includeskal
Replace duplicate fullscreen triangle vertex shader code with #include "render/fullscreen_vs" in 8 workspace shaders. Eliminates ~60 lines of duplication and establishes single source of truth. Modified shaders: - circle_mask_compute.wgsl (main/test) - circle_mask_render.wgsl (main/test) - ellipse.wgsl (main/test) - gaussian_blur.wgsl (main/test) Updated test_shader_assets.cc to validate include directive instead of inline @vertex keyword for affected shaders. All tests passing (34/34). handoff(Claude): Shader modularization - fullscreen_vs consolidated Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3 daysrefactor(wgsl): modularize common shader functionsskal
Extracted common WGSL functions into separate files in `common/shaders/` to improve reusability and maintainability. - Created `common/shaders/render/fullscreen_vs.wgsl` for a reusable fullscreen vertex shader. - Created `common/shaders/math/color.wgsl` for color conversion and tone mapping functions. - Created `common/shaders/math/utils.wgsl` for general math utilities. - Created `common/shaders/render/raymarching.wgsl` for SDF raymarching logic. - Updated multiple shaders to use these new common snippets via `#include`. - Fixed the shader asset validation test to correctly handle shaders that include the common vertex shader. This refactoring makes the shader code more modular and easier to manage.
4 daysAdd shader snippet test assets to fix test_shader_composerskal
Added SHADER_SNIPPET_A and SHADER_SNIPPET_B entries to test assets config to resolve missing AssetId compile error in test_shader_composer. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
4 daysAdd test asset support with STRIP_ALL guardsskal
Fixes test_assets.cc compilation by adding missing test asset IDs and procedural generators. Test-specific code is protected with DEMO_STRIP_ALL to exclude from release builds. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
5 daysRemediation: Implement shared common/shaders/ directoryskal
Eliminates 36 duplicate shader files across workspaces. Structure: - common/shaders/{math,render,compute}/ - Shared utilities (20 files) - workspaces/*/shaders/ - Workspace-specific only Changes: - Created common/shaders/ with math, render, compute subdirectories - Moved 20 common shaders from workspaces to common/ - Removed duplicates from test workspace - Updated assets.txt: ../../common/shaders/ references - Enhanced asset_packer.cc: filesystem path normalization for ../ resolution Implementation: Option 1 from SHADER_REUSE_INVESTIGATION.md - Single source of truth for common code - Workspace references via relative paths - Path normalization in asset packer handoff(Claude): Common shader directory implemented
5 daysUpdate workspace.cfg for new directory structureskal
Updated asset_dirs and shader_dirs to reflect reorganization: - Removed legacy assets/ and ../common/ references - Added new directories: music/, weights/, obj/ - Simplified shader_dirs to just shaders/ handoff(Claude): workspace.cfg files updated
5 daysRefactor: Reorganize workspaces and remove assets/ directoryskal
Workspace structure now: - workspaces/{main,test}/obj/ (3D models) - workspaces/{main,test}/shaders/ (WGSL shaders) - workspaces/{main,test}/music/ (audio samples) Changes: - Moved workspaces/*/assets/music/ → workspaces/*/music/ - Updated assets.txt paths (assets/music/ → music/) - Moved test_demo.{seq,track} to tools/ - Moved assets/originals/ → tools/originals/ - Removed assets/common/ (legacy, duplicated in workspaces) - Removed assets/final/ (legacy, superseded by workspaces) - Updated hot-reload paths in main.cc - Updated CMake references for test_demo and validation - Updated gen_spectrograms.sh paths handoff(Claude): Workspace reorganization complete
5 daysRefactor: Move application entry points to src/app/skal
Moved main.cc, stub_main.cc, and test_demo.cc from src/ to src/app/ for better organization. Updated cmake/DemoExecutables.cmake paths. handoff(Claude): App files reorganized into src/app/ directory
6 daystimeline editor: quantize grid, drag fixes, hotkeysskal
Fixes: - Sequence dragging with scroll offset - Double-click collapse/expand (DOM recreation issue) - Collapsed sequence dragging (removed stopPropagation) Features: - Quantize dropdown (Off, 1/32→1 beat) replaces snap-to-beat checkbox - Works in both beat and second display modes - Hotkeys: 0=Off, 1=1beat, 2=1/2, 3=1/4, 4=1/8, 5=1/16, 6=1/32 - Separate "Show Beats" toggle for display vs snap behavior Technical: - Track dragMoved state to avoid unnecessary DOM recreation - Preserve dblclick detection by deferring renderTimeline() - Quantization applies to sequences and effects uniformly handoff(Claude): timeline editor quantize + drag fixes complete
6 daysfix: update shader files to use beat_phase instead of beatskal
- Fixed particle_spray_compute.wgsl (uniforms.beat → uniforms.beat_phase) - Fixed ellipse.wgsl (uniforms.beat → uniforms.beat_phase) - Applied to all workspace and asset directories Resolves shader compilation error on demo64k startup. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
6 daysfeat: implement beat-based timing systemskal
BREAKING CHANGE: Timeline format now uses beats as default unit ## Core Changes **Uniform Structure (32 bytes maintained):** - Added `beat_time` (absolute beats for musical animation) - Added `beat_phase` (fractional 0-1 for smooth oscillation) - Renamed `beat` → `beat_phase` - Kept `time` (physical seconds, tempo-independent) **Seq Compiler:** - Default: all numbers are beats (e.g., `5`, `16.5`) - Explicit seconds: `2.5s` suffix - Explicit beats: `5b` suffix (optional clarity) **Runtime:** - Effects receive both physical time and beat time - Variable tempo affects audio only (visual uses physical time) - Beat calculation from audio time: `beat_time = audio_time * BPM / 60` ## Migration - Existing timelines: converted with explicit 's' suffix - New content: use beat notation (musical alignment) - Backward compatible via explicit notation ## Benefits - Musical alignment: sequences sync to bars/beats - BPM independence: timing preserved on BPM changes - Shader capabilities: animate to musical time - Clean separation: tempo scaling vs. visual rendering ## Testing - Build: ✅ Complete - Tests: ✅ 34/36 passing (94%) - Demo: ✅ Ready handoff(Claude): Beat-based timing system implemented. Variable tempo only affects audio sample triggering. Visual effects use physical_time (constant) and beat_time (musical). Shaders can now animate to beats. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
8 daysfix: Reduce default audio volumes to prevent clippingskal
Reduced tracker pattern volumes: - Kicks: 1.0 → 0.7 - Snares: 1.0/0.9 → 0.6 - Crash: 0.85 → 0.6 Multiple simultaneous voices were summing to excessive levels. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
8 daysfeat: Add workspace header comments to config filesskal
Add `# WORKSPACE: <name>` header to all workspace config files: - timeline.seq - music.track - assets.txt Format: First line contains workspace identifier. Editors must preserve this header comment. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
8 daysfeat: Implement workspace system (Task #77)skal
Self-contained workspaces for parallel demo development. Structure: - workspaces/main,test - Demo-specific resources - assets/common - Shared resources - workspace.cfg - Configuration per workspace CMake integration: - DEMO_WORKSPACE option (defaults to main) - cmake/ParseWorkspace.cmake - Config parser - Workspace-relative asset/timeline/music paths Migration: - Main demo: demo.seq to workspaces/main/timeline.seq - Test demo: test_demo.seq to workspaces/test/timeline.seq - Common shaders: assets/common/shaders - Workspace shaders: workspaces/*/shaders Build: cmake -B build -DDEMO_WORKSPACE=main cmake -B build_test -DDEMO_WORKSPACE=test All tests passing (36/36). handoff(Claude): Task #77 workspace system complete. Both main and test workspaces build and pass all tests. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>