Untrack the 15.7 MB reference chain; keep the matrix and fix RESTORE.md

Same reasoning as the lab renders: the WAVs are copies of files that live in
~/Documents/Audacity4/ and are mirrored at
~/.umbra/library/author_voice_matrix/20261009T191636Z/. Git does not need a
third copy to be safe.

What stays is the part that is not duplicated anywhere else in a form git can
restore: author_v2.pt and author_v1.pt, 62 KB, the actual voice identity.
manifest.json keeps a SHA-256 for each WAV, so any copy can be verified against
what was captured rather than trusted.

RESTORE.md was wrong after this change and is fixed. It listed the WAVs as
files of the backup and told you to `cp BDMurphy_Voice_NOBG_v2.wav` from that
directory, which no longer works. It now states the WAVs are untracked and where
they actually are, and adds the verified matrix->WAV decode as a first-class
restore path, because that is the point: the WAV is derived from the matrix, not
a prerequisite for it.

Note the asymmetry this leaves in place, deliberately. Loss of the matrix means
losing the captured voice, and no WAV in existence could reconstruct the exact
one. Loss of the WAVs costs nothing, because they can be rebuilt from the
matrix. So the durable, unreproducible artifact is the thing that stays tracked.
This commit is contained in:
B.D. Murphy
2026-10-17 01:06:03 -07:00
parent 6c3f385b73
commit 80d8fb4d7e
7 changed files with 33 additions and 2 deletions

View File

@@ -12,8 +12,21 @@ the voice never drifts between takes.
|---|---|
| `author_v2.pt` | **The live matrix.** Use this one. |
| `author_v1.pt` | Superseded first capture, kept for rollback. |
| `BDMurphy_Voice*.wav` | The reference chain the matrix was captured from. |
| `manifest.json` | SHA-256, provenance, ref_code shape for every file. |
| `BDMurphy_Voice*.wav` | The reference chain. **Git-ignored** — see below. |
## The reference WAVs are not in git
The six `BDMurphy_Voice*.wav` files (15.7 MB) are deliberately untracked. Each
SHA-256 is recorded in `manifest.json` under `reference_chain`, so any copy can
be verified, but git holds only the hashes, not the audio. Copies exist at:
- `~/Documents/Audacity4/` — the working originals
- `~/.umbra/library/author_voice_matrix/20261009T191636Z/` — backup mirror
The one thing git *does* carry is the thing that cannot be re-recorded from thin
air. The WAVs can be rebuilt from the matrix (see below); the matrix cannot be
rebuilt without them.
## Restore
@@ -22,9 +35,27 @@ the voice never drifts between takes.
cp author_v2.pt <project>/.umbra/voice_prompts/author.pt
# Reference WAV -> a project's approved-reference dir:
cp BDMurphy_Voice_NOBG_v2.wav <project>/.umbra/voices/author_ref.wav
cp ~/Documents/Audacity4/BDMurphy_Voice_NOBG_v2.wav <project>/.umbra/voices/author_ref.wav
```
Or rebuild the reference from the matrix alone, with no WAV needed:
```python
# verified 2026-10-09: 34.32 s @ 24 kHz, median F0 129.4 Hz (reference: 129.4 Hz),
# LTAS within 0.55 dB RMS across 80 Hz-12 kHz.
from qwen_tts import Qwen3TTSTokenizer
import soundfile as sf, torch
tok = Qwen3TTSTokenizer.from_pretrained(
"models/Qwen3-TTS-12Hz-1.7B-Base/speech_tokenizer", device_map="cpu")
ref_code = torch.load("author_v2.pt", weights_only=False)["items"][0]["ref_code"]
wavs, sr = tok.decode({"audio_codes": ref_code.cpu()})
sf.write("author_ref.wav", wavs[0], sr, subtype="PCM_16")
```
This is the matrix being the source of truth rather than a copy of it: the WAV
is derived, not required.
The capture call that produced this matrix (re-run ONLY if you are deliberately
changing the voice — it is not needed to use it):