Views
No views yet
| File(s) | Component | Source weights |
|---|---|---|
dit.onnx (+ .data) | Rectified-flow DiT | Irodori-TTS-500M-v3 |
text_encoder.onnx | Text encoder | Irodori-TTS-500M-v3 |
speaker_encoder.onnx | Speaker encoder | Irodori-TTS-500M-v3 |
duration.onnx | Duration predictor | Irodori-TTS-500M-v3 |
dacvae_encoder.onnx | Codec encoder | Semantic-DACVAE-Japanese-32dim |
dacvae_decoder.onnx | Codec decoder (48 kHz) | Semantic-DACVAE-Japanese-32dim |
tokenizer/llmjp_tok/ | Fast tokenizer | llm-jp/llm-jp-3-150m |
onnx/, ~2.3 GB) — reference precision.onnx_fp16/, ~0.65 GB) — audibly identical to fp32 and faster on
WebGPU (DiT ~1.4×, decode ~1.9×). The fp16 decoder is the ConvTranspose → Conv
rewritten form (a naive fp16 decoder produces noise on onnxruntime-web's WebGPU
ConvTranspose kernel — see the repo for details).torch.onnx.export(dynamo=True), symbolic shapes).view_as_complex, not ONNX-exportable) replaced with a
mathematically identical real-valued implementation.ConvTranspose layers rewritten to a sub-pixel (polyphase) Conv-only
form (verified corr 1.0 vs the original).runtime/pipeline.mjs:1import * as ort from "https://cdn.jsdelivr.net/npm/onnxruntime-web@1.23.0/dist/ort.webgpu.mjs";
2import { AutoTokenizer, env } from "https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.7.6";
3import { IrodoriTTS } from "./runtime/pipeline.mjs";
4
5ort.env.wasm.wasmPaths = "https://cdn.jsdelivr.net/npm/onnxruntime-web@1.23.0/dist/";
6env.allowRemoteModels = false; env.allowLocalModels = true;
7env.localModelPath = "/tokenizer/";
8
9const base = "/onnx"; // or /onnx_fp16
10const names = { text:"text_encoder", speaker:"speaker_encoder", duration:"duration",
11 dit:"dit", dac:"dacvae_decoder", enc:"dacvae_encoder" };
12const opt = (n) => ({ executionProviders:["webgpu"], graphOptimizationLevel:"all",
13 externalData:[{ path:`${n}.onnx.data`, data:`${base}/${n}.onnx.data` }] });
14const sessions = {};
15for (const [k, n] of Object.entries(names))
16 sessions[k] = await ort.InferenceSession.create(`${base}/${n}.onnx`, opt(n));
17
18const tokenizer = await AutoTokenizer.from_pretrained("llmjp_tok");
19const tts = new IrodoriTTS({ ort, sessions, tokenizer });
20
21// refWav: Float32Array, mono, 48 kHz
22const { audio, sampleRate } = await tts.synthesize(text, refWav, 48000,
23 { numSteps: 16, seed: 0 });| Component | Source | License |
|---|---|---|
| Irodori-TTS (500M-v3 weights) | Aratako/Irodori-TTS · model card | MIT |
| Semantic-DACVAE (codec) | Aratako/Semantic-DACVAE-Japanese-32dim (derived from facebook/dacvae-watermarked) | MIT |
| llm-jp-3-150m tokenizer | llm-jp/llm-jp-3-150m | Apache-2.0 |
LICENSES/. Per Apache-2.0, the modifications
listed above (ONNX/fp16 conversion, decoder rewrite) are stated as required.