Skip to content

audiocpp_gguf: a gguf-to-gguf re-emit drops embedded sidecars while reporting that it reused them #578

Closed

Description

@christopherthompson81

Feeding an existing package back through audiocpp_gguf to change one piece of metadata produces a package with no voices, exits 0, and prints that the sidecars were reused.

Repro

audiocpp_gguf --input  kokoro-82m-q8_0.gguf \
              --output kokoro-respec.gguf \
              --type orig --family kokoro_tts \
              --model-spec model_specs/kokoro_tts.json --overwrite

Output:

note: reusing the sidecars embedded in .../kokoro-82m-q8_0.gguf; pass --root to override
gguf=.../kokoro-respec.gguf
weight_type=orig
tensor_sources=1
embedded_sidecars=true
embedded_model_spec=true
model_spec_family=kokoro_tts

Exit code 0. Both sidecar claims are false:

voice sidecar entries size
kokoro-82m-q8_0.gguf 54 189,611,360
kokoro-respec.gguf 0 161,345,952

--inspect reports tensors=548 and embedded_sidecars=true for both, so it does not show the difference either.

The result is unusable:

load FAILED: failed to open binary file: /tmp/audiocpp-gguf/911a3828bf36b9f1/voices/zm_yunxia.bin

The spec half works

This is specifically the sidecars. The re-emitted package's embedded spec is correctly replaced — the new option I was testing is present in the output and absent from the input — so --model-spec does its job and only the sidecar payloads are dropped.

Why it is worth more than the exit code suggests

For this package there is no way back. The installed directory holds only the .gguf and a manifest:

kokoro-82m-q8_0.gguf
.audiocpp-package-kokoro_82m_q8_0.json

The 54 voices exist only inside the GGUF, so --root has nothing to point at and the re-emit is lossy with no local recovery — you would have to re-download or re-convert from the original weights. Someone updating a package in place could reasonably delete the input afterwards.

The misleading note is the sharp edge rather than the omission itself. A hard error ("cannot carry embedded sidecars from a GGUF input; pass --root") would be fine, and would have taken about a second to act on. Printing embedded_sidecars=true invites the opposite conclusion.

Suggested shape

Either carry the embedded sidecars through a GGUF-input re-emit, or refuse the combination with a message naming what is missing. Both are fine; silently producing a voiceless package is the part that is not.

To be clear about scope: this is not a request for an in-place spec-patching mode. The embedded spec being authoritative is the right design — the package is self-contained and the package is the unit you rebuild. The ask here is only that a re-emit either preserves what it claims to preserve or says it cannot.

Found while checking whether an existing Kokoro package could pick up a newly declared request option without a full rebuild.

🤖 Generated with Claude Code

https://claude.ai/code/session_01EkxqpYvUbjCpRDnFiNiVfx

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions