{
  "aboutHtml": "<h4>Une voix naturelle pour l’interaction</h4><p>Speech 2.6 HD est conçu pour une synthèse vocale naturelle et les scénarios où il est important de commencer la réponse rapidement. Le fabricant porte attention à l’intonation, à la fluidité de la parole et au traitement du texte avant sa prononciation. La variante HD privilégie la qualité sonore ; l’entrée de cette fiche est du texte et sa sortie de l’audio vocal.</p><h4>La lecture des notations particulières</h4><p>La génération Speech 2.6 sait traiter des notations fréquentes dans les messages professionnels : adresses de pages, adresses e-mail, numéros de téléphone, dates et montants. Le modèle les transforme en une forme prononçable afin que la réplique reste compréhensible à l’écoute. Le fabricant décrit ces tâches dans plusieurs langues.</p><h4>Une parole fluide avec un timbre préservé</h4><p>Speech 2.6 prévoit le mode Fluent LoRA pour améliorer la fluidité. Il est destiné à la synthèse à partir d’une voix préparée : il aide à conserver le timbre tout en produisant une parole plus liée, même si l’exemple source était irrégulier ou comportait un accent. La préparation d’une voix clonée et son utilisation pour la lecture sont deux actions distinctes.</p><p><strong>40 langues</strong>, dont le russe, sont prises en charge. En plus des sept états émotionnels de base, Speech 2.6 prévoit les options de parole fluide <code>fluent</code> et de chuchotement <code>whisper</code>. Si aucune émotion n’est indiquée, le modèle la choisit selon le sens du texte.</p><h4>Les réglages de prononciation</h4><p>MiniMax prévoit le choix de la voix et le contrôle du débit, du volume et de la hauteur. La vitesse se définit dans une plage de <strong>0,5–2</strong>, le volume doit être supérieur à 0 et aller jusqu’à <strong>10</strong>, et la variation de hauteur va de <strong>−12 à 12</strong>. L’émotion peut être laissée au choix du modèle selon le sens du texte ou définie manuellement : joie, tristesse, colère, peur, dégoût, surprise ou calme.</p><p>La prononciation peut être précisée au moyen d’un lexique de remplacement et d’une transcription phonétique ; l’alphabet phonétique international, le pinyin chinois et les variantes de lecture japonaises sont prévus. Les pauses sont définies entre les passages prononcés dans une plage de <strong>0,01–99,99 secondes</strong>. La durée d’une pause est définie avec une précision de deux chiffres après la virgule ; les marqueurs sont placés entre les passages prononcés et ne doivent pas se suivre. Ces réglages permettent d’accorder la prononciation des noms, des abréviations et des mots ambigus à l’intention de la lecture.</p><h4>La longueur du texte et l’audio</h4><p>La synthèse accepte un texte de moins de <strong>10 000 caractères</strong>. Pour les longs textes de plus de 3000 caractères, le fabricant recommande une sortie en streaming ; la réception de l’audio final en entier est également prévue. Les réglages généraux de synthèse comprennent MP3, PCM, FLAC, WAV, Opus et les variantes G.711 μ-law, en mono ou en stéréo ; les formats disponibles pour une requête précise sont définis par les moyens d’Ailoot.</p><p>Selon MiniMax, cette génération vise une faible latence dans les scénarios vocaux. Il s’agit de la description du modèle ; le délai d’une réponse particulière et la disponibilité des réglages avancés dépendent du mode d’appel choisi dans Ailoot.</p><p>Les réglages audio supplémentaires comprennent les fréquences d’échantillonnage <strong>8, 16, 22,05, 24, 32 et 44,1 kHz</strong>. Pour MP3, les débits prévus sont <strong>32, 64, 128 ou 256 kbit/s</strong>. On peut aussi modifier la couleur de la voix et appliquer un effet : écho spacieux, écho de salle, son téléphonique ou voix robotique. Les effets de modification vocale sont pris en charge pour MP3, WAV et FLAC lorsque l’audio est reçu en entier, et uniquement pour MP3 en streaming. Les formats G.711 μ-law utilisent une fréquence de 8 kHz. Ces fonctions concernent les réglages de synthèse MiniMax.</p><p>Le fabricant prévoit la synchronisation de la parole avec le texte : horodatage des phrases, des mots ou des mots lors d’une sortie progressive. Ce résultat aide à associer la prononciation à l’affichage du texte. Cette fonction supplémentaire nécessite la prise en charge du format de réponse correspondant.</p>",
  "aboutText": "### Une voix naturelle pour l’interaction\n\nSpeech 2.6 HD est conçu pour une synthèse vocale naturelle et les scénarios où il est important de commencer la réponse rapidement. Le fabricant porte attention à l’intonation, à la fluidité de la parole et au traitement du texte avant sa prononciation. La variante HD privilégie la qualité sonore ; l’entrée de cette fiche est du texte et sa sortie de l’audio vocal.\n\n### La lecture des notations particulières\n\nLa génération Speech 2.6 sait traiter des notations fréquentes dans les messages professionnels : adresses de pages, adresses e-mail, numéros de téléphone, dates et montants. Le modèle les transforme en une forme prononçable afin que la réplique reste compréhensible à l’écoute. Le fabricant décrit ces tâches dans plusieurs langues.\n\n### Une parole fluide avec un timbre préservé\n\nSpeech 2.6 prévoit le mode Fluent LoRA pour améliorer la fluidité. Il est destiné à la synthèse à partir d’une voix préparée : il aide à conserver le timbre tout en produisant une parole plus liée, même si l’exemple source était irrégulier ou comportait un accent. La préparation d’une voix clonée et son utilisation pour la lecture sont deux actions distinctes.\n\n**40 langues**, dont le russe, sont prises en charge. En plus des sept états émotionnels de base, Speech 2.6 prévoit les options de parole fluide `fluent` et de chuchotement `whisper`. Si aucune émotion n’est indiquée, le modèle la choisit selon le sens du texte.\n\n### Les réglages de prononciation\n\nMiniMax prévoit le choix de la voix et le contrôle du débit, du volume et de la hauteur. La vitesse se définit dans une plage de **0,5–2**, le volume doit être supérieur à 0 et aller jusqu’à **10**, et la variation de hauteur va de **−12 à 12**. L’émotion peut être laissée au choix du modèle selon le sens du texte ou définie manuellement : joie, tristesse, colère, peur, dégoût, surprise ou calme.\n\nLa prononciation peut être précisée au moyen d’un lexique de remplacement et d’une transcription phonétique ; l’alphabet phonétique international, le pinyin chinois et les variantes de lecture japonaises sont prévus. Les pauses sont définies entre les passages prononcés dans une plage de **0,01–99,99 secondes**. La durée d’une pause est définie avec une précision de deux chiffres après la virgule ; les marqueurs sont placés entre les passages prononcés et ne doivent pas se suivre. Ces réglages permettent d’accorder la prononciation des noms, des abréviations et des mots ambigus à l’intention de la lecture.\n\n### La longueur du texte et l’audio\n\nLa synthèse accepte un texte de moins de **10 000 caractères**. Pour les longs textes de plus de 3000 caractères, le fabricant recommande une sortie en streaming ; la réception de l’audio final en entier est également prévue. Les réglages généraux de synthèse comprennent MP3, PCM, FLAC, WAV, Opus et les variantes G.711 μ-law, en mono ou en stéréo ; les formats disponibles pour une requête précise sont définis par les moyens d’Ailoot.\n\nSelon MiniMax, cette génération vise une faible latence dans les scénarios vocaux. Il s’agit de la description du modèle ; le délai d’une réponse particulière et la disponibilité des réglages avancés dépendent du mode d’appel choisi dans Ailoot.\n\nLes réglages audio supplémentaires comprennent les fréquences d’échantillonnage **8, 16, 22,05, 24, 32 et 44,1 kHz**. Pour MP3, les débits prévus sont **32, 64, 128 ou 256 kbit/s**. On peut aussi modifier la couleur de la voix et appliquer un effet : écho spacieux, écho de salle, son téléphonique ou voix robotique. Les effets de modification vocale sont pris en charge pour MP3, WAV et FLAC lorsque l’audio est reçu en entier, et uniquement pour MP3 en streaming. Les formats G.711 μ-law utilisent une fréquence de 8 kHz. Ces fonctions concernent les réglages de synthèse MiniMax.\n\nLe fabricant prévoit la synchronisation de la parole avec le texte : horodatage des phrases, des mots ou des mots lors d’une sortie progressive. Ce résultat aide à associer la prononciation à l’affichage du texte. Cette fonction supplémentaire nécessite la prise en charge du format de réponse correspondant.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "8133742051a15ce00b37c8f11e236942fd71c1c0fac9d4d11a28c54f225068e4",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fr-ch",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">MM</span><h2 id=\"sheet-title\">speech-2.6-hd</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Fermer\">×</button></div><div class=\"idline\"><span>MiniMax /</span><code>speech-2.6-hd</code><button type=\"button\" id=\"copy-id\">Copier l’ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Rubriques de la fiche modèle\"><button type=\"button\" data-card-jump=\"overview\">Premiers pas</button><button type=\"button\" data-card-jump=\"methods\">Entrées et méthodes</button><button type=\"button\" data-card-jump=\"pricing\">Tarifs</button><button type=\"button\" data-card-jump=\"examples\">Exemples</button><button type=\"button\" data-card-jump=\"results\">Résultats</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Méthodes API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|speech|/v1/audio/speech|speech-2.6-hd\">Synthèse vocale</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Premiers pas</h3><p class=\"mdesc-full\">Speech 2.6 HD est un modèle de synthèse vocale de qualité qui privilégie le naturel et la ressemblance de la voix.</p><dl class=\"card-io\" data-card-io><div><dt>Entrées acceptées</dt><dd>Texte</dd></div><div><dt>Résultats</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>À propos du modèle</summary><p class=\"note-s\" data-model-method-boundary>Cette description présente les capacités du modèle. Les entrées, sorties et options disponibles dans Ailoot pour la méthode sélectionnée figurent ci-dessous.</p><div class=\"mabout\" id=\"m-about\"><h4>Une voix naturelle pour l’interaction</h4><p>Speech 2.6 HD est conçu pour une synthèse vocale naturelle et les scénarios où il est important de commencer la réponse rapidement. Le fabricant porte attention à l’intonation, à la fluidité de la parole et au traitement du texte avant sa prononciation. La variante HD privilégie la qualité sonore ; l’entrée de cette fiche est du texte et sa sortie de l’audio vocal.</p><h4>La lecture des notations particulières</h4><p>La génération Speech 2.6 sait traiter des notations fréquentes dans les messages professionnels : adresses de pages, adresses e-mail, numéros de téléphone, dates et montants. Le modèle les transforme en une forme prononçable afin que la réplique reste compréhensible à l’écoute. Le fabricant décrit ces tâches dans plusieurs langues.</p><h4>Une parole fluide avec un timbre préservé</h4><p>Speech 2.6 prévoit le mode Fluent LoRA pour améliorer la fluidité. Il est destiné à la synthèse à partir d’une voix préparée : il aide à conserver le timbre tout en produisant une parole plus liée, même si l’exemple source était irrégulier ou comportait un accent. La préparation d’une voix clonée et son utilisation pour la lecture sont deux actions distinctes.</p><p><strong>40 langues</strong>, dont le russe, sont prises en charge. En plus des sept états émotionnels de base, Speech 2.6 prévoit les options de parole fluide <code>fluent</code> et de chuchotement <code>whisper</code>. Si aucune émotion n’est indiquée, le modèle la choisit selon le sens du texte.</p><h4>Les réglages de prononciation</h4><p>MiniMax prévoit le choix de la voix et le contrôle du débit, du volume et de la hauteur. La vitesse se définit dans une plage de <strong>0,5–2</strong>, le volume doit être supérieur à 0 et aller jusqu’à <strong>10</strong>, et la variation de hauteur va de <strong>−12 à 12</strong>. L’émotion peut être laissée au choix du modèle selon le sens du texte ou définie manuellement : joie, tristesse, colère, peur, dégoût, surprise ou calme.</p><p>La prononciation peut être précisée au moyen d’un lexique de remplacement et d’une transcription phonétique ; l’alphabet phonétique international, le pinyin chinois et les variantes de lecture japonaises sont prévus. Les pauses sont définies entre les passages prononcés dans une plage de <strong>0,01–99,99 secondes</strong>. La durée d’une pause est définie avec une précision de deux chiffres après la virgule ; les marqueurs sont placés entre les passages prononcés et ne doivent pas se suivre. Ces réglages permettent d’accorder la prononciation des noms, des abréviations et des mots ambigus à l’intention de la lecture.</p><h4>La longueur du texte et l’audio</h4><p>La synthèse accepte un texte de moins de <strong>10 000 caractères</strong>. Pour les longs textes de plus de 3000 caractères, le fabricant recommande une sortie en streaming ; la réception de l’audio final en entier est également prévue. Les réglages généraux de synthèse comprennent MP3, PCM, FLAC, WAV, Opus et les variantes G.711 μ-law, en mono ou en stéréo ; les formats disponibles pour une requête précise sont définis par les moyens d’Ailoot.</p><p>Selon MiniMax, cette génération vise une faible latence dans les scénarios vocaux. Il s’agit de la description du modèle ; le délai d’une réponse particulière et la disponibilité des réglages avancés dépendent du mode d’appel choisi dans Ailoot.</p><p>Les réglages audio supplémentaires comprennent les fréquences d’échantillonnage <strong>8, 16, 22,05, 24, 32 et 44,1 kHz</strong>. Pour MP3, les débits prévus sont <strong>32, 64, 128 ou 256 kbit/s</strong>. On peut aussi modifier la couleur de la voix et appliquer un effet : écho spacieux, écho de salle, son téléphonique ou voix robotique. Les effets de modification vocale sont pris en charge pour MP3, WAV et FLAC lorsque l’audio est reçu en entier, et uniquement pour MP3 en streaming. Les formats G.711 μ-law utilisent une fréquence de 8 kHz. Ces fonctions concernent les réglages de synthèse MiniMax.</p><p>Le fabricant prévoit la synchronisation de la parole avec le texte : horodatage des phrases, des mots ou des mots lors d’une sortie progressive. Ce résultat aide à associer la prononciation à l’affichage du texte. Cette fonction supplémentaire nécessite la prise en charge du format de réponse correspondant.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponible dans Ailoot · entrées et méthodes</h3><details class=\"card-method\" open><summary><b>Ailoot · Synthèse vocale</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Entrée</dt><dd><code>text</code></dd></div><div><dt>Sortie</dt><dd><code>speech</code></dd></div><div><dt>Format de sortie</dt><dd>mp3</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Champ</th><th>Type</th><th>Exigence</th><th>Valeurs et limites</th><th>Par défaut</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>speech-2.6-hd</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>Longueur minimale: 1</div><div>Longueur maximale (exclue): 10'000</div><div>Unité: caractères Unicode</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>Motif: ^[A-Za-z0-9_-]{1,128}$</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>mp3</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinaisons d’éléments d’entrée</summary><p class=\"note-s\"><b>text_to_speech</b> · Obligatoire : input</p></details><details class=\"note-s\" data-method-contract><summary>Paramètres et cycle de vie de la méthode</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Paramètre</th><th>Contrat</th></tr></thead><tbody><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>material_types</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>text</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>required</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>null</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>optional_controls</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>null</td></tr></tbody></table></div><p>Cycle de vie : <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · task_id effectivement renvoyé ou enregistrement de la bibliothèque multimédia</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p><p class=\"note-s\">Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarifs</h3><h4>Tarifs des méthodes Ailoot</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Synthèse vocale</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Entrée</dt><dd>100.00 USD <em>par 1 million de caractères</em></dd></div></dl></section><p class=\"note-s\">Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. <a href=\"/docs/fr-ch/billing/reserve/\">Fonctionnement de la réservation et du débit →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Exemples de requêtes</h3><h4>Ailoot · Synthèse vocale</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes du code\"><button class=\"cg-tab\" id=\"model-code-469-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-469-panel-0\" aria-selected=\"true\" tabindex=\"0\">Exemple de synthèse vocale</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copier le code\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-469-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-469-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}&quot;\nexport AILOOT_TEXT_FILE\n: &quot;${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}&quot;\nexport AILOOT_VOICE_ID\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;speech-2.6-hd&quot;, &quot;input&quot;: &quot;&quot;}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;input&quot;]=text\nimport re\nvoice=os.environ[&quot;AILOOT_VOICE_ID&quot;]\nif not re.fullmatch(r&quot;[A-Za-z0-9_-]{1,128}&quot;,voice):raise SystemExit(&quot;Set an actual accepted voice ID&quot;)\np[&quot;voice&quot;]=voice\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Recevoir et enregistrer les résultats</h3><h4>Ailoot · Synthèse vocale</h4><p class=\"note-s\">mp3</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Conserver tous les résultats terminés</h5><p class=\"note-s\">Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.</p><p class=\"note-s\">Conservez le résultat binaire complet et les en-têtes. Si une réponse JSON ou plusieurs sorties sont renvoyées, conservez chaque élément de données et récupérez chaque ressource via son URL signée réelle.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Si la réponse d’origine doit être vérifiée</h5><p class=\"note-s\">Conservez l’operation_id/X-Client-Request-ID d’origine pour le rapprochement sans nouvelle soumission ; aucune route dédiée à l’interrogation du statut audio.</p></div><details class=\"card-about\" data-output-fields><summary>Champs de la réponse</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Champ</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>bytes</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Erreurs et étapes suivantes</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Réponse</th><th>Condition</th><th>Étape suivante</th></tr></thead><tbody><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Champs obligatoires, représentation des contenus ou valeur de paramètre non valides</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Corrigez les champs indiqués avant une nouvelle requête de création.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span><code>server_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>La réponse renvoyée indique que l’opération ou le résultat nécessite une vérification</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Conservez l’identifiant d’opération/de tâche initialement renvoyé, les en-têtes de la requête et la réponse ; poursuivez les lectures prises en charge de cette opération d’origine. Ne soumettez pas à nouveau la requête de création.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias du modèle</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=speech-2.6-hd&amp;route=Core&amp;caller=speech-2.6-hd&amp;fmt=speech\"><code>speech-2.6-hd</code></a></span></p><h4>Alias des chemins de méthode</h4><p class=\"note-s\">Utilisez les chemins de méthode indiqués ci-dessus.</p><h4>ID d’appel associés</h4><p class=\"note-s\"><a href=\"#m=speech-2.6-hd&amp;route=Core&amp;caller=speech-2.6-hd&amp;fmt=speech\"><code>speech-2.6-hd</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "speech-2.6-hd",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "speech-2.6-hd",
        "route_label": "Core"
      },
      "method_key": "Core|speech|/v1/audio/speech|speech-2.6-hd",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Champs obligatoires, représentation des contenus ou valeur de paramètre non valides",
                "http_status": 400,
                "recovery": "Corrigez les champs indiqués avant une nouvelle requête de création.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "La réponse renvoyée indique que l’opération ou le résultat nécessite une vérification",
                "http_status": null,
                "recovery": "Conservez l’identifiant d’opération/de tâche initialement renvoyé, les en-têtes de la requête et la réponse ; poursuivez les lectures prises en charge de cette opération d’origine. Ne soumettez pas à nouveau la requête de création.",
                "type": "server_error"
              }
            ],
            "hints": [
              "MiniMax accepts optionalresponse_formatmp3. Actual voice IDs come from the selected model voice profile.",
              "The facade uses bufferedMP3; provider speed/volume/pitch/sample-rate fields are fixed by the adapter, not callercontrols."
            ],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Conservez l’operation_id/X-Client-Request-ID d’origine pour le rapprochement sans nouvelle soumission ; aucune route dédiée à l’interrogation du statut audio."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Conservez le résultat binaire complet et les en-têtes. Si une réponse JSON ou plusieurs sorties sont renvoyées, conservez chaque élément de données et récupérez chaque ressource via son URL signée réelle.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "speech-2.6-hd"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length_exclusive": 10000,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "caractères Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "voice",
                "pattern": "^[A-Za-z0-9_-]{1,128}$",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "task_id effectivement renvoyé ou enregistrement de la bibliothèque multimédia",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\n: \"${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"speech-2.6-hd\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nimport re\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nif not re.fullmatch(r\"[A-Za-z0-9_-]{1,128}\",voice):raise SystemExit(\"Set an actual accepted voice ID\")\np[\"voice\"]=voice\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Synthèse vocale",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 100,
                "amount_unit": "usd_per_display_unit",
                "key": "tts_million_chars",
                "label": "per 1 million characters",
                "side": "in"
              }
            ]
          }
        ],
        "request_model_id": "speech-2.6-hd",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "tts_million_chars",
        "units": [
          {
            "key": "tts_million_chars",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 100
          }
        ]
      }
    }
  ],
  "model_id": "speech-2.6-hd",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "eb2b9168d82a4f766b1abdb28707fb199028027d0a9e915b959a8ee7e7992810",
    "input_html_sha256": "e2444cd239f7636fe6481b682cb32c47df8772581f878e7a82801623c4ad6029",
    "private_audit_sha256": "e5ce37bcf839e9d3d2234745328701c9252ff5d48eff5d2a0b2b6062cad7393e",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fr-ch/speech-2-6-hd/",
    "description": "Speech 2.6 HD est un modèle de synthèse vocale de qualité qui privilégie le naturel et la ressemblance de la voix.",
    "locale": "fr-ch",
    "md_url": "https://ailoot.ai/models/fr-ch/speech-2-6-hd/index.md",
    "title": "speech-2.6-hd — Ailoot",
    "url": "https://ailoot.ai/models/fr-ch/speech-2-6-hd/"
  },
  "rawModel": {
    "about": "### Une voix naturelle pour l’interaction\n\nSpeech 2.6 HD est conçu pour une synthèse vocale naturelle et les scénarios où il est important de commencer la réponse rapidement. Le fabricant porte attention à l’intonation, à la fluidité de la parole et au traitement du texte avant sa prononciation. La variante HD privilégie la qualité sonore ; l’entrée de cette fiche est du texte et sa sortie de l’audio vocal.\n\n### La lecture des notations particulières\n\nLa génération Speech 2.6 sait traiter des notations fréquentes dans les messages professionnels : adresses de pages, adresses e-mail, numéros de téléphone, dates et montants. Le modèle les transforme en une forme prononçable afin que la réplique reste compréhensible à l’écoute. Le fabricant décrit ces tâches dans plusieurs langues.\n\n### Une parole fluide avec un timbre préservé\n\nSpeech 2.6 prévoit le mode Fluent LoRA pour améliorer la fluidité. Il est destiné à la synthèse à partir d’une voix préparée : il aide à conserver le timbre tout en produisant une parole plus liée, même si l’exemple source était irrégulier ou comportait un accent. La préparation d’une voix clonée et son utilisation pour la lecture sont deux actions distinctes.\n\n**40 langues**, dont le russe, sont prises en charge. En plus des sept états émotionnels de base, Speech 2.6 prévoit les options de parole fluide `fluent` et de chuchotement `whisper`. Si aucune émotion n’est indiquée, le modèle la choisit selon le sens du texte.\n\n### Les réglages de prononciation\n\nMiniMax prévoit le choix de la voix et le contrôle du débit, du volume et de la hauteur. La vitesse se définit dans une plage de **0,5–2**, le volume doit être supérieur à 0 et aller jusqu’à **10**, et la variation de hauteur va de **−12 à 12**. L’émotion peut être laissée au choix du modèle selon le sens du texte ou définie manuellement : joie, tristesse, colère, peur, dégoût, surprise ou calme.\n\nLa prononciation peut être précisée au moyen d’un lexique de remplacement et d’une transcription phonétique ; l’alphabet phonétique international, le pinyin chinois et les variantes de lecture japonaises sont prévus. Les pauses sont définies entre les passages prononcés dans une plage de **0,01–99,99 secondes**. La durée d’une pause est définie avec une précision de deux chiffres après la virgule ; les marqueurs sont placés entre les passages prononcés et ne doivent pas se suivre. Ces réglages permettent d’accorder la prononciation des noms, des abréviations et des mots ambigus à l’intention de la lecture.\n\n### La longueur du texte et l’audio\n\nLa synthèse accepte un texte de moins de **10 000 caractères**. Pour les longs textes de plus de 3000 caractères, le fabricant recommande une sortie en streaming ; la réception de l’audio final en entier est également prévue. Les réglages généraux de synthèse comprennent MP3, PCM, FLAC, WAV, Opus et les variantes G.711 μ-law, en mono ou en stéréo ; les formats disponibles pour une requête précise sont définis par les moyens d’Ailoot.\n\nSelon MiniMax, cette génération vise une faible latence dans les scénarios vocaux. Il s’agit de la description du modèle ; le délai d’une réponse particulière et la disponibilité des réglages avancés dépendent du mode d’appel choisi dans Ailoot.\n\nLes réglages audio supplémentaires comprennent les fréquences d’échantillonnage **8, 16, 22,05, 24, 32 et 44,1 kHz**. Pour MP3, les débits prévus sont **32, 64, 128 ou 256 kbit/s**. On peut aussi modifier la couleur de la voix et appliquer un effet : écho spacieux, écho de salle, son téléphonique ou voix robotique. Les effets de modification vocale sont pris en charge pour MP3, WAV et FLAC lorsque l’audio est reçu en entier, et uniquement pour MP3 en streaming. Les formats G.711 μ-law utilisent une fréquence de 8 kHz. Ces fonctions concernent les réglages de synthèse MiniMax.\n\nLe fabricant prévoit la synchronisation de la parole avec le texte : horodatage des phrases, des mots ou des mots lors d’une sortie progressive. Ce résultat aide à associer la prononciation à l’affichage du texte. Cette fonction supplémentaire nécessite la prise en charge du format de réponse correspondant.",
    "alias_of": null,
    "aliases": [],
    "author": "MiniMax",
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "speech-2.6-hd",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Champs obligatoires, représentation des contenus ou valeur de paramètre non valides",
                "http_status": 400,
                "recovery": "Corrigez les champs indiqués avant une nouvelle requête de création.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "La réponse renvoyée indique que l’opération ou le résultat nécessite une vérification",
                "http_status": null,
                "recovery": "Conservez l’identifiant d’opération/de tâche initialement renvoyé, les en-têtes de la requête et la réponse ; poursuivez les lectures prises en charge de cette opération d’origine. Ne soumettez pas à nouveau la requête de création.",
                "type": "server_error"
              }
            ],
            "hints": [
              "MiniMax accepts optionalresponse_formatmp3. Actual voice IDs come from the selected model voice profile.",
              "The facade uses bufferedMP3; provider speed/volume/pitch/sample-rate fields are fixed by the adapter, not callercontrols."
            ],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Conservez l’operation_id/X-Client-Request-ID d’origine pour le rapprochement sans nouvelle soumission ; aucune route dédiée à l’interrogation du statut audio."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Conservez le résultat binaire complet et les en-têtes. Si une réponse JSON ou plusieurs sorties sont renvoyées, conservez chaque élément de données et récupérez chaque ressource via son URL signée réelle.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "speech-2.6-hd"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length_exclusive": 10000,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "caractères Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "voice",
                "pattern": "^[A-Za-z0-9_-]{1,128}$",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Les structures des méthodes et les identifiants sont exacts ; la capacité du fournisseur est distincte de l’admission."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "task_id effectivement renvoyé ou enregistrement de la bibliothèque multimédia",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\n: \"${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"speech-2.6-hd\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nimport re\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nif not re.fullmatch(r\"[A-Za-z0-9_-]{1,128}\",voice):raise SystemExit(\"Set an actual accepted voice ID\")\np[\"voice\"]=voice\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Synthèse vocale",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 100,
                "amount_unit": "usd_per_display_unit",
                "key": "tts_million_chars",
                "label": "per 1 million characters",
                "side": "in"
              }
            ]
          }
        ],
        "request_model_id": "speech-2.6-hd",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "tts_million_chars",
        "units": [
          {
            "key": "tts_million_chars",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 100
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "speech-2.6-hd",
        "request_model_id": "speech-2.6-hd",
        "route_label": "Core"
      }
    ],
    "name": "speech-2.6-hd",
    "price": {
      "in": 100,
      "in_label": "per 1 million characters",
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": false
    },
    "short": "Speech 2.6 HD est un modèle de synthèse vocale de qualité qui privilégie le naturel et la ressemblance de la voix."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Speech 2.6 HD est un modèle de synthèse vocale de qualité qui privilégie le naturel et la ressemblance de la voix.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "950beb5e8835a73933f28fe772d424c30c32b051b6f5abd08cdc6a9e75a3241d",
    "renderer_sha256": "4d2f3bfcbf0fa5c616c87aa9524d00d7cff227d8dfa2446ff47c8e0220325dc9"
  },
  "sourceRevision": "e4805a38ed2b6530525b7640eb6bb5b816f07b00d5d7bb22922afbd2dfaf2de1"
}
