Skip to main content

Voicefolio

Voicefolio is a small catalog and asset layer for stable, previewable, integrity-pinned reference voices. It is intended to move reference-WAV ownership out of engine/model bundle repositories such as pocket-onnx-bundles and make the same voice reference usable by VoiceRender, RenderPlan, PocketSynth, SoproSynth, and future renderers.

The core rule is simple:

stable ref + pinned source revision + SHA-256 -> exact WAV

Example stable reference:

kyutai-tts-voices:voice-donations/0a67

Existing kyutai-tts-voices:<id> IDs are deliberately preserved so the catalog can move without gratuitous identity churn.

Install

python -m pip install voicefolio
voicefolio version

For native audio preview, install the optional playback dependencies with python -m pip install 'voicefolio[playback]'. Developers can install python -m pip install -e '.[dev]' or include playback as python -m pip install -e '.[dev,playback]'. Catalog, integration, and fetch consumers do not require NumPy, sounddevice, or soundfile.

Versioning is dynamic via setuptools-scm; there is no hard-coded package version and no src/ directory.

Commands

```bash
voicefolio list
voicefolio list --language en
voicefolio browse
voicefolio browse --language fr
voicefolio browse-web
voicefolio preview kyutai-tts-voices:voice-zero/peter_yearsley
voicefolio fetch kyutai-tts-voices:voice-zero/peter_yearsley
voicefolio export kyutai-tts-voices:voice-zero/peter_yearsley -o narrator.wav

browse is a small terminal loop: / searches, l changes the language filter, n/p changes pages, a row number previews, and q quits. In the language prompt, an empty value clears the filter; invalid values leave the current filter unchanged.

  • browse-web opens the minimal local browser addon. It binds only to 127.0.0.1; the browser page filters the packaged catalog and previews WAVs through Voicefolio's verified fetch path.

Language describes the language of a reference recording where authoritative source evidence exists. und means the language is not authoritatively known; language is not an accent label. Filtering is descriptive only and never changes stable refs, source revisions, or SHA-256 integrity pins.

Terminal browse controls:

/ search
l language
n next
p previous
<number> preview
q quit

Each Voicefolio release ships a complete pinned Kyutai catalog snapshot. The initial migrated Pocket baseline contains 1,161 immutable references; later catalog releases may append new stable IDs. Runtime commands use packaged catalog data and do not contact Hugging Face to discover voices.

  • preview = verified download/cache + native playback; it waits until playback finishes and requires voicefolio[playback].
  • fetch = verified download/cache only; it does not play audio.
  • export = exact pinned WAV + provenance sidecar.

voicefolio preview --device DEVICE selects an output device; numeric IDs are accepted. On Linux, native playback may also require the host PortAudio runtime. If playback dependencies are missing, Voicefolio reports: Install voicefolio[playback] for native preview. Catalog listing, validation, fetching, and export do not initialize the audio backend.

Maintaining the authoritative Kyutai catalog

Voicefolio owns upstream discovery, license policy, and refreshes. Maintainers can build a candidate against the latest upstream commit while preserving the checked-in catalog as the immutable baseline:

voicefolio catalog build-kyutai \
  --repository kyutai/tts-voices \
  --revision main \
  --previous voicefolio/resources/catalogs/kyutai-tts-voices.json \
  --output /tmp/kyutai-tts-voices.json

voicefolio catalog verify /tmp/kyutai-tts-voices.json

When updating the packaged catalog, build-kyutai defaults both its output and previous baseline to the packaged catalog. Existing refs and rows are immutable: same bytes preserve the old row, a removed upstream path remains revision-pinned, changed bytes for an existing ID fail, and new paths are appended as new IDs. The scheduled Voicefolio workflow validates and deterministically rebuilds this catalog; normal runtime use remains packaged and network-independent. Validated catalog updates are distributed through Voicefolio releases; CI does not automatically publish to PyPI.

Historical Pocket migration

migrate-pocket remains compatibility/bootstrap tooling for at least one release after pocket-onnx-bundles removes its prompt catalog. It is not the active catalog refresh path:

voicefolio migrate-pocket \
  ../pocket-onnx-bundles/catalog/voice-prompts.json \
  -o /tmp/kyutai-voicefolio.json

voicefolio catalog verify /tmp/kyutai-voicefolio.json

The command converts the historical Pocket prompts container to Voicefolio's schema-1 voices container without changing IDs or integrity pins.

RenderPlan / VoiceRender contract

Voicefolio emits a portable managed reference rather than a local path:

renderer = "pocket"
target_id = "english_2026-04"

[binding.options.voice_source]
kind = "managed_reference"
resolver = "voicefolio"
value = "kyutai-tts-voices:voice-donations/0a67"
sha256 = "4bd75d0ef0ad3f4e82ac075eab2a132651d2463f83bec210edeeccaf69294886"
source_revision = "323332d33f997de8394f24a193e1a76df720e01a"
source_repository = "kyutai/tts-voices"
source_path = "voice-donations/0a67.wav"
license = "CC0-1.0"
dataset = "voice-donations"
variant = "original"

RenderPlan can already persist nested binding tables. VoiceRender should call voicefolio.validate_voice_source() during profile/preflight validation; it checks source pins without downloading the WAV. During execution, call voicefolio.resolve_voice_source() to revalidate the same pins and fetch the verified local asset. This keeps RenderProfiles portable and prevents machine-specific paths from becoming identity. See docs/voicerender-integration.md.

Catalog ownership

Voicefolio owns:

  • direct upstream discovery and deterministic catalog refresh;
  • stable source-qualified IDs;
  • catalog metadata and provenance;
  • source revision + SHA-256 integrity pins;
  • the authoritative license policy and per-row metadata/evidence;
  • caching, preview, and exact WAV export;
  • renderer-neutral managed-reference resolution.

Voicefolio does not own TTS model bundles, embeddings, synthesis, text normalization, G2P, render planning, or final audio mastering.

License

Voicefolio source code is Apache-2.0. Catalog entries and downloaded WAVs keep their own licenses; the package does not relicense them. The catalog includes mixed licenses, including non-commercial entries and NOASSERTION where upstream evidence is inconclusive. Inspect licenses before use:

voicefolio list --license CC0-1.0
voicefolio show kyutai-tts-voices:voice-donations/0a67

A recording license alone should not be treated as a general statement about biometric or voice-likeness rights in every jurisdiction or use case.

Metadata

Release files for voicefolio 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for voicefolio 0.1.1
File Size Uploaded
voicefolio-0.1.1.tar.gz 413.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for voicefolio 0.1.1
File Interpreter ABI Platform
voicefolio-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 518.8 kB

Release files / voicefolio-0.1.1.tar.gz

Download URL voicefolio-0.1.1.tar.gz
Size 413.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d48c938901a3161255eb629d6f50ead34379011dfd5de2c15d6d6aef6f3b11d1
BLAKE2b-256 checksum
How to use checksums
c5bc9a6c0dc5345ef52231fe41c3aaf5725d927104408a897eee6b10b245669b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / voicefolio-0.1.1-py3-none-any.whl

Download URL voicefolio-0.1.1-py3-none-any.whl
Size 105.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0dce70406949d88c0a42a513a25319acced6bc49c0c960818815e8c9672433e7
BLAKE2b-256 checksum
How to use checksums
7ead20296d9fa295de7b07018faab21969b5de7cd393f558ac429ca397ad0627
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page