{
  "aboutHtml": "<p>S2.1 Pro Free เป็นรุ่นสำหรับนักพัฒนาของโมเดลแปลงข้อความเป็นเสียงพูด S2.1 จาก Fish Audio ใช้โมเดลพื้นฐานและความสามารถสังเคราะห์หลักร่วมกับ S2.1 Pro ได้แก่ เสียงพูดหลายภาษาที่ถ่ายทอดอารมณ์ คำกำกับการพูดด้วยภาษาธรรมชาติ และบทสนทนาหลายผู้พูดโดยตรง บทบาทคือการทดสอบ สร้างต้นแบบ พัฒนา และเวิร์กโฟลว์แอปพลิเคชันขนาดเล็ก</p><p>สำหรับต้นแบบผู้ช่วยเสียง เริ่มจากตัวอย่างคำตอบเต็มและประเมินเสียงก่อนทดลองข้อความที่ทยอยมาถึง สำหรับผลิตภัณฑ์การเรียนรู้ เตรียมคำอธิบายสั้นที่มีคำศัพท์และการอ่านตัวเลขตรงตามที่ผู้ฟังต้องการ สำหรับต้นแบบบทสนทนา กำหนดผู้พูดและเสียงอ้างอิงก่อนเพิ่มคำกำกับการพูด ขั้นเหล่านี้พัฒนาชิ้นงานเสียงและโฟลว์แอปพลิเคชันรอบชิ้นงาน แทนการให้คำขอสังเคราะห์เสียงรับผิดชอบบทสนทนาทั้งหมด</p><p>เขียนคำที่จะพูดจริง แล้ววางคำสั่งทันทีก่อนข้อความที่ต้องเปลี่ยนวิธีพูด คำกำกับในวงเล็บเหลี่ยมแสดงการกระซิบ การหยุด ปฏิกิริยา การเน้น หรือรูปแบบการพูดที่บรรยายได้อย่างเปิดกว้าง วางการเปลี่ยนกลางประโยคตรงจุดที่การพูดต้องเปลี่ยน และใส่คำพูดจริงตามหลังคำกำกับเชิงบรรยาย บรีฟคำอธิบายที่มีประโยชน์แยกถ้อยคำข้อเท็จจริงจากความอบอุ่น จังหวะ หรือการเน้นที่ต้องการให้ผู้ฟังได้รับ</p><p>สำหรับผู้พูดคนเดียว เลือกรหัสเสียงที่บันทึกไว้หรือส่งเสียงอ้างอิงพร้อมบทถอดเสียง คู่มือเสียงพูดของผู้ผลิตแนะนำตัวอย่างสะอาดยาว 10–30 วินาทีเพื่อกำหนดเสียงทันที เลือกตัวอย่างที่มีน้ำเสียงและคุณภาพบันทึกเหมาะกับบท และใช้ตัวอย่างเดิมในข้อความที่เกี่ยวข้อง เสียงอ้างอิงกำหนดลักษณะเสียงผู้พูด ส่วนข้อความกับคำกำกับในบทกำหนดเนื้อหาและการถ่ายทอด</p><p>การสังเคราะห์หลายผู้พูดโดยตรงใช้เครื่องหมาย เช่น &lt;|speaker:0|&gt; และ &lt;|speaker:1|&gt; ร่วมกับอาร์เรย์รหัสเสียงตามลำดับหรือกลุ่มอ้างอิงแยกกัน ให้หมายเลขผู้พูดตรงกับลำดับนั้น สำหรับบทโต้ตอบเพื่อสอน ให้เขียนแต่ละบทพูดและวางคำกำกับวิธีพูดหลังเครื่องหมายผู้พูดในตำแหน่งที่เหมาะสม วิธีนี้สร้างบทสนทนาภายในคำขอเดียว ต่างจากเวิร์กโฟลว์ของ S1 ที่สร้างช่วงผู้พูดเดี่ยวแยกกันแล้วประกอบภายหลัง</p><p>เวิร์กโฟลว์ผู้ผลิตให้ผลลัพธ์ MP3, WAV, PCM ดิบ และ Opus โดย MP3 เป็นค่าเริ่มต้น MP3 รองรับ 64, 128 และ 192 kbps ส่วน WAV และ PCM ใช้รูปแบบตัวอย่างโมโน 16 บิตตามเอกสาร ขณะที่ Opus ใช้ 48 kHz เลือกรูปแบบตามการเก็บไฟล์บรรยาย การเล่นแบบสตรีม หรือไปป์ไลน์เสียงถัดไป เก็บบทเต็มและเสียงที่เลือกไว้กับไฟล์เสียง เพื่อให้แก้ไขหนึ่งบรรทัดภายหลังโดยยังรักษาการถ่ายทอดที่ตั้งใจ</p><p>ปรับความเร็วได้จาก 0.5 ถึง 2.0 พร้อมตัวควบคุมระดับเสียง การปรับข้อความให้อยู่ในรูปอ่านได้ขยายตัวเลขอังกฤษและจีนเพื่อให้อ่านเป็นธรรมชาติ การปรับความดังผลลัพธ์ให้เป็นมาตรฐานมีค่าเริ่มต้น true และใช้กับตระกูล S2 ฟิลด์เดียวกันไม่มีผลกับ S1 ส่วน repetition_penalty ของ S1 ไม่เปลี่ยนเสียง S2.1 Pro จึงไม่ควรถือว่าค่าที่สืบทอดมาเป็นตัวควบคุมที่มีผลกับโมเดลนี้ ตรวจเสียงและถ้อยคำที่ซ้ำโดยตรงแทนการพึ่งพารามิเตอร์จากรุ่นก่อนเพื่อยืนยันผล</p><p>บทที่ยาวจะประมวลผลเป็นส่วน ช่วงความยาวส่วนตามเอกสารคือ 100–300 และ max_new_tokens เป็นงบโทเคนเสียงต่อส่วน ไม่ใช่การรับประกันระยะเวลารวม การอิงส่วนก่อนหน้าช่วยส่งต่อบริบทเสียง เวิร์กโฟลว์การส่งของผู้ผลิตอธิบายเสียงสมบูรณ์ ชิ้นเสียงที่ทยอยส่ง และการสตรีมข้อความสดเมื่อบททยอยมาถึง เลือกวิธีรับผลที่เหมาะกับแอปพลิเคชัน และรักษาบริบทบทให้เพียงพอสำหรับการออกเสียงกับน้ำเสียงของข้อความถัดไป</p><p>เพื่อให้ได้ชิ้นงานที่มีประโยชน์ ให้ฟังคำที่ตกหล่นหรือซ้ำ การอ่านตัวเลข การเปลี่ยนผู้พูด จังหวะหยุด และความเข้มของคำกำกับ เสียงอ้างอิงต่างกันอาจตีความคำกำกับแรงเบาต่างกัน จึงควรเริ่มจากบรรทัดที่กำกับเรียบง่ายก่อนเพิ่มแท็กที่แข่งขันกัน สำหรับหลายภาษา ให้ส่งบทในภาษาเป้าหมายแทนการขอให้โมเดลเสียงแต่งหรือแปลเนื้อหา การแก้ไขเฉพาะจุดเปลี่ยนบรรทัด คำกำกับ หรือเสียงอ้างอิงที่ทำให้ไม่ตรงโจทย์ โดยรักษาส่วนการถ่ายทอดที่เข้ากับบรีฟอยู่แล้ว</p>",
  "aboutText": "S2.1 Pro Free เป็นรุ่นสำหรับนักพัฒนาของโมเดลแปลงข้อความเป็นเสียงพูด S2.1 จาก Fish Audio ใช้โมเดลพื้นฐานและความสามารถสังเคราะห์หลักร่วมกับ S2.1 Pro ได้แก่ เสียงพูดหลายภาษาที่ถ่ายทอดอารมณ์ คำกำกับการพูดด้วยภาษาธรรมชาติ และบทสนทนาหลายผู้พูดโดยตรง บทบาทคือการทดสอบ สร้างต้นแบบ พัฒนา และเวิร์กโฟลว์แอปพลิเคชันขนาดเล็ก\n\nสำหรับต้นแบบผู้ช่วยเสียง เริ่มจากตัวอย่างคำตอบเต็มและประเมินเสียงก่อนทดลองข้อความที่ทยอยมาถึง สำหรับผลิตภัณฑ์การเรียนรู้ เตรียมคำอธิบายสั้นที่มีคำศัพท์และการอ่านตัวเลขตรงตามที่ผู้ฟังต้องการ สำหรับต้นแบบบทสนทนา กำหนดผู้พูดและเสียงอ้างอิงก่อนเพิ่มคำกำกับการพูด ขั้นเหล่านี้พัฒนาชิ้นงานเสียงและโฟลว์แอปพลิเคชันรอบชิ้นงาน แทนการให้คำขอสังเคราะห์เสียงรับผิดชอบบทสนทนาทั้งหมด\n\nเขียนคำที่จะพูดจริง แล้ววางคำสั่งทันทีก่อนข้อความที่ต้องเปลี่ยนวิธีพูด คำกำกับในวงเล็บเหลี่ยมแสดงการกระซิบ การหยุด ปฏิกิริยา การเน้น หรือรูปแบบการพูดที่บรรยายได้อย่างเปิดกว้าง วางการเปลี่ยนกลางประโยคตรงจุดที่การพูดต้องเปลี่ยน และใส่คำพูดจริงตามหลังคำกำกับเชิงบรรยาย บรีฟคำอธิบายที่มีประโยชน์แยกถ้อยคำข้อเท็จจริงจากความอบอุ่น จังหวะ หรือการเน้นที่ต้องการให้ผู้ฟังได้รับ\n\nสำหรับผู้พูดคนเดียว เลือกรหัสเสียงที่บันทึกไว้หรือส่งเสียงอ้างอิงพร้อมบทถอดเสียง คู่มือเสียงพูดของผู้ผลิตแนะนำตัวอย่างสะอาดยาว 10–30 วินาทีเพื่อกำหนดเสียงทันที เลือกตัวอย่างที่มีน้ำเสียงและคุณภาพบันทึกเหมาะกับบท และใช้ตัวอย่างเดิมในข้อความที่เกี่ยวข้อง เสียงอ้างอิงกำหนดลักษณะเสียงผู้พูด ส่วนข้อความกับคำกำกับในบทกำหนดเนื้อหาและการถ่ายทอด\n\nการสังเคราะห์หลายผู้พูดโดยตรงใช้เครื่องหมาย เช่น <|speaker:0|> และ <|speaker:1|> ร่วมกับอาร์เรย์รหัสเสียงตามลำดับหรือกลุ่มอ้างอิงแยกกัน ให้หมายเลขผู้พูดตรงกับลำดับนั้น สำหรับบทโต้ตอบเพื่อสอน ให้เขียนแต่ละบทพูดและวางคำกำกับวิธีพูดหลังเครื่องหมายผู้พูดในตำแหน่งที่เหมาะสม วิธีนี้สร้างบทสนทนาภายในคำขอเดียว ต่างจากเวิร์กโฟลว์ของ S1 ที่สร้างช่วงผู้พูดเดี่ยวแยกกันแล้วประกอบภายหลัง\n\nเวิร์กโฟลว์ผู้ผลิตให้ผลลัพธ์ MP3, WAV, PCM ดิบ และ Opus โดย MP3 เป็นค่าเริ่มต้น MP3 รองรับ 64, 128 และ 192 kbps ส่วน WAV และ PCM ใช้รูปแบบตัวอย่างโมโน 16 บิตตามเอกสาร ขณะที่ Opus ใช้ 48 kHz เลือกรูปแบบตามการเก็บไฟล์บรรยาย การเล่นแบบสตรีม หรือไปป์ไลน์เสียงถัดไป เก็บบทเต็มและเสียงที่เลือกไว้กับไฟล์เสียง เพื่อให้แก้ไขหนึ่งบรรทัดภายหลังโดยยังรักษาการถ่ายทอดที่ตั้งใจ\n\nปรับความเร็วได้จาก 0.5 ถึง 2.0 พร้อมตัวควบคุมระดับเสียง การปรับข้อความให้อยู่ในรูปอ่านได้ขยายตัวเลขอังกฤษและจีนเพื่อให้อ่านเป็นธรรมชาติ การปรับความดังผลลัพธ์ให้เป็นมาตรฐานมีค่าเริ่มต้น true และใช้กับตระกูล S2 ฟิลด์เดียวกันไม่มีผลกับ S1 ส่วน repetition_penalty ของ S1 ไม่เปลี่ยนเสียง S2.1 Pro จึงไม่ควรถือว่าค่าที่สืบทอดมาเป็นตัวควบคุมที่มีผลกับโมเดลนี้ ตรวจเสียงและถ้อยคำที่ซ้ำโดยตรงแทนการพึ่งพารามิเตอร์จากรุ่นก่อนเพื่อยืนยันผล\n\nบทที่ยาวจะประมวลผลเป็นส่วน ช่วงความยาวส่วนตามเอกสารคือ 100–300 และ max_new_tokens เป็นงบโทเคนเสียงต่อส่วน ไม่ใช่การรับประกันระยะเวลารวม การอิงส่วนก่อนหน้าช่วยส่งต่อบริบทเสียง เวิร์กโฟลว์การส่งของผู้ผลิตอธิบายเสียงสมบูรณ์ ชิ้นเสียงที่ทยอยส่ง และการสตรีมข้อความสดเมื่อบททยอยมาถึง เลือกวิธีรับผลที่เหมาะกับแอปพลิเคชัน และรักษาบริบทบทให้เพียงพอสำหรับการออกเสียงกับน้ำเสียงของข้อความถัดไป\n\nเพื่อให้ได้ชิ้นงานที่มีประโยชน์ ให้ฟังคำที่ตกหล่นหรือซ้ำ การอ่านตัวเลข การเปลี่ยนผู้พูด จังหวะหยุด และความเข้มของคำกำกับ เสียงอ้างอิงต่างกันอาจตีความคำกำกับแรงเบาต่างกัน จึงควรเริ่มจากบรรทัดที่กำกับเรียบง่ายก่อนเพิ่มแท็กที่แข่งขันกัน สำหรับหลายภาษา ให้ส่งบทในภาษาเป้าหมายแทนการขอให้โมเดลเสียงแต่งหรือแปลเนื้อหา การแก้ไขเฉพาะจุดเปลี่ยนบรรทัด คำกำกับ หรือเสียงอ้างอิงที่ทำให้ไม่ตรงโจทย์ โดยรักษาส่วนการถ่ายทอดที่เข้ากับบรีฟอยู่แล้ว",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "ccf971d77f2ddab1391fba07afa4e838b7c05347775f0f37cb803e3d1157c0d2",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "th",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Fish Audio: S2.1 Pro Free (free)</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"ปิด\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/s2.1-pro-free:free</code><button type=\"button\" id=\"copy-id\">คัดลอก ID</button></div><nav class=\"card-jump-nav\" aria-label=\"ส่วนต่าง ๆ ของการ์ดโมเดล\"><button type=\"button\" data-card-jump=\"overview\">เริ่มต้น</button><button type=\"button\" data-card-jump=\"methods\">อินพุตและเมธอด</button><button type=\"button\" data-card-jump=\"pricing\">ราคา</button><button type=\"button\" data-card-jump=\"examples\">ตัวอย่าง</button><button type=\"button\" data-card-jump=\"results\">ผลลัพธ์</button><button type=\"button\" data-card-jump=\"aliases\">ชื่ออื่น</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"เมธอด API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|speech|/v1/audio/speech|fish-audio%2Fs2.1-pro-free%3Afree\">การสังเคราะห์เสียงพูด</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\">เริ่มต้น</h3><p class=\"mdesc-full\">S2.1 Pro Free เป็นรุ่นเพื่อการพัฒนาของโมเดลเสียงพูด S2.1 จาก Fish Audio สำหรับเสียงบรรยาย เสียงที่กำกับการพูด และบทสนทนาหลายผู้พูด ใช้ความสามารถสังเคราะห์เสียงร่วมกับโมเดลหลักสำหรับการทดสอบและสร้างต้นแบบ</p><dl class=\"card-io\" data-card-io><div><dt>อินพุตที่รองรับ</dt><dd>ข้อความ</dd></div><div><dt>ผลลัพธ์</dt><dd>เสียง</dd></div></dl><details class=\"card-about\"><summary>เกี่ยวกับโมเดล</summary><p class=\"note-s\" data-model-method-boundary>คำอธิบายนี้ครอบคลุมความสามารถของโมเดล อินพุต เอาต์พุต และตัวเลือกที่ใช้ได้ใน Ailoot แสดงด้านล่างตามเมธอดที่เลือก</p><div class=\"mabout\" id=\"m-about\"><p>S2.1 Pro Free เป็นรุ่นสำหรับนักพัฒนาของโมเดลแปลงข้อความเป็นเสียงพูด S2.1 จาก Fish Audio ใช้โมเดลพื้นฐานและความสามารถสังเคราะห์หลักร่วมกับ S2.1 Pro ได้แก่ เสียงพูดหลายภาษาที่ถ่ายทอดอารมณ์ คำกำกับการพูดด้วยภาษาธรรมชาติ และบทสนทนาหลายผู้พูดโดยตรง บทบาทคือการทดสอบ สร้างต้นแบบ พัฒนา และเวิร์กโฟลว์แอปพลิเคชันขนาดเล็ก</p><p>สำหรับต้นแบบผู้ช่วยเสียง เริ่มจากตัวอย่างคำตอบเต็มและประเมินเสียงก่อนทดลองข้อความที่ทยอยมาถึง สำหรับผลิตภัณฑ์การเรียนรู้ เตรียมคำอธิบายสั้นที่มีคำศัพท์และการอ่านตัวเลขตรงตามที่ผู้ฟังต้องการ สำหรับต้นแบบบทสนทนา กำหนดผู้พูดและเสียงอ้างอิงก่อนเพิ่มคำกำกับการพูด ขั้นเหล่านี้พัฒนาชิ้นงานเสียงและโฟลว์แอปพลิเคชันรอบชิ้นงาน แทนการให้คำขอสังเคราะห์เสียงรับผิดชอบบทสนทนาทั้งหมด</p><p>เขียนคำที่จะพูดจริง แล้ววางคำสั่งทันทีก่อนข้อความที่ต้องเปลี่ยนวิธีพูด คำกำกับในวงเล็บเหลี่ยมแสดงการกระซิบ การหยุด ปฏิกิริยา การเน้น หรือรูปแบบการพูดที่บรรยายได้อย่างเปิดกว้าง วางการเปลี่ยนกลางประโยคตรงจุดที่การพูดต้องเปลี่ยน และใส่คำพูดจริงตามหลังคำกำกับเชิงบรรยาย บรีฟคำอธิบายที่มีประโยชน์แยกถ้อยคำข้อเท็จจริงจากความอบอุ่น จังหวะ หรือการเน้นที่ต้องการให้ผู้ฟังได้รับ</p><p>สำหรับผู้พูดคนเดียว เลือกรหัสเสียงที่บันทึกไว้หรือส่งเสียงอ้างอิงพร้อมบทถอดเสียง คู่มือเสียงพูดของผู้ผลิตแนะนำตัวอย่างสะอาดยาว 10–30 วินาทีเพื่อกำหนดเสียงทันที เลือกตัวอย่างที่มีน้ำเสียงและคุณภาพบันทึกเหมาะกับบท และใช้ตัวอย่างเดิมในข้อความที่เกี่ยวข้อง เสียงอ้างอิงกำหนดลักษณะเสียงผู้พูด ส่วนข้อความกับคำกำกับในบทกำหนดเนื้อหาและการถ่ายทอด</p><p>การสังเคราะห์หลายผู้พูดโดยตรงใช้เครื่องหมาย เช่น &lt;|speaker:0|&gt; และ &lt;|speaker:1|&gt; ร่วมกับอาร์เรย์รหัสเสียงตามลำดับหรือกลุ่มอ้างอิงแยกกัน ให้หมายเลขผู้พูดตรงกับลำดับนั้น สำหรับบทโต้ตอบเพื่อสอน ให้เขียนแต่ละบทพูดและวางคำกำกับวิธีพูดหลังเครื่องหมายผู้พูดในตำแหน่งที่เหมาะสม วิธีนี้สร้างบทสนทนาภายในคำขอเดียว ต่างจากเวิร์กโฟลว์ของ S1 ที่สร้างช่วงผู้พูดเดี่ยวแยกกันแล้วประกอบภายหลัง</p><p>เวิร์กโฟลว์ผู้ผลิตให้ผลลัพธ์ MP3, WAV, PCM ดิบ และ Opus โดย MP3 เป็นค่าเริ่มต้น MP3 รองรับ 64, 128 และ 192 kbps ส่วน WAV และ PCM ใช้รูปแบบตัวอย่างโมโน 16 บิตตามเอกสาร ขณะที่ Opus ใช้ 48 kHz เลือกรูปแบบตามการเก็บไฟล์บรรยาย การเล่นแบบสตรีม หรือไปป์ไลน์เสียงถัดไป เก็บบทเต็มและเสียงที่เลือกไว้กับไฟล์เสียง เพื่อให้แก้ไขหนึ่งบรรทัดภายหลังโดยยังรักษาการถ่ายทอดที่ตั้งใจ</p><p>ปรับความเร็วได้จาก 0.5 ถึง 2.0 พร้อมตัวควบคุมระดับเสียง การปรับข้อความให้อยู่ในรูปอ่านได้ขยายตัวเลขอังกฤษและจีนเพื่อให้อ่านเป็นธรรมชาติ การปรับความดังผลลัพธ์ให้เป็นมาตรฐานมีค่าเริ่มต้น true และใช้กับตระกูล S2 ฟิลด์เดียวกันไม่มีผลกับ S1 ส่วน repetition_penalty ของ S1 ไม่เปลี่ยนเสียง S2.1 Pro จึงไม่ควรถือว่าค่าที่สืบทอดมาเป็นตัวควบคุมที่มีผลกับโมเดลนี้ ตรวจเสียงและถ้อยคำที่ซ้ำโดยตรงแทนการพึ่งพารามิเตอร์จากรุ่นก่อนเพื่อยืนยันผล</p><p>บทที่ยาวจะประมวลผลเป็นส่วน ช่วงความยาวส่วนตามเอกสารคือ 100–300 และ max_new_tokens เป็นงบโทเคนเสียงต่อส่วน ไม่ใช่การรับประกันระยะเวลารวม การอิงส่วนก่อนหน้าช่วยส่งต่อบริบทเสียง เวิร์กโฟลว์การส่งของผู้ผลิตอธิบายเสียงสมบูรณ์ ชิ้นเสียงที่ทยอยส่ง และการสตรีมข้อความสดเมื่อบททยอยมาถึง เลือกวิธีรับผลที่เหมาะกับแอปพลิเคชัน และรักษาบริบทบทให้เพียงพอสำหรับการออกเสียงกับน้ำเสียงของข้อความถัดไป</p><p>เพื่อให้ได้ชิ้นงานที่มีประโยชน์ ให้ฟังคำที่ตกหล่นหรือซ้ำ การอ่านตัวเลข การเปลี่ยนผู้พูด จังหวะหยุด และความเข้มของคำกำกับ เสียงอ้างอิงต่างกันอาจตีความคำกำกับแรงเบาต่างกัน จึงควรเริ่มจากบรรทัดที่กำกับเรียบง่ายก่อนเพิ่มแท็กที่แข่งขันกัน สำหรับหลายภาษา ให้ส่งบทในภาษาเป้าหมายแทนการขอให้โมเดลเสียงแต่งหรือแปลเนื้อหา การแก้ไขเฉพาะจุดเปลี่ยนบรรทัด คำกำกับ หรือเสียงอ้างอิงที่ทำให้ไม่ตรงโจทย์ โดยรักษาส่วนการถ่ายทอดที่เข้ากับบรีฟอยู่แล้ว</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">ใช้งานได้ใน Ailoot · อินพุตและเมธอด</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · เสียงพูด</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>ขาเข้า</dt><dd><code>text</code></dd></div><div><dt>ขาออก</dt><dd><code>audio</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>ฟิลด์</th><th>ประเภท</th><th>ข้อกำหนด</th><th>ค่าและข้อจำกัด</th><th>ค่าเริ่มต้น</th></tr></thead><tbody><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>fish-audio/s2.1-pro-free:free</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>ความยาวขั้นต่ำ: 1</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>b347db033a6549378b48d00acb0d06cd</div><div>ความยาวขั้นต่ำ: 1</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>mp3, pcm</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"known\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>pcm</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">provider</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>object</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>พารามิเตอร์และวงจรการทำงานของเมธอด</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>พารามิเตอร์</th><th>ข้อกำหนด</th></tr></thead><tbody><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>content_type</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>application/json</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>required</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>model, input, voice</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>material_types</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>text</td></tr></tbody></table></div><p>วงจรการทำงาน: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · ค่า task_id ที่ส่งกลับมาจริง หรือระเบียนในคลังสื่อ</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></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">ราคา</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>ข้อมูลอัตราราคาไม่ได้เพิ่มตัวเลือกคำขอ พารามิเตอร์ที่รองรับระบุไว้สำหรับเมธอดที่เลือก</p><dl data-price-conditions><dt>โหมดรวดเร็ว</dt><dd>ไม่ได้ระบุ <span class=\"note-s\">เมื่อเลือกโหมดรวดเร็ว</span></dd><dt>โหมดยืดหยุ่น</dt><dd>ไม่ได้ระบุ <span class=\"note-s\">เมื่อเลือกโหมด flex</span></dd><dt>ระดับการใช้เหตุผลสูงสุด</dt><dd>ไม่ได้ระบุ <span class=\"note-s\">เมื่อใช้การปรับตามค่าเริ่มต้น (default) สำหรับระดับการใช้เหตุผลสูงสุด</span></dd></dl></div><div data-declared-tariff-pricing><h4>อัตราค่าบริการ Ailoot</h4><h4>ราคาตามการตั้งค่า</h4><p class=\"note-s\">เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>การตั้งค่า</th><th>ตารางอัตราค่าบริการ</th><th>ปริมาณที่คิดค่าบริการ</th><th>ค่าบริการ</th></tr></thead><tbody><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>อัตราค่าบริการโทเคนพื้นฐาน</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>อัตราพื้นฐาน</td><td data-cell-label=\"ปริมาณที่คิดค่าบริการ\"><span class=\"card-cell-label\">ปริมาณที่คิดค่าบริการ</span>—</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาเข้า · โทเค็นอินพุต</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาออก · โทเค็นเอาต์พุต</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การอ่านแคช</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การเขียนแคช</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การเขียนแคช, 1 ชั่วโมง</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div></td></tr><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>ต่อคำขอ</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>—</td><td data-cell-label=\"ปริมาณที่คิดค่าบริการ\"><span class=\"card-cell-label\">ปริมาณที่คิดค่าบริการ</span>หนึ่งคำขอ</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาเข้า</span> <b>$0</b> <span class=\"price-unit\">ต่อคำขอ</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย <a href=\"/docs/th/billing/reserve/\">วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">ตัวอย่างคำขอ</h3><h4>Ailoot Ultra · เสียงพูด</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"ตัวเลือกโค้ด\"><button class=\"cg-tab\" id=\"model-code-1359-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1359-panel-0\" aria-selected=\"true\" tabindex=\"0\">ใช้ข้อมูลเข้าจริงและเก็บผลลัพธ์ไว้ให้ครบถ้วน</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"คัดลอกโค้ด\"><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-1359-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1359-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_INPUT_TEXT:?Set the actual documented input value}&quot;\nexport AILOOT_INPUT_TEXT\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;fish-audio/s2.1-pro-free:free&#39;, &#39;input&#39;: &#39;${ACTUAL_INPUT_TEXT}&#39;, &#39;voice&#39;: &#39;b347db033a6549378b48d00acb0d06cd&#39;, &#39;response_format&#39;: &#39;mp3&#39;}\nrequest[&#39;input&#39;]=os.environ[&#39;AILOOT_INPUT_TEXT&#39;]\nPath(&#39;request.json&#39;).write_text(json.dumps(request,ensure_ascii=False),encoding=&#39;utf-8&#39;)\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 response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">รับและบันทึกผลลัพธ์</h3><h4>Ailoot Ultra · เสียงพูด</h4><p class=\"note-s\">เสียงไบนารีทั้งหมดหรือการตอบกลับ audio_url เดิม ส่วนหัว และแอสเซ็ตทุกชิ้นที่เป็นของคุณ</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><details class=\"card-about\"><summary>การอ่านเนื้อหาแบบอื่น</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"ตัวเลือกโค้ด\"><button class=\"cg-tab\" id=\"model-code-1360-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1360-panel-0\" aria-selected=\"true\" tabindex=\"0\">อ่านไฟล์สื่อที่มีอยู่และเป็นของคุณ</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"คัดลอกโค้ด\"><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-1360-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1360-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด</h5><p class=\"note-s\">เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน</p><p class=\"note-s\">เก็บการตอบกลับและส่วนหัวให้ครบถ้วน เก็บผลลัพธ์จริงทุกรายการ ตัวระบุที่ส่งกลับมาแต่เดิม และฟิลด์ข้อมูลการใช้งานทั้งหมด กู้คืนการดำเนินการเดิมโดยไม่ส่งคำขอสร้างซ้ำ</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ</h5><p class=\"note-s\">เก็บ X-Client-Request-ID ที่ส่งกลับมาไว้เพื่อกระทบยอด อ่านเฉพาะค่า task_id/asset_id ที่ส่งกลับมาจริง หรืออ่านจากคลังสื่อที่เป็นของตนเอง ห้ามสร้าง URL ของงานจาก ID การดำเนินการ และห้ามส่งคำขอสร้างซ้ำเด็ดขาด</p></div></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">ชื่ออื่น</h3><h4>ชื่ออื่นของโมเดล</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=fish-audio%2Fs2.1-pro-free%3Afree&amp;route=Ultra&amp;caller=fish-audio%2Fs2.1-pro-free%3Afree&amp;fmt=speech\"><code>fish-audio/s2.1-pro-free:free</code></a></span></p><h4>ชื่อพาธเมธอดอื่น</h4><p class=\"note-s\">ใช้พาธเมธอดที่แสดงด้านบน</p><h4>ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล</h4><p class=\"note-s\"><a href=\"#m=fish-audio%2Fs2.1-pro-free%3Afree&amp;route=Ultra&amp;caller=fish-audio%2Fs2.1-pro-free%3Afree&amp;fmt=speech\"><code>fish-audio/s2.1-pro-free:free</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/s2.1-pro-free:free",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "fish-audio/s2.1-pro-free:free",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|fish-audio%2Fs2.1-pro-free%3Afree",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "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": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "เก็บ X-Client-Request-ID ที่ส่งกลับมาไว้เพื่อกระทบยอด อ่านเฉพาะค่า task_id/asset_id ที่ส่งกลับมาจริง หรืออ่านจากคลังสื่อที่เป็นของตนเอง ห้ามสร้าง URL ของงานจาก ID การดำเนินการ และห้ามส่งคำขอสร้างซ้ำเด็ดขาด"
            },
            "outputs": {
              "all_results": "เก็บการตอบกลับและส่วนหัวให้ครบถ้วน เก็บผลลัพธ์จริงทุกรายการ ตัวระบุที่ส่งกลับมาแต่เดิม และฟิลด์ข้อมูลการใช้งานทั้งหมด กู้คืนการดำเนินการเดิมโดยไม่ส่งคำขอสร้างซ้ำ",
              "family": "audio",
              "formats": [
                "mp3",
                "pcm"
              ],
              "result": "เสียงไบนารีทั้งหมดหรือการตอบกลับ audio_url เดิม ส่วนหัว และแอสเซ็ตทุกชิ้นที่เป็นของคุณ"
            },
            "parameters": [
              {
                "enum": [
                  "fish-audio/s2.1-pro-free:free"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "b347db033a6549378b48d00acb0d06cd"
                ],
                "enum_known": true,
                "min_length": 1,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "fish-audio/s2.1-pro-free:free"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Documented speech data policy and provider-specific options.",
                  "properties": {
                    "data_collection": {
                      "enum": [
                        "allow",
                        "deny",
                        null
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "options": {
                      "type": "object"
                    },
                    "zdr": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "enum": [
                    "b347db033a6549378b48d00acb0d06cd"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "fish-audio/s2.1-pro-free:free",
                "response_format": "mp3",
                "voice": "b347db033a6549378b48d00acb0d06cd"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "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 ที่ส่งกลับมาจริง หรือระเบียนในคลังสื่อ",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "billing_quantity": "one request"
            },
            "label": "Per request",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "per_request",
                "label": "per request",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "public_unit_label": "per request",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "per_request"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_TEXT:?Set the actual documented input value}\"\nexport AILOOT_INPUT_TEXT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/s2.1-pro-free:free', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\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 response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "เสียงพูด",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": 0
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "billing_quantity": "one request"
            },
            "label": "Per request",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "per_request",
                "label": "per request",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "public_unit_label": "per request",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "per_request"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s2.1-pro-free:free",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "per_request",
            "label": "per request",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "public_unit_label": "per request",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "per_request"
          }
        ]
      }
    }
  ],
  "model_id": "fish-audio/s2.1-pro-free:free",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "4207ac0a5d264d7a367a6e14950acef4f8401f1a22a485e9b57478b810b4fb74",
    "input_html_sha256": "1e277c9bac982b91f6ad54b5d451f85d3d8fbfb1efb894ec06b53ae7e077a2c5",
    "private_audit_sha256": "512e0220de9a03c3b12b9ca4cbd9a4751cbc4c8e610533a9f43c81edf8ef96fd",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/th/fish-audio-s2-1-pro-free-u003a-free/",
    "description": "S2.1 Pro Free เป็นรุ่นเพื่อการพัฒนาของโมเดลเสียงพูด S2.1 จาก Fish Audio สำหรับเสียงบรรยาย เสียงที่กำกับการพูด และบทสนทนาหลายผู้พูด ใช้ความสามารถสังเคราะห์เสียงร่วมกับโมเดลหลักสำหรับการทดสอบและสร้างต้นแบบ",
    "locale": "th",
    "md_url": "https://ailoot.ai/models/th/fish-audio-s2-1-pro-free-u003a-free/index.md",
    "title": "Fish Audio: S2.1 Pro Free (free) — Ailoot",
    "url": "https://ailoot.ai/models/th/fish-audio-s2-1-pro-free-u003a-free/"
  },
  "rawModel": {
    "about": "S2.1 Pro Free เป็นรุ่นสำหรับนักพัฒนาของโมเดลแปลงข้อความเป็นเสียงพูด S2.1 จาก Fish Audio ใช้โมเดลพื้นฐานและความสามารถสังเคราะห์หลักร่วมกับ S2.1 Pro ได้แก่ เสียงพูดหลายภาษาที่ถ่ายทอดอารมณ์ คำกำกับการพูดด้วยภาษาธรรมชาติ และบทสนทนาหลายผู้พูดโดยตรง บทบาทคือการทดสอบ สร้างต้นแบบ พัฒนา และเวิร์กโฟลว์แอปพลิเคชันขนาดเล็ก\n\nสำหรับต้นแบบผู้ช่วยเสียง เริ่มจากตัวอย่างคำตอบเต็มและประเมินเสียงก่อนทดลองข้อความที่ทยอยมาถึง สำหรับผลิตภัณฑ์การเรียนรู้ เตรียมคำอธิบายสั้นที่มีคำศัพท์และการอ่านตัวเลขตรงตามที่ผู้ฟังต้องการ สำหรับต้นแบบบทสนทนา กำหนดผู้พูดและเสียงอ้างอิงก่อนเพิ่มคำกำกับการพูด ขั้นเหล่านี้พัฒนาชิ้นงานเสียงและโฟลว์แอปพลิเคชันรอบชิ้นงาน แทนการให้คำขอสังเคราะห์เสียงรับผิดชอบบทสนทนาทั้งหมด\n\nเขียนคำที่จะพูดจริง แล้ววางคำสั่งทันทีก่อนข้อความที่ต้องเปลี่ยนวิธีพูด คำกำกับในวงเล็บเหลี่ยมแสดงการกระซิบ การหยุด ปฏิกิริยา การเน้น หรือรูปแบบการพูดที่บรรยายได้อย่างเปิดกว้าง วางการเปลี่ยนกลางประโยคตรงจุดที่การพูดต้องเปลี่ยน และใส่คำพูดจริงตามหลังคำกำกับเชิงบรรยาย บรีฟคำอธิบายที่มีประโยชน์แยกถ้อยคำข้อเท็จจริงจากความอบอุ่น จังหวะ หรือการเน้นที่ต้องการให้ผู้ฟังได้รับ\n\nสำหรับผู้พูดคนเดียว เลือกรหัสเสียงที่บันทึกไว้หรือส่งเสียงอ้างอิงพร้อมบทถอดเสียง คู่มือเสียงพูดของผู้ผลิตแนะนำตัวอย่างสะอาดยาว 10–30 วินาทีเพื่อกำหนดเสียงทันที เลือกตัวอย่างที่มีน้ำเสียงและคุณภาพบันทึกเหมาะกับบท และใช้ตัวอย่างเดิมในข้อความที่เกี่ยวข้อง เสียงอ้างอิงกำหนดลักษณะเสียงผู้พูด ส่วนข้อความกับคำกำกับในบทกำหนดเนื้อหาและการถ่ายทอด\n\nการสังเคราะห์หลายผู้พูดโดยตรงใช้เครื่องหมาย เช่น <|speaker:0|> และ <|speaker:1|> ร่วมกับอาร์เรย์รหัสเสียงตามลำดับหรือกลุ่มอ้างอิงแยกกัน ให้หมายเลขผู้พูดตรงกับลำดับนั้น สำหรับบทโต้ตอบเพื่อสอน ให้เขียนแต่ละบทพูดและวางคำกำกับวิธีพูดหลังเครื่องหมายผู้พูดในตำแหน่งที่เหมาะสม วิธีนี้สร้างบทสนทนาภายในคำขอเดียว ต่างจากเวิร์กโฟลว์ของ S1 ที่สร้างช่วงผู้พูดเดี่ยวแยกกันแล้วประกอบภายหลัง\n\nเวิร์กโฟลว์ผู้ผลิตให้ผลลัพธ์ MP3, WAV, PCM ดิบ และ Opus โดย MP3 เป็นค่าเริ่มต้น MP3 รองรับ 64, 128 และ 192 kbps ส่วน WAV และ PCM ใช้รูปแบบตัวอย่างโมโน 16 บิตตามเอกสาร ขณะที่ Opus ใช้ 48 kHz เลือกรูปแบบตามการเก็บไฟล์บรรยาย การเล่นแบบสตรีม หรือไปป์ไลน์เสียงถัดไป เก็บบทเต็มและเสียงที่เลือกไว้กับไฟล์เสียง เพื่อให้แก้ไขหนึ่งบรรทัดภายหลังโดยยังรักษาการถ่ายทอดที่ตั้งใจ\n\nปรับความเร็วได้จาก 0.5 ถึง 2.0 พร้อมตัวควบคุมระดับเสียง การปรับข้อความให้อยู่ในรูปอ่านได้ขยายตัวเลขอังกฤษและจีนเพื่อให้อ่านเป็นธรรมชาติ การปรับความดังผลลัพธ์ให้เป็นมาตรฐานมีค่าเริ่มต้น true และใช้กับตระกูล S2 ฟิลด์เดียวกันไม่มีผลกับ S1 ส่วน repetition_penalty ของ S1 ไม่เปลี่ยนเสียง S2.1 Pro จึงไม่ควรถือว่าค่าที่สืบทอดมาเป็นตัวควบคุมที่มีผลกับโมเดลนี้ ตรวจเสียงและถ้อยคำที่ซ้ำโดยตรงแทนการพึ่งพารามิเตอร์จากรุ่นก่อนเพื่อยืนยันผล\n\nบทที่ยาวจะประมวลผลเป็นส่วน ช่วงความยาวส่วนตามเอกสารคือ 100–300 และ max_new_tokens เป็นงบโทเคนเสียงต่อส่วน ไม่ใช่การรับประกันระยะเวลารวม การอิงส่วนก่อนหน้าช่วยส่งต่อบริบทเสียง เวิร์กโฟลว์การส่งของผู้ผลิตอธิบายเสียงสมบูรณ์ ชิ้นเสียงที่ทยอยส่ง และการสตรีมข้อความสดเมื่อบททยอยมาถึง เลือกวิธีรับผลที่เหมาะกับแอปพลิเคชัน และรักษาบริบทบทให้เพียงพอสำหรับการออกเสียงกับน้ำเสียงของข้อความถัดไป\n\nเพื่อให้ได้ชิ้นงานที่มีประโยชน์ ให้ฟังคำที่ตกหล่นหรือซ้ำ การอ่านตัวเลข การเปลี่ยนผู้พูด จังหวะหยุด และความเข้มของคำกำกับ เสียงอ้างอิงต่างกันอาจตีความคำกำกับแรงเบาต่างกัน จึงควรเริ่มจากบรรทัดที่กำกับเรียบง่ายก่อนเพิ่มแท็กที่แข่งขันกัน สำหรับหลายภาษา ให้ส่งบทในภาษาเป้าหมายแทนการขอให้โมเดลเสียงแต่งหรือแปลเนื้อหา การแก้ไขเฉพาะจุดเปลี่ยนบรรทัด คำกำกับ หรือเสียงอ้างอิงที่ทำให้ไม่ตรงโจทย์ โดยรักษาส่วนการถ่ายทอดที่เข้ากับบรีฟอยู่แล้ว",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "per_request",
            "label": "per request",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "public_unit_label": "per request",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "per_request"
          }
        ],
        "summary": "ดูราคาตามการกำหนดค่าแบบครบถ้วนในรายละเอียด"
      }
    ],
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "fish-audio/s2.1-pro-free:free",
    "input": [
      "text"
    ],
    "kind": "audio",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "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": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "เก็บ X-Client-Request-ID ที่ส่งกลับมาไว้เพื่อกระทบยอด อ่านเฉพาะค่า task_id/asset_id ที่ส่งกลับมาจริง หรืออ่านจากคลังสื่อที่เป็นของตนเอง ห้ามสร้าง URL ของงานจาก ID การดำเนินการ และห้ามส่งคำขอสร้างซ้ำเด็ดขาด"
            },
            "outputs": {
              "all_results": "เก็บการตอบกลับและส่วนหัวให้ครบถ้วน เก็บผลลัพธ์จริงทุกรายการ ตัวระบุที่ส่งกลับมาแต่เดิม และฟิลด์ข้อมูลการใช้งานทั้งหมด กู้คืนการดำเนินการเดิมโดยไม่ส่งคำขอสร้างซ้ำ",
              "family": "audio",
              "formats": [
                "mp3",
                "pcm"
              ],
              "result": "เสียงไบนารีทั้งหมดหรือการตอบกลับ audio_url เดิม ส่วนหัว และแอสเซ็ตทุกชิ้นที่เป็นของคุณ"
            },
            "parameters": [
              {
                "enum": [
                  "fish-audio/s2.1-pro-free:free"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "b347db033a6549378b48d00acb0d06cd"
                ],
                "enum_known": true,
                "min_length": 1,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "fish-audio/s2.1-pro-free:free"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Documented speech data policy and provider-specific options.",
                  "properties": {
                    "data_collection": {
                      "enum": [
                        "allow",
                        "deny",
                        null
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "options": {
                      "type": "object"
                    },
                    "zdr": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "enum": [
                    "b347db033a6549378b48d00acb0d06cd"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "fish-audio/s2.1-pro-free:free",
                "response_format": "mp3",
                "voice": "b347db033a6549378b48d00acb0d06cd"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "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 ที่ส่งกลับมาจริง หรือระเบียนในคลังสื่อ",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "billing_quantity": "one request"
            },
            "label": "Per request",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "per_request",
                "label": "per request",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "public_unit_label": "per request",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "per_request"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_TEXT:?Set the actual documented input value}\"\nexport AILOOT_INPUT_TEXT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/s2.1-pro-free:free', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\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 response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "เสียงพูด",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": 0
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "billing_quantity": "one request"
            },
            "label": "Per request",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "per_request",
                "label": "per request",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "public_unit_label": "per request",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "per_request"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s2.1-pro-free:free",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "per_request",
            "label": "per request",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "public_unit_label": "per request",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "per_request"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "fish-audio/s2.1-pro-free:free",
        "request_model_id": "fish-audio/s2.1-pro-free:free",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: S2.1 Pro Free (free)",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "S2.1 Pro Free เป็นรุ่นเพื่อการพัฒนาของโมเดลเสียงพูด S2.1 จาก Fish Audio สำหรับเสียงบรรยาย เสียงที่กำกับการพูด และบทสนทนาหลายผู้พูด ใช้ความสามารถสังเคราะห์เสียงร่วมกับโมเดลหลักสำหรับการทดสอบและสร้างต้นแบบ"
  },
  "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": "S2.1 Pro Free เป็นรุ่นเพื่อการพัฒนาของโมเดลเสียงพูด S2.1 จาก Fish Audio สำหรับเสียงบรรยาย เสียงที่กำกับการพูด และบทสนทนาหลายผู้พูด ใช้ความสามารถสังเคราะห์เสียงร่วมกับโมเดลหลักสำหรับการทดสอบและสร้างต้นแบบ",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "8bf08b9244775657709da84d3213889629d9d9cee9f6d5d4e59c9925be8730d6",
    "renderer_sha256": "890edb706fafafdd4f598bb324acf65fada58918b0911b97eb80e68be2ef65d9"
  },
  "sourceRevision": "e61d790bdf55317af5cb51a65ef623f14af11035758d23d4a782230e11afb66e"
}
