{
  "component": "Momentum tone-color voice-cloning helper",
  "license": "MIT (MyShell.ai OpenVoice V2; see vendor/LICENSE-openvoice.txt)",
  "userApproval": "OpenVoice V2 MIT integration approved by Julien on 2026-07-24",
  "upstream": {
    "project": "OpenVoice V2 (MyShell-AI)",
    "sourceRepository": "https://github.com/myshell-ai/OpenVoice",
    "sourceCommit": "74a1d147b17a8c3092dd5430504bd83ef6c7eb23",
    "sourceArchiveSHA256": "d08cbc84f4ec7abc76f9dddb5bbb221e906e49cfe5febd37133152bdeacb8be4",
    "checkpointRelease": "https://huggingface.co/myshell-ai/OpenVoiceV2",
    "checkpointRevision": "f36e7edfe1684461a8343844af60babc2efbb727",
    "checkpointNote": "The documented S3 archive (checkpoints_v2_0417.zip) no longer exists; the official Hugging Face model repository is the live release source.",
    "files": {
      "converter/checkpoint.pth": "9652c27e92b6b2a91632590ac9962ef7ae2b712e5c5b7f4c34ec55ee2b37ab9e",
      "converter/config.json": "9dfff60350b8c63f2c664efd92a61b2516efb22671466960f0e5dfebd881fa47"
    }
  },
  "vendored": {
    "path": "vendor/openvoice",
    "files": [
      "models.py",
      "modules.py",
      "attentions.py",
      "commons.py",
      "transforms.py"
    ],
    "note": "Pure model-definition code only, taken verbatim from the pinned commit. api.py, se_extractor.py, watermarking and every network-touching path are deliberately not vendored."
  },
  "conversion": {
    "method": "torch.onnx.export (TorchScript exporter, opset 17) via export_onnx.py",
    "determinism": "The converter graph takes posterior noise as an explicit input; the helper derives it from a SHA-256 of the input spectrogram and target embedding, so identical lines render identical bytes.",
    "parityGates": [
      "numpy front-end spectrogram == torch spectrogram_torch",
      "onnx encoder == torch ref_enc at two sequence lengths",
      "onnx converter == torch wrapper with identical noise",
      "torch wrapper at the posterior mean == upstream voice_conversion(tau→0)"
    ],
    "toolchain": {
      "python": "3.11 (export venv)",
      "torch": "2.13.0",
      "onnx": "installed for serialization",
      "onnxruntime": "1.27.0",
      "numpy": "2.4.6",
      "scipy": "1.17.1",
      "pyinstaller": "6.21.0"
    }
  },
  "baseSpeaker": {
    "status": "LOCAL QA PAYLOAD BUILT AND VERIFIED. Six VITS exports, four enabled BERT encoders, all six offline frontends and all six final frozen-helper synthesis paths passed their gates. Final frozen validation denied network. No production distribution approval is claimed.",
    "component": "Momentum bundled multilingual base speaker",
    "license": "MeloTTS source/checkpoints: MIT (vendor/LICENSE-melotts.txt). Frontend/runtime dependencies have separate licenses; Japanese pykakasi 2.2.1 metadata reports GPLv3. See exact payload dependency notices; no combined-license compatibility assertion.",
    "why": "OpenVoice V2's published pipeline is MeloTTS base speaker → tone-colour converter. Shipping only the converter caps dub quality at whatever macOS speech voice the user happens to have installed, because cloning re-timbres a base render and cannot invent articulation the base never produced.",
    "upstream": {
      "project": "MeloTTS (MyShell-AI)",
      "sourceRepository": "https://github.com/myshell-ai/MeloTTS",
      "checkpointRelease": "https://huggingface.co/myshell-ai/MeloTTS-{English,Spanish,French,Chinese,Japanese,Korean}",
      "revisions": {
        "en": "bb4fb7346d566d277ba8c8c7dbfdf6786139b8ef",
        "es": "dbb5496df39d11a66c1d5f5a9ca357c3c9fb95fb",
        "fr": "1e9bf590262392d8bffb679b0a3b0c16b0f9fdaf",
        "zh": "af5d207a364ea4208c6f589c89f57f88414bdd16",
        "ja": "367f8795464b531b4e97c1515bddfc1243e60891",
        "ko": "0207e5adfc90129a51b6b03d89be6d84360ed323"
      },
      "checkpointSHA256": {
        "en/checkpoint.pth": "acd278040eaf9536908e2b965273df5a731c44d8f0da66cc5fed7972772ed23c",
        "es/checkpoint.pth": "9077a7e7e5fd8e42f3f922641c401f1936971c08465a3e7ccb19d57a659e72ae",
        "fr/checkpoint.pth": "fdf967d514f91582e451c482cab655e5d736821c3ba87ede8bb0625709642b29",
        "zh/checkpoint.pth": "a74e9eadffff065c75eb6dfa040efa72cad23e72cfea70d39190bc174fb97093",
        "ja/checkpoint.pth": "96ae783e6ec0177aa810e2a645aec5d136a6f4992fdea26ee92b7b04d9688ad0",
        "ko/checkpoint.pth": "48e3ff3fd0b5348e095f0468e60ae727507564100f58142ef3a922ead6e0a4d0"
      },
      "hashesVerified": "The revisions and checkpoint SHA-256 digests above were read from the Hugging Face model API on 2026-07-25 and are the values build_payload.sh enforces. The checkpoint files themselves were NOT downloaded in this lane.",
      "textEncoders": {
        "note": "es/ja checkpoints disable BERT. Others use third-from-last masked-LM hidden state in ja_bert.",
        "en": "bert-base-uncased",
        "es": null,
        "fr": "dbmdz/bert-base-french-europeana-cased",
        "zh": "bert-base-multilingual-uncased",
        "ja": null,
        "ko": "kykim/bert-kor-base"
      },
      "sourceCommit": "209145371cff8fc3bd60d7be902ea69cbdb7965a",
      "symbolsBlobSHA1": "46eea5c975949a69ea8dcb19851fd6c5953778cf",
      "configSHA256": {
        "en": "039116c927c70eaa4458d315ea83aaaa99e1fca1c621b50c8ca56b4a5700eb77",
        "es": "54488d922a2983f4d6a7f57158cc5f2714ea117994e1b22147a8579791554221",
        "fr": "361e84109451acb2f0331c2c9f3c5437e9a502380bbf8741b02545e41b062139",
        "zh": "d58b5acdab89ad2bbd65325affab309ae3cb964834b02f9a60587474e81c8bb9",
        "ja": "207def0d31bf7623e20f4a5e690f217747661bf495319c0139303122b6debcc3",
        "ko": "74543376976dfadde45ba34336fa79c7e95509f43a7c2e701b22c0f71fd7695c"
      },
      "textEncoderRevisions": {
        "en": "86b5e0934494bd15c9632b12f734a8a67f723594",
        "fr": "b895c3cf291f7bf4c15639078a6bee0b3e272c5b",
        "zh": "7cbf9a625e29989f6b9c6c2fa68234c304f7e38f",
        "ko": "1779cc0982ada0216dd6de0dd4e86fb78201926d",
        "es": "d1c9c4565c9d6731e57ed7f027b802697bad861e",
        "ja": "65243d6e5629b969c77309f217bd7b1a79d43c7e"
      },
      "textEncoderRevisionNote": "Immutable Hugging Face snapshots read from the export environment cache; enforced by exporter revision arguments. es/ja use these tokenizer snapshots for G2P alignment while disabling BERT conditioning."
    },
    "vendored": {
      "path": "vendor/melotts",
      "note": "Pinned upstream normalization/pronunciation resources plus offline adapter modules; model-name downloads, upstream eager multilingual imports and runtime pip installs are not used. Each supported frontend requires independent alignment parity and a frozen network-denied synthesis gate.",
      "producedBy": "export_melotts_onnx.py --vendor",
      "dependencyVersions": {
        "tokenizers": "0.13.3",
        "gruut": "2.2.3",
        "gruut-lang-en": "2.0.1",
        "gruut-lang-es": "2.0.1",
        "gruut-lang-fr": "2.0.2",
        "g2p-en": "2.1.0",
        "nltk": "3.10.3",
        "fugashi": "1.3.0",
        "unidic-lite": "1.0.8",
        "pykakasi": "2.2.1",
        "jieba": "0.42.1",
        "cn2an": "0.5.22",
        "pypinyin": "0.50.0",
        "g2pkk": "0.1.2",
        "jamo": "0.4.1",
        "anyascii": "0.3.2",
        "python-mecab-ko": "1.3.7",
        "python-mecab-ko-dic": "2.1.1.post2"
      },
      "adaptations": "Offline adapter modules retain pinned normalization, pronunciation and alignment, replace AutoTokenizer model-name globals with local vocabulary tokenization, remove eager native installers, and route bundled dictionary resources explicitly. Source/frontend tensor parity is independently tested; no torch or transformers runtime import."
    },
    "conversion": {
      "method": "torch.onnx.export (TorchScript exporter, dynamo=False, eval mode, opset 17) via export_melotts_onnx.py",
      "determinism": "Parity uses noiseScale=noiseScaleW=sdpRatio=0 and asserts torch repeatability. Production defaults remain stochastic; repeatable production audio is not proven.",
      "parityGates": [
        "Zero-noise torch reference is bit-identical on repeated calls; ONNX audio must have the same length, finite samples, max absolute error <= 1e-3. This does not prove text frontend correctness, naturalness or stochastic output equivalence."
      ],
      "toolchain": {
        "torch": "2.14.0",
        "onnx": "1.22.0",
        "onnxruntime": "1.29.0",
        "numpy": "1.26.4",
        "scipy": "1.17.1",
        "pyinstaller": "6.21.0"
      }
    },
    "payload": "Packaging/OpenVoice/Models/BaseSpeaker: melo_<lang>.onnx/json and bert_<lang>_vocab.txt for every language; bert_<lang>.onnx only when checkpoint enables BERT. All files indexed by manifest.sha256; descriptors v2 freeze language/tone/config/encoder contracts.",
    "buildCommand": "MOMENTUM_OPENVOICE_PYTHON=<venv-python> Packaging/OpenVoiceHelper/build_payload.sh --with-base-speaker",
    "releaseScope": "Local QA validation only. No production publication or distribution clearance is claimed.",
    "validation": {
      "date": "2026-09-06",
      "helperSHA256": "2eaddfb616c8e5d3f2aca8decd61fb443407343d83de3b89c94147467195a433",
      "languages": [
        "en",
        "es",
        "fr",
        "ja",
        "ko",
        "zh"
      ],
      "networkDenied": true,
      "sourceFrontendParityAssertions": {
        "french": 173,
        "englishSpanish": 490,
        "japaneseChineseKorean": 216
      },
      "statusProcessSeconds": 70.25716179201845,
      "synthesis": [
        {
          "language": "en",
          "audioSeconds": 2.5425850340136056,
          "processSeconds": 44.798221666016616
        },
        {
          "language": "es",
          "audioSeconds": 3.517823129251701,
          "processSeconds": 46.79199174995301
        },
        {
          "language": "fr",
          "audioSeconds": 2.8560544217687074,
          "processSeconds": 48.62158350000391
        },
        {
          "language": "zh",
          "audioSeconds": 2.0549659863945577,
          "processSeconds": 40.10653504100628
        },
        {
          "language": "ja",
          "audioSeconds": 3.01859410430839,
          "processSeconds": 36.40046891698148
        },
        {
          "language": "ko",
          "audioSeconds": 4.702040816326531,
          "processSeconds": 44.750676416035276
        }
      ],
      "limitations": [
        "Acoustic parity uses zero noise; production defaults are stochastic.",
        "Offline execution and alignment parity are not a pronunciation/naturalness rating.",
        "Full French demo retained recovered manual timing and speaker attribution; it does not prove automatic cast assignment.",
        "Dependency notices include GPLv3 pykakasi; scope is local QA, not production distribution clearance."
      ]
    }
  },
  "runtime": {
    "helper": "momentum_openvoice_helper.py frozen one-file arm64 via momentum_openvoice_helper.spec",
    "dependencies": "numpy, scipy, onnxruntime (CPUExecutionProvider only; torch excluded)",
    "contract": "one bounded JSON envelope on stdin, one on stdout, exit; no network, no user configuration",
    "payload": "Packaging/OpenVoice — Models/ + Runtime/ (gitignored artifacts) indexed by the tracked manifest.sha256; packaging re-verifies every hash before bundling"
  }
}
