kokoro-kmp-models / scripts /export_all_onnx.py
Shusek00's picture
Publish complete Kokoro multilingual catalog v2.0.0
0dbae7f verified
Raw
History Blame Contribute Delete
3.93 kB
#!/usr/bin/env python3
"""Export all four catalog models from checkpoints synced by sync_upstream_assets.py."""
from __future__ import annotations
import argparse
import json
from pathlib import Path
import subprocess
import sys
import tempfile
ROOT = Path(__file__).resolve().parents[1]
BASE_REVISION = "f3ff3571791e39611d31c381e3a41a3af07b4987"
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument(
"--checkpoint-manifest",
type=Path,
default=Path(tempfile.gettempdir()) / "kokoro-kmp-checkpoints.json",
)
args = parser.parse_args()
if not args.checkpoint_manifest.is_file():
raise SystemExit(
f"Missing {args.checkpoint_manifest}; run scripts/sync_upstream_assets.py first"
)
checkpoints = json.loads(args.checkpoint_manifest.read_text(encoding="utf-8"))
exports = [
{
"id": "kokoro-v1.0-fp32",
"checkpointName": "kokoro-v1_0.pth",
"config": "runtime/kokoro-v1.0-config.json",
"voice": "voices/en-us/af_heart.bin",
"output": "models/standard/kokoro-v1.0-fp32.onnx",
"language": "multilingual-v1.0",
"phonemes": "həlˈO wˈɜɹld.",
"repository": "hexgrad/Kokoro-82M",
"revision": BASE_REVISION,
},
{
"id": "kokoro-v1.1-zh-fp32",
"checkpointName": "kokoro-v1_1-zh.pth",
"config": "runtime/kokoro-v1.1-zh-config.json",
"voice": "voices/zh/zf_001.bin",
"output": "models/zh/kokoro-v1.1-zh-fp32.onnx",
"language": "zh-en-v1.1",
"phonemes": "ㄋㄧ2ㄏㄠ3, ㄕ十4ㄐㄝ4.",
"repository": "hexgrad/Kokoro-82M-v1.1-zh",
"revision": "01e7505bd6a7a2ac4975463114c3a7650a9f7218",
},
{
"id": "kokoro-pl-fp32",
"checkpointName": "finetunes/kokoro_polish_converted.pth",
"config": "runtime/kokoro-v1.0-config.json",
"voice": "voices/pl/pm_mateusz.bin",
"output": "models/pl/kokoro-pl-fp32.onnx",
"language": "pl",
"phonemes": "zˈaʒuwtɕ ɡˈɛɲɕlɔ̃ jˈaʒɲ.",
"repository": "software-mansion/react-native-executorch-kokoro",
"revision": "3744b57964eab7df6e8c48f0b84badb29e14df07",
},
{
"id": "kokoro-de-fp32",
"checkpointName": "finetunes/kokoro_german_converted.pth",
"config": "runtime/kokoro-v1.0-config.json",
"voice": "voices/de/df_anna.bin",
"output": "models/de/kokoro-de-fp32.onnx",
"language": "de",
"phonemes": "hˈaloː vˈɛlt.",
"repository": "software-mansion/react-native-executorch-kokoro",
"revision": "3744b57964eab7df6e8c48f0b84badb29e14df07",
},
]
exporter = ROOT / "scripts/export_onnx.py"
for item in exports:
checkpoint = checkpoints.get(item["id"])
if checkpoint is None:
raise RuntimeError(f"Checkpoint manifest has no {item['id']}")
command = [
sys.executable,
str(exporter),
"--checkpoint",
checkpoint,
"--source-checkpoint-name",
item["checkpointName"],
"--config",
item["config"],
"--voice",
item["voice"],
"--output",
item["output"],
"--language",
item["language"],
"--reference-phonemes",
item["phonemes"],
"--source-repository",
item["repository"],
"--source-revision",
item["revision"],
"--base-revision",
BASE_REVISION,
]
print(f"Exporting {item['id']}", flush=True)
subprocess.run(command, check=True, cwd=ROOT)
if __name__ == "__main__":
main()