<feed xmlns='http://www.w3.org/2005/Atom'>
<title>demo.git/assets/final, branch main</title>
<subtitle>Vide-coded 64k demo system</subtitle>
<id>https://git.taar-o.com/demo.git/atom?h=main</id>
<link rel='self' href='https://git.taar-o.com/demo.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/'/>
<updated>2026-02-13T07:21:34Z</updated>
<entry>
<title>Refactor: Reorganize workspaces and remove assets/ directory</title>
<updated>2026-02-13T07:21:34Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-13T07:21:34Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=eb15703a3f87e4eadc8839b06de12b9c6ec54023'/>
<id>urn:sha1:eb15703a3f87e4eadc8839b06de12b9c6ec54023</id>
<content type='text'>
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
</content>
</entry>
<entry>
<title>test_demo: Add beat-synchronized CNN post-processing with version selection</title>
<updated>2026-02-12T14:10:17Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-12T14:10:17Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=8b30cadfc19647487986d14dba9ddba7908dd1d0'/>
<id>urn:sha1:8b30cadfc19647487986d14dba9ddba7908dd1d0</id>
<content type='text'>
- Add --cnn-version &lt;1|2&gt; flag to select between CNN v1 and v2
- Implement beat_phase modulation for dynamic blend in both CNN effects
- Fix CNN v2 per-layer uniform buffer sharing (each layer needs own buffer)
- Fix CNN v2 y-axis orientation to match render pass convention
- Add Scene1Effect as base visual layer to test_demo timeline
- Reorganize CNN v2 shaders into cnn_v2/ subdirectory
- Update asset paths and documentation for new shader organization

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix: update shader files to use beat_phase instead of beat</title>
<updated>2026-02-11T23:33:58Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-11T23:33:58Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=641b5b692ddfce30cc1bcebe742b38e0bba39ce8'/>
<id>urn:sha1:641b5b692ddfce30cc1bcebe742b38e0bba39ce8</id>
<content type='text'>
- 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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: implement beat-based timing system</title>
<updated>2026-02-11T23:30:56Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-11T23:30:56Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=89c46872127aaede53362f64cdc3fe9b3164650b'/>
<id>urn:sha1:89c46872127aaede53362f64cdc3fe9b3164650b</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>refactor: Deduplicate CommonUniforms with #include in WGSL shaders</title>
<updated>2026-02-09T14:20:09Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-09T14:20:09Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=af55c4a7a54a90d4c252aa4fe354e7bf8624072e'/>
<id>urn:sha1:af55c4a7a54a90d4c252aa4fe354e7bf8624072e</id>
<content type='text'>
Replace redundant CommonUniforms struct definitions across 13 shaders
with #include "common_uniforms" directive. Integrate ShaderComposer
preprocessing into all shader creation pipelines.

Changes:
- Replace 9-line CommonUniforms definitions with single #include line
- Add ShaderComposer.Compose() to create_post_process_pipeline()
- Add ShaderComposer.Compose() to gpu_create_render_pass()
- Add ShaderComposer.Compose() to gpu_create_compute_pass()
- Add InitShaderComposer() calls to test_effect_base and test_demo_effects
- Update test_shader_compilation to compose shaders before validation

Net reduction: 83 lines of duplicate code eliminated
All 35 tests passing (100%)

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>refactor: Move .spec audio assets to assets/final/music subdirectory</title>
<updated>2026-02-09T13:57:07Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-09T13:56:51Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=ff4108b383e8b543a298debdb3518a19e08d74ab'/>
<id>urn:sha1:ff4108b383e8b543a298debdb3518a19e08d74ab</id>
<content type='text'>
- Created assets/final/music/ directory for audio samples
- Moved 14 .spec files from assets/final/ to assets/final/music/
- Updated demo_assets.txt and test_demo_assets.txt with music/ prefix
- Updated gen_spectrograms.sh to output to new location
- CMakeLists.txt unchanged (still uses assets/final/ as base)

handoff(Claude): Music assets reorganized into subdirectory
</content>
</entry>
<entry>
<title>feat: GPU procedural Phase 4 - texture composition</title>
<updated>2026-02-09T13:28:46Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-09T13:28:46Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=9bb5fd64776ac8a7e4b012ac2de340ddfa09a2c9'/>
<id>urn:sha1:9bb5fd64776ac8a7e4b012ac2de340ddfa09a2c9</id>
<content type='text'>
Multi-input composite shaders with sampler support.
- Dynamic bind group layouts (N input textures + 1 sampler)
- dispatch_composite() for multi-input compute dispatch
- create_gpu_composite_texture() API
- gen_blend.wgsl and gen_mask.wgsl shaders

Guarded with #if !defined(STRIP_GPU_COMPOSITE) for easy removal.

Tests:
- Blend two noise textures
- Mask noise with grid
- Multi-stage composite (composite of composites)

Size: ~830 bytes (2 shaders + dispatch logic)

handoff(Claude): GPU procedural Phase 4 complete
</content>
</entry>
<entry>
<title>feat(gpu): Phase 2 - Add gen_perlin and gen_grid GPU compute shaders</title>
<updated>2026-02-09T12:59:07Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-09T12:59:07Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=744bcadfe8f4bb1b2d4f1daf9f880fa511d65405'/>
<id>urn:sha1:744bcadfe8f4bb1b2d4f1daf9f880fa511d65405</id>
<content type='text'>
Complete Phase 2 implementation:
- gen_perlin.wgsl: FBM with configurable octaves, amplitude decay
- gen_grid.wgsl: Grid pattern with configurable spacing/thickness
- TextureManager extensions: create_gpu_perlin_texture(), create_gpu_grid_texture()
- Asset packer now validates gen_noise, gen_perlin, gen_grid for PROC_GPU()
- 3 compute pipelines (lazy-init on first use)

Shader parameters:
- gen_perlin: seed, frequency, amplitude, amplitude_decay, octaves (32 bytes)
- gen_grid: width, height, grid_size, thickness (16 bytes)

test_3d_render migration:
- Replaced CPU sky texture (gen_perlin) with GPU version
- Replaced CPU noise texture (gen_noise) with GPU version
- Added new GPU grid texture (256x256, 32px grid, 2px lines)

Size impact:
- gen_perlin.wgsl: ~200 bytes (compressed)
- gen_grid.wgsl: ~100 bytes (compressed)
- Total Phase 2 code: ~300 bytes
- Cumulative (Phase 1+2): ~600 bytes

Testing:
- All 34 tests passing (100%)
- test_gpu_procedural validates all generators
- test_3d_render uses 3 GPU textures (noise, perlin, grid)

Next: Phase 3 - Variable dimensions, async generation, pipeline caching

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(gpu): Add GPU procedural texture generation system</title>
<updated>2026-02-09T12:52:37Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-09T12:52:37Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=c712874ece1ca7073904f5fb84cc866d28084de0'/>
<id>urn:sha1:c712874ece1ca7073904f5fb84cc866d28084de0</id>
<content type='text'>
Phase 1 implementation complete:
- GPU compute shader for noise generation (gen_noise.wgsl)
- TextureManager extensions: create_gpu_noise_texture(), dispatch_noise_compute()
- Asset packer PROC_GPU() syntax support with validation
- ShaderComposer integration for #include resolution
- Zero CPU memory overhead (GPU-only textures)
- Init-time and on-demand generation modes

Technical details:
- 8×8 workgroup size for 256×256 textures
- UniformBuffer for params (width, height, seed, frequency)
- Storage texture binding (rgba8unorm, write-only)
- Lazy pipeline compilation on first use
- ~300 bytes code (Phase 1)

Testing:
- New test: test_gpu_procedural.cc (passes)
- All 34 tests passing (100%)

Future phases:
- Phase 2: Add gen_perlin, gen_grid compute shaders
- Phase 3: Variable dimensions, async generation

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: WGSL Uniform Buffer Validation &amp; Consolidation (Task #75)</title>
<updated>2026-02-09T10:17:53Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-09T10:17:53Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=fd19130b3360d17b44247ec26533b20e051b7f8c'/>
<id>urn:sha1:fd19130b3360d17b44247ec26533b20e051b7f8c</id>
<content type='text'>
- Added  to validate WGSL/C++ struct alignment.
- Integrated validation into .
- Standardized uniform usage in , , , .
- Renamed generic  to specific names in WGSL and C++ to avoid collisions.
- Added  and updated .
- handoff(Gemini): Completed Task #75.
</content>
</entry>
</feed>
