<feed xmlns='http://www.w3.org/2005/Atom'>
<title>demo.git/tools/mq_editor/index.html, 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-19T06:26:26Z</updated>
<entry>
<title>fix(mq_editor): remove duplicate mode toggle, add SINE badge, fix mini-spectrum invalidation</title>
<updated>2026-02-19T06:26:26Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-19T06:26:26Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=07538091b1fac417104c273bd9dc117af8afdb9e'/>
<id>urn:sha1:07538091b1fac417104c273bd9dc117af8afdb9e</id>
<content type='text'>
- Remove redundant synthModeToggle from _updatePropPanel + index.html
- Add SINE badge (grey) to panel title, matching existing RES badge (blue)
- Invalidate mini-spectrum (viewer.render) on sinusoid/resonator switch

handoff(Claude): mq_editor partial panel polish
</content>
</entry>
<entry>
<title>feat(mq_editor): UI revamp — params panel, layout, partial spectrum</title>
<updated>2026-02-19T05:46:57Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-19T05:46:57Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=83eec3cece795f56f4edc1298a008216cb9511a0'/>
<id>urn:sha1:83eec3cece795f56f4edc1298a008216cb9511a0</id>
<content type='text'>
- Move Synthesis controls (integratePhase, jitter, spread, resonator,
  LP/HP filters) and Auto Spread All into the ⚙ Params dropdown
- Group Extract Partials / +Partial / ✕ Clear All in one toolbar group
- Add per-partial Sine/Res mode toggle in the property panel (Mode row)
- Move partial mini-spectrum below the right panel (right-col layout)
- Partial mini-spectrum: dynamic dB range scanned across full duration
  (8 samples, [peak−60, peak]), cached on partial select
- Print bezier amplitude A= in red at top-right of partial spectrum
- Status/info messages set to 80% gray (#ccc)

handoff(Claude): UI revamp complete, TODO items implemented.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(mq_editor): partial spectrum viewer — synth+FFT power display</title>
<updated>2026-02-18T22:25:46Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-18T22:25:46Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=e63f885c7caaf7496d01e37f8ed2769190f8a51e'/>
<id>urn:sha1:e63f885c7caaf7496d01e37f8ed2769190f8a51e</id>
<content type='text'>
Adds a 200×100 canvas (left of the main spectrum overlay) that shows
the synthesised power spectrum of the selected partial at the time
under the mouse (or playhead).

Pipeline: synthesizeMQ → Hann window → FFT (2048-pt) → dB power bars.
- freqCurve times are shifted so the synthesis window is centred on t
- X-axis: log-frequency (same scale as main view)
- Y-axis: dB, normalised to peak of the synthesised frame
- Cache: {partialIndex, time} → avoids re-synthesis on mouse move;
  bypassed (force=true) from render() so param changes always redraw

handoff(Claude): partial spectrum viewer complete

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(mq_editor): group toolbar buttons with separators</title>
<updated>2026-02-18T20:25:30Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-18T20:25:30Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=eeecb76eef15f684b7909ff22fd054680c2a3498'/>
<id>urn:sha1:eeecb76eef15f684b7909ff22fd054680c2a3498</id>
<content type='text'>
handoff(Claude): toolbar buttons grouped with vertical separators:
[Open WAV] | [Extract][AutoSpread] | [Play][Stop] | [+Partial][ClearAll] | [Explore][Contour] | [Undo][Redo] | [Params]

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(mq_editor): add Delete key to remove selected partial; remove Test WAV debug button</title>
<updated>2026-02-18T20:14:33Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-18T20:14:33Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=dcf90c3dd7d916c07c52a4e30da3736f1e37a705'/>
<id>urn:sha1:dcf90c3dd7d916c07c52a4e30da3736f1e37a705</id>
<content type='text'>
- 'Delete'/'Backspace' key deletes the currently selected partial
- Show 'Del' hint on Delete button in side panel
- Remove 'Test WAV' button and validateTestWAVPeaks() debug code

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>refactor(mq_editor): extract CSS to style.css, consolidate UI params</title>
<updated>2026-02-18T18:48:51Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-18T18:48:51Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=04756e1c595c8c8391b1d6f2ee47dc34a6642c39'/>
<id>urn:sha1:04756e1c595c8c8391b1d6f2ee47dc34a6642c39</id>
<content type='text'>
- Move all styles from index.html &lt;style&gt; block to style.css
- Merge duplicate :focus rules; add canvas-col, canvas-wrap, amp-edit-header, slider-val classes
- Move params (Hop/Threshold/Prominence/Birth/Death/Phase Wt/Min Len) into ⚙ Params dropdown
- Relocate Keep slider to bottom-left canvas overlay

handoff(Claude): UI consolidation complete
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(mq_editor): add iso-contour tracking mode for bass/diffuse regions</title>
<updated>2026-02-18T17:12:48Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-18T17:12:48Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=c5ee9ed388013133fe1e028c403370242c558e2d'/>
<id>urn:sha1:c5ee9ed388013133fe1e028c403370242c558e2d</id>
<content type='text'>
trackIsoContour() follows constant energy level through STFT frames
instead of peaks. Useful for broad bass areas where peak detector finds
nothing. Preview in cyan, auto-detects spread on commit (naturally large).

Toggle: ≋ Contour button or C key. Mutually exclusive with ⊕ Explore.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(mq_editor): add explore mode for interactive partial tracking</title>
<updated>2026-02-18T16:59:49Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-18T16:59:49Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=49e4e374bc51517d8119e4c82d46e3a94ea0b75b'/>
<id>urn:sha1:49e4e374bc51517d8119e4c82d46e3a94ea0b75b</id>
<content type='text'>
Hover to preview a tracked partial from mouse position (peak-snapped,
forward+backward MQ tracking). Click to commit. Toggle with ⊕ Explore
button or X key. Escape exits explore mode.

handoff(Gemini): explore mode added in mq_extract.trackFromSeed + viewer.js/app.js

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(mq_editor): add clear all partials button</title>
<updated>2026-02-18T16:45:32Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-18T16:45:32Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=b9f6429b6cc741c5240c1fea8bbf4c6244e4e5d1'/>
<id>urn:sha1:b9f6429b6cc741c5240c1fea8bbf4c6244e4e5d1</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>perf(mq_editor): move playhead to overlay canvas, avoid full render on tick</title>
<updated>2026-02-18T16:33:42Z</updated>
<author>
<name>skal</name>
<email>pascal.massimino@gmail.com</email>
</author>
<published>2026-02-18T16:33:42Z</published>
<link rel='alternate' type='text/html' href='https://git.taar-o.com/demo.git/commit/?id=5df09ec975568a233e62d0be071fa9725d6b5aac'/>
<id>urn:sha1:5df09ec975568a233e62d0be071fa9725d6b5aac</id>
<content type='text'>
setPlayheadTime() now updates only the playhead overlay and spectrum panel
instead of triggering a full renderSpectrogram() every rAF tick.

handoff(Gemini): playhead is now an overlay canvas (like cursorCanvas),
no more O(n_frames) redraw during playback.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
