<feed xmlns='http://www.w3.org/2005/Atom'>
<title>demo.git/workspaces/test/shaders, 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-16T21:57:20Z</updated>
<entry>
<title>test: enhance GaussianBlur parameters and test timeline</title>
<updated>2026-02-16T21:57:20Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-16T21:57:20Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=0585a596e2fc77239912bd6437ea76b1af5ad0d5'/>
<id>urn:sha1:0585a596e2fc77239912bd6437ea76b1af5ad0d5</id>
<content type='text'>
- 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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: Add FlashEffect for audio/visual sync testing</title>
<updated>2026-02-16T15:16:13Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-16T15:16:13Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=a3583f4c704bb14e02f49cade6996e215d0ee6b4'/>
<id>urn:sha1:a3583f4c704bb14e02f49cade6996e215d0ee6b4</id>
<content type='text'>
- 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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>refactor(wgsl): consolidate SDF shapes into single common file</title>
<updated>2026-02-14T14:26:55Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-14T14:26:55Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=0127c747a41f972fd68e3e6e6b472859bfdb80dd'/>
<id>urn:sha1:0127c747a41f972fd68e3e6e6b472859bfdb80dd</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>refactor(wgsl): replace inline fullscreen_vs with common include</title>
<updated>2026-02-14T14:23:14Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-14T14:23:14Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=de7514e6b9ff9c0b9320975ba7d44754b5115b54'/>
<id>urn:sha1:de7514e6b9ff9c0b9320975ba7d44754b5115b54</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>refactor(wgsl): modularize common shader functions</title>
<updated>2026-02-14T14:13:09Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-14T14:13:09Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=e38be0dbf5816338ff97e2ee2f9adfff2902dc2b'/>
<id>urn:sha1:e38be0dbf5816338ff97e2ee2f9adfff2902dc2b</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>Remediation: Implement shared common/shaders/ directory</title>
<updated>2026-02-13T07:34:24Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-13T07:34:24Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=a109983c194c45ad85f0e481232bc605c7cfd85b'/>
<id>urn:sha1:a109983c194c45ad85f0e481232bc605c7cfd85b</id>
<content type='text'>
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
</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>feat: Implement workspace system (Task #77)</title>
<updated>2026-02-09T17:51:54Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-09T17:51:54Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=7790472dabfa0ecd06f3408d847860ec6072866e'/>
<id>urn:sha1:7790472dabfa0ecd06f3408d847860ec6072866e</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
