{
  "aboutHtml": "<p>S2 Pro เป็นโมเดลแปลงข้อความเป็นเสียงพูดเจเนอเรชันสองของ Fish Audio สำหรับเสียงบรรยายที่ถ่ายทอดอารมณ์ บทสนทนาตัวละคร และเสียงตอบสนทนา แปลงบทเขียนเป็นเสียงและรองรับคำกำกับภาษาธรรมชาติระดับคำหรือวลี เจเนอเรชัน S1 ก่อนหน้าใช้คำกำกับในวงเล็บกลม ส่วน S2 Pro ใช้วงเล็บเหลี่ยมโดยตรงและรองรับหลายผู้พูดในคำขอสังเคราะห์เดียว ผู้ผลิตเผยแพร่ค่าน้ำหนัก S2 Pro และโค้ดปรับแต่งโมเดลสำหรับงานปรับเฉพาะแยกต่างหาก คำขอเสียงทั่วไปใช้โมเดลที่เลือก ไม่ใช่ฝึกโมเดลใหม่</p><p>เขียนเนื้อหาที่จะพูดก่อน แล้ววางคำกำกับวิธีพูดทันทีก่อนคำหรือวลีที่จะได้รับผล คำกำกับอาจบรรยายการกระซิบ ปฏิกิริยา การหยุด การเปลี่ยนอารมณ์ หรือรูปแบบการพูดอย่างเปิดกว้าง สำหรับคำอธิบายสินค้าสั้น ให้ประโยคข้อเท็จจริงชัดเจนและเน้นเฉพาะจุดที่ผู้ฟังควรสังเกตความแตกต่าง สำหรับบทตัวละคร ให้บรรยายการเปลี่ยนอารมณ์ตรงจังหวะที่เกิด แทนการกำหนดอารมณ์เดียวตลอดข้อความ</p><p>แท็กในวงเล็บเหลี่ยมเป็นคำบรรยายแบบเปิด ไม่ใช่เมนูจำกัด ตัวอย่างได้แก่ [whispering], [sigh], [long pause] และวลีอย่าง [speaking slowly, almost hesitant] แท็กอยู่กลางประโยคได้และส่งผลต่อคำพูดถัดไป แท็กบรรยายต้องมีข้อความจริงตามหลัง คำสั่งที่อยู่โดด ๆ อาจให้ผลคาดเดาไม่ได้ เริ่มจากคำกำกับที่มีประโยชน์หนึ่งหรือสองรายการก่อนเพิ่มหลายชั้น เพราะแท็กที่ขัดกันอาจบดบังวิธีพูดที่ตั้งใจ เสียงอ้างอิงต่างกันอาจตอบสนองต่อคำกำกับเดียวกันด้วยความเข้มต่างกัน</p><p>ข้อมูลเผยแพร่ S2 ระบุประมาณ 80 ภาษา และให้ตัวอย่างคำกำกับวิธีพูดในภาษาเดียวกับบท เตรียมถ้อยคำในภาษาที่ต้องพูดและรักษาชื่อ หน่วย กับตัวย่อที่ต้องอ่านแบบเฉพาะ เสียงบรรยายหลายภาษาสามารถรักษาเสียงที่ตั้งใจขณะเปลี่ยนภาษาบท แต่ชิ้นงานสุดท้ายยังต้องฟังตรวจการออกเสียงและความต่อเนื่อง การสังเคราะห์ทำให้เนื้อหาที่ส่งเป็นเสียงพูด ไม่ได้ตัดสินว่าแอปพลิเคชันควรให้ข้อมูลใด</p><p>สำหรับผู้พูดคนเดียว เลือกรหัสเสียงที่บันทึกไว้หรือส่งเสียงอ้างอิงพร้อมบทถอดเสียงที่ตรงกัน ผู้ผลิตแนะนำตัวอย่างสะอาดยาว 10–30 วินาทีสำหรับกำหนดเสียงทันที สำหรับบทสนทนา ใช้เครื่องหมายผู้พูด เช่น &lt;|speaker:0|&gt; และ &lt;|speaker:1|&gt; พร้อมรายการรหัสเสียงตามลำดับหรือกลุ่มอ้างอิงแยกสำหรับแต่ละคน หมายเลขเลือกเสียงรายการที่ตรงกัน รักษาลำดับไว้ขณะสนทนาต่อ คำกำกับการพูดด้วยภาษาธรรมชาติกับการเลือกผู้พูดมีบทบาทต่างกันในบท</p><p>ผลลัพธ์เสียงเป็น MP3, WAV, PCM ดิบ หรือ Opus ได้ MP3 มีค่าเริ่มต้น 128 kbps และมีตัวเลือก 64 หรือ 192 kbps ส่วน Opus ใช้ 48 kHz ขณะที่ WAV และ PCM รองรับตัวเลือกอัตราสุ่มตามเอกสารเป็นโมโน 16 บิต เลือกรูปแบบตามปลายทางจริง เช่น ไฟล์เก็บสำหรับเสียงบรรยาย หรือชิ้นเสียงที่เหมาะสำหรับเล่น เวิร์กโฟลว์เสียงผู้ผลิตยังอธิบายการสตรีมข้อความสดเมื่อบททยอยมาถึง ผลลัพธ์ที่สร้างควรผูกกับบทเต็มและเสียงที่เลือกเสมอ</p><p>ปรับความเร็วได้ระหว่าง 0.5 ถึง 2.0 พร้อมตัวควบคุมระดับเสียงและการปรับความดังผลลัพธ์ให้เป็นมาตรฐาน การปรับข้อความช่วยให้อ่านตัวเลขอังกฤษและจีนได้ดีขึ้น การประมวลผลแบ่งส่วนในช่วง 100–300 และมีงบโทเคนเสียงต่อส่วน จึงไม่ควรอ่านค่าพวกนี้เป็นความยาวสูงสุดตายตัวของเสียงบรรยายทั้งเรื่อง การอิงส่วนก่อนหน้าช่วยส่งบริบทเสียงไปยังช่วงถัดไป ตัวควบคุมการสุ่ม เช่น temperature และ top-p มีผลต่อความหลากหลาย แม้เป็นบรรทัดที่กำกับอย่างตั้งใจ ก็ยังต้องมีข้อความกับบริบทพอจะถ่ายทอดเสียงที่ต้องการ</p><p>บรีฟผลิตงานที่มีประโยชน์แยกเสียงบรรยาย บทสนทนา และคำกำกับวิธีพูด แล้วระบุเสียงกับรูปแบบชิ้นงาน ฟังตรวจคำตกหล่น เสียงซ้ำ การอ่านตัวเลข การเปลี่ยนผู้พูด และจังหวะปฏิกิริยา แก้บรรทัดหรือเสียงอ้างอิงที่ทำให้ไม่ตรง แทนการสมมติว่าเพิ่มแท็กจะทำให้ทุกช่วงดีขึ้น S2 Pro ยังคงเป็นโมเดล S2 เจเนอเรชันก่อนหน้าที่แยกต่างหาก ส่วน S2.1 Pro เป็นรุ่นหลังที่มีการปรับปรุงและพฤติกรรมการตั้งค่าเฉพาะโมเดล</p>",
  "aboutText": "S2 Pro เป็นโมเดลแปลงข้อความเป็นเสียงพูดเจเนอเรชันสองของ Fish Audio สำหรับเสียงบรรยายที่ถ่ายทอดอารมณ์ บทสนทนาตัวละคร และเสียงตอบสนทนา แปลงบทเขียนเป็นเสียงและรองรับคำกำกับภาษาธรรมชาติระดับคำหรือวลี เจเนอเรชัน S1 ก่อนหน้าใช้คำกำกับในวงเล็บกลม ส่วน S2 Pro ใช้วงเล็บเหลี่ยมโดยตรงและรองรับหลายผู้พูดในคำขอสังเคราะห์เดียว ผู้ผลิตเผยแพร่ค่าน้ำหนัก S2 Pro และโค้ดปรับแต่งโมเดลสำหรับงานปรับเฉพาะแยกต่างหาก คำขอเสียงทั่วไปใช้โมเดลที่เลือก ไม่ใช่ฝึกโมเดลใหม่\n\nเขียนเนื้อหาที่จะพูดก่อน แล้ววางคำกำกับวิธีพูดทันทีก่อนคำหรือวลีที่จะได้รับผล คำกำกับอาจบรรยายการกระซิบ ปฏิกิริยา การหยุด การเปลี่ยนอารมณ์ หรือรูปแบบการพูดอย่างเปิดกว้าง สำหรับคำอธิบายสินค้าสั้น ให้ประโยคข้อเท็จจริงชัดเจนและเน้นเฉพาะจุดที่ผู้ฟังควรสังเกตความแตกต่าง สำหรับบทตัวละคร ให้บรรยายการเปลี่ยนอารมณ์ตรงจังหวะที่เกิด แทนการกำหนดอารมณ์เดียวตลอดข้อความ\n\nแท็กในวงเล็บเหลี่ยมเป็นคำบรรยายแบบเปิด ไม่ใช่เมนูจำกัด ตัวอย่างได้แก่ [whispering], [sigh], [long pause] และวลีอย่าง [speaking slowly, almost hesitant] แท็กอยู่กลางประโยคได้และส่งผลต่อคำพูดถัดไป แท็กบรรยายต้องมีข้อความจริงตามหลัง คำสั่งที่อยู่โดด ๆ อาจให้ผลคาดเดาไม่ได้ เริ่มจากคำกำกับที่มีประโยชน์หนึ่งหรือสองรายการก่อนเพิ่มหลายชั้น เพราะแท็กที่ขัดกันอาจบดบังวิธีพูดที่ตั้งใจ เสียงอ้างอิงต่างกันอาจตอบสนองต่อคำกำกับเดียวกันด้วยความเข้มต่างกัน\n\nข้อมูลเผยแพร่ S2 ระบุประมาณ 80 ภาษา และให้ตัวอย่างคำกำกับวิธีพูดในภาษาเดียวกับบท เตรียมถ้อยคำในภาษาที่ต้องพูดและรักษาชื่อ หน่วย กับตัวย่อที่ต้องอ่านแบบเฉพาะ เสียงบรรยายหลายภาษาสามารถรักษาเสียงที่ตั้งใจขณะเปลี่ยนภาษาบท แต่ชิ้นงานสุดท้ายยังต้องฟังตรวจการออกเสียงและความต่อเนื่อง การสังเคราะห์ทำให้เนื้อหาที่ส่งเป็นเสียงพูด ไม่ได้ตัดสินว่าแอปพลิเคชันควรให้ข้อมูลใด\n\nสำหรับผู้พูดคนเดียว เลือกรหัสเสียงที่บันทึกไว้หรือส่งเสียงอ้างอิงพร้อมบทถอดเสียงที่ตรงกัน ผู้ผลิตแนะนำตัวอย่างสะอาดยาว 10–30 วินาทีสำหรับกำหนดเสียงทันที สำหรับบทสนทนา ใช้เครื่องหมายผู้พูด เช่น <|speaker:0|> และ <|speaker:1|> พร้อมรายการรหัสเสียงตามลำดับหรือกลุ่มอ้างอิงแยกสำหรับแต่ละคน หมายเลขเลือกเสียงรายการที่ตรงกัน รักษาลำดับไว้ขณะสนทนาต่อ คำกำกับการพูดด้วยภาษาธรรมชาติกับการเลือกผู้พูดมีบทบาทต่างกันในบท\n\nผลลัพธ์เสียงเป็น MP3, WAV, PCM ดิบ หรือ Opus ได้ MP3 มีค่าเริ่มต้น 128 kbps และมีตัวเลือก 64 หรือ 192 kbps ส่วน Opus ใช้ 48 kHz ขณะที่ WAV และ PCM รองรับตัวเลือกอัตราสุ่มตามเอกสารเป็นโมโน 16 บิต เลือกรูปแบบตามปลายทางจริง เช่น ไฟล์เก็บสำหรับเสียงบรรยาย หรือชิ้นเสียงที่เหมาะสำหรับเล่น เวิร์กโฟลว์เสียงผู้ผลิตยังอธิบายการสตรีมข้อความสดเมื่อบททยอยมาถึง ผลลัพธ์ที่สร้างควรผูกกับบทเต็มและเสียงที่เลือกเสมอ\n\nปรับความเร็วได้ระหว่าง 0.5 ถึง 2.0 พร้อมตัวควบคุมระดับเสียงและการปรับความดังผลลัพธ์ให้เป็นมาตรฐาน การปรับข้อความช่วยให้อ่านตัวเลขอังกฤษและจีนได้ดีขึ้น การประมวลผลแบ่งส่วนในช่วง 100–300 และมีงบโทเคนเสียงต่อส่วน จึงไม่ควรอ่านค่าพวกนี้เป็นความยาวสูงสุดตายตัวของเสียงบรรยายทั้งเรื่อง การอิงส่วนก่อนหน้าช่วยส่งบริบทเสียงไปยังช่วงถัดไป ตัวควบคุมการสุ่ม เช่น temperature และ top-p มีผลต่อความหลากหลาย แม้เป็นบรรทัดที่กำกับอย่างตั้งใจ ก็ยังต้องมีข้อความกับบริบทพอจะถ่ายทอดเสียงที่ต้องการ\n\nบรีฟผลิตงานที่มีประโยชน์แยกเสียงบรรยาย บทสนทนา และคำกำกับวิธีพูด แล้วระบุเสียงกับรูปแบบชิ้นงาน ฟังตรวจคำตกหล่น เสียงซ้ำ การอ่านตัวเลข การเปลี่ยนผู้พูด และจังหวะปฏิกิริยา แก้บรรทัดหรือเสียงอ้างอิงที่ทำให้ไม่ตรง แทนการสมมติว่าเพิ่มแท็กจะทำให้ทุกช่วงดีขึ้น S2 Pro ยังคงเป็นโมเดล S2 เจเนอเรชันก่อนหน้าที่แยกต่างหาก ส่วน S2.1 Pro เป็นรุ่นหลังที่มีการปรับปรุงและพฤติกรรมการตั้งค่าเฉพาะโมเดล",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "a1aabb2221aa4a37da90745b40cdae429535c6234806aea82229e419928d4d1c",
    "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 Pro</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-pro</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-pro\">การสังเคราะห์เสียงพูด</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\">Fish Audio S2 Pro สร้างเสียงพูดหลายภาษาที่ถ่ายทอดอารมณ์ พร้อมคำกำกับระดับคำและบทสนทนาหลายผู้พูดโดยตรง คำสั่งในวงเล็บเหลี่ยมควบคุมวิธีพูดในบท ขณะที่เสียงอ้างอิงระบุผู้พูดและการตั้งค่าผลลัพธ์กำหนดชิ้นงานเสียง</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 Pro เป็นโมเดลแปลงข้อความเป็นเสียงพูดเจเนอเรชันสองของ Fish Audio สำหรับเสียงบรรยายที่ถ่ายทอดอารมณ์ บทสนทนาตัวละคร และเสียงตอบสนทนา แปลงบทเขียนเป็นเสียงและรองรับคำกำกับภาษาธรรมชาติระดับคำหรือวลี เจเนอเรชัน S1 ก่อนหน้าใช้คำกำกับในวงเล็บกลม ส่วน S2 Pro ใช้วงเล็บเหลี่ยมโดยตรงและรองรับหลายผู้พูดในคำขอสังเคราะห์เดียว ผู้ผลิตเผยแพร่ค่าน้ำหนัก S2 Pro และโค้ดปรับแต่งโมเดลสำหรับงานปรับเฉพาะแยกต่างหาก คำขอเสียงทั่วไปใช้โมเดลที่เลือก ไม่ใช่ฝึกโมเดลใหม่</p><p>เขียนเนื้อหาที่จะพูดก่อน แล้ววางคำกำกับวิธีพูดทันทีก่อนคำหรือวลีที่จะได้รับผล คำกำกับอาจบรรยายการกระซิบ ปฏิกิริยา การหยุด การเปลี่ยนอารมณ์ หรือรูปแบบการพูดอย่างเปิดกว้าง สำหรับคำอธิบายสินค้าสั้น ให้ประโยคข้อเท็จจริงชัดเจนและเน้นเฉพาะจุดที่ผู้ฟังควรสังเกตความแตกต่าง สำหรับบทตัวละคร ให้บรรยายการเปลี่ยนอารมณ์ตรงจังหวะที่เกิด แทนการกำหนดอารมณ์เดียวตลอดข้อความ</p><p>แท็กในวงเล็บเหลี่ยมเป็นคำบรรยายแบบเปิด ไม่ใช่เมนูจำกัด ตัวอย่างได้แก่ [whispering], [sigh], [long pause] และวลีอย่าง [speaking slowly, almost hesitant] แท็กอยู่กลางประโยคได้และส่งผลต่อคำพูดถัดไป แท็กบรรยายต้องมีข้อความจริงตามหลัง คำสั่งที่อยู่โดด ๆ อาจให้ผลคาดเดาไม่ได้ เริ่มจากคำกำกับที่มีประโยชน์หนึ่งหรือสองรายการก่อนเพิ่มหลายชั้น เพราะแท็กที่ขัดกันอาจบดบังวิธีพูดที่ตั้งใจ เสียงอ้างอิงต่างกันอาจตอบสนองต่อคำกำกับเดียวกันด้วยความเข้มต่างกัน</p><p>ข้อมูลเผยแพร่ S2 ระบุประมาณ 80 ภาษา และให้ตัวอย่างคำกำกับวิธีพูดในภาษาเดียวกับบท เตรียมถ้อยคำในภาษาที่ต้องพูดและรักษาชื่อ หน่วย กับตัวย่อที่ต้องอ่านแบบเฉพาะ เสียงบรรยายหลายภาษาสามารถรักษาเสียงที่ตั้งใจขณะเปลี่ยนภาษาบท แต่ชิ้นงานสุดท้ายยังต้องฟังตรวจการออกเสียงและความต่อเนื่อง การสังเคราะห์ทำให้เนื้อหาที่ส่งเป็นเสียงพูด ไม่ได้ตัดสินว่าแอปพลิเคชันควรให้ข้อมูลใด</p><p>สำหรับผู้พูดคนเดียว เลือกรหัสเสียงที่บันทึกไว้หรือส่งเสียงอ้างอิงพร้อมบทถอดเสียงที่ตรงกัน ผู้ผลิตแนะนำตัวอย่างสะอาดยาว 10–30 วินาทีสำหรับกำหนดเสียงทันที สำหรับบทสนทนา ใช้เครื่องหมายผู้พูด เช่น &lt;|speaker:0|&gt; และ &lt;|speaker:1|&gt; พร้อมรายการรหัสเสียงตามลำดับหรือกลุ่มอ้างอิงแยกสำหรับแต่ละคน หมายเลขเลือกเสียงรายการที่ตรงกัน รักษาลำดับไว้ขณะสนทนาต่อ คำกำกับการพูดด้วยภาษาธรรมชาติกับการเลือกผู้พูดมีบทบาทต่างกันในบท</p><p>ผลลัพธ์เสียงเป็น MP3, WAV, PCM ดิบ หรือ Opus ได้ MP3 มีค่าเริ่มต้น 128 kbps และมีตัวเลือก 64 หรือ 192 kbps ส่วน Opus ใช้ 48 kHz ขณะที่ WAV และ PCM รองรับตัวเลือกอัตราสุ่มตามเอกสารเป็นโมโน 16 บิต เลือกรูปแบบตามปลายทางจริง เช่น ไฟล์เก็บสำหรับเสียงบรรยาย หรือชิ้นเสียงที่เหมาะสำหรับเล่น เวิร์กโฟลว์เสียงผู้ผลิตยังอธิบายการสตรีมข้อความสดเมื่อบททยอยมาถึง ผลลัพธ์ที่สร้างควรผูกกับบทเต็มและเสียงที่เลือกเสมอ</p><p>ปรับความเร็วได้ระหว่าง 0.5 ถึง 2.0 พร้อมตัวควบคุมระดับเสียงและการปรับความดังผลลัพธ์ให้เป็นมาตรฐาน การปรับข้อความช่วยให้อ่านตัวเลขอังกฤษและจีนได้ดีขึ้น การประมวลผลแบ่งส่วนในช่วง 100–300 และมีงบโทเคนเสียงต่อส่วน จึงไม่ควรอ่านค่าพวกนี้เป็นความยาวสูงสุดตายตัวของเสียงบรรยายทั้งเรื่อง การอิงส่วนก่อนหน้าช่วยส่งบริบทเสียงไปยังช่วงถัดไป ตัวควบคุมการสุ่ม เช่น temperature และ top-p มีผลต่อความหลากหลาย แม้เป็นบรรทัดที่กำกับอย่างตั้งใจ ก็ยังต้องมีข้อความกับบริบทพอจะถ่ายทอดเสียงที่ต้องการ</p><p>บรีฟผลิตงานที่มีประโยชน์แยกเสียงบรรยาย บทสนทนา และคำกำกับวิธีพูด แล้วระบุเสียงกับรูปแบบชิ้นงาน ฟังตรวจคำตกหล่น เสียงซ้ำ การอ่านตัวเลข การเปลี่ยนผู้พูด และจังหวะปฏิกิริยา แก้บรรทัดหรือเสียงอ้างอิงที่ทำให้ไม่ตรง แทนการสมมติว่าเพิ่มแท็กจะทำให้ทุกช่วงดีขึ้น S2 Pro ยังคงเป็นโมเดล S2 เจเนอเรชันก่อนหน้าที่แยกต่างหาก ส่วน S2.1 Pro เป็นรุ่นหลังที่มีการปรับปรุงและพฤติกรรมการตั้งค่าเฉพาะโมเดล</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-pro</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>ไบต์ UTF-8 ขาเข้า</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>—</td><td data-cell-label=\"หน่วยคิดค่าบริการ\"><span class=\"card-cell-label\">หน่วยคิดค่าบริการ</span>ต่อไบต์ UTF-8 ของอินพุต</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาเข้า · ไบต์ UTF-8 ขาเข้า</span> <b>$0.00003</b> <span class=\"price-unit\">ต่อไบต์ UTF-8 ของอินพุต</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-1355-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1355-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-1355-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1355-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-pro&#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-1356-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1356-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-1356-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1356-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-pro&amp;route=Ultra&amp;caller=fish-audio%2Fs2-pro&amp;fmt=speech\"><code>fish-audio/s2-pro</code></a></span></p><h4>ชื่อพาธเมธอดอื่น</h4><p class=\"note-s\">ใช้พาธเมธอดที่แสดงด้านบน</p><h4>ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล</h4><p class=\"note-s\"><a href=\"#m=fish-audio%2Fs2-pro&amp;route=Ultra&amp;caller=fish-audio%2Fs2-pro&amp;fmt=speech\"><code>fish-audio/s2-pro</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/s2-pro",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "fish-audio/s2-pro",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|fish-audio%2Fs2-pro",
      "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-pro"
                ],
                "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-pro"
                  ],
                  "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-pro",
                "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": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "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-pro', '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": null,
          "unit_prices": {
            "audio_input_utf8_byte": 3e-05
          }
        },
        "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": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s2-pro",
        "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.00003",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "input UTF-8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per input UTF-8 byte",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ]
      }
    }
  ],
  "model_id": "fish-audio/s2-pro",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "07b936ec2e5cb495923d479056f882a5292f3b6ea0b997c2b57b6ba6e7af152a",
    "input_html_sha256": "b34087e98735ee81183b13ad0b3d00528d3b96c4aabd270e72c8c30fe0e59c9a",
    "private_audit_sha256": "a8cd93c74fb98df3e14a1b07a883192fc25f959c101384310d88d40dab03fadb",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/th/fish-audio-s2-pro/",
    "description": "Fish Audio S2 Pro สร้างเสียงพูดหลายภาษาที่ถ่ายทอดอารมณ์ พร้อมคำกำกับระดับคำและบทสนทนาหลายผู้พูดโดยตรง คำสั่งในวงเล็บเหลี่ยมควบคุมวิธีพูดในบท ขณะที่เสียงอ้างอิงระบุผู้พูดและการตั้งค่าผลลัพธ์กำหนดชิ้นงานเสียง",
    "locale": "th",
    "md_url": "https://ailoot.ai/models/th/fish-audio-s2-pro/index.md",
    "title": "Fish Audio: S2 Pro — Ailoot",
    "url": "https://ailoot.ai/models/th/fish-audio-s2-pro/"
  },
  "rawModel": {
    "about": "S2 Pro เป็นโมเดลแปลงข้อความเป็นเสียงพูดเจเนอเรชันสองของ Fish Audio สำหรับเสียงบรรยายที่ถ่ายทอดอารมณ์ บทสนทนาตัวละคร และเสียงตอบสนทนา แปลงบทเขียนเป็นเสียงและรองรับคำกำกับภาษาธรรมชาติระดับคำหรือวลี เจเนอเรชัน S1 ก่อนหน้าใช้คำกำกับในวงเล็บกลม ส่วน S2 Pro ใช้วงเล็บเหลี่ยมโดยตรงและรองรับหลายผู้พูดในคำขอสังเคราะห์เดียว ผู้ผลิตเผยแพร่ค่าน้ำหนัก S2 Pro และโค้ดปรับแต่งโมเดลสำหรับงานปรับเฉพาะแยกต่างหาก คำขอเสียงทั่วไปใช้โมเดลที่เลือก ไม่ใช่ฝึกโมเดลใหม่\n\nเขียนเนื้อหาที่จะพูดก่อน แล้ววางคำกำกับวิธีพูดทันทีก่อนคำหรือวลีที่จะได้รับผล คำกำกับอาจบรรยายการกระซิบ ปฏิกิริยา การหยุด การเปลี่ยนอารมณ์ หรือรูปแบบการพูดอย่างเปิดกว้าง สำหรับคำอธิบายสินค้าสั้น ให้ประโยคข้อเท็จจริงชัดเจนและเน้นเฉพาะจุดที่ผู้ฟังควรสังเกตความแตกต่าง สำหรับบทตัวละคร ให้บรรยายการเปลี่ยนอารมณ์ตรงจังหวะที่เกิด แทนการกำหนดอารมณ์เดียวตลอดข้อความ\n\nแท็กในวงเล็บเหลี่ยมเป็นคำบรรยายแบบเปิด ไม่ใช่เมนูจำกัด ตัวอย่างได้แก่ [whispering], [sigh], [long pause] และวลีอย่าง [speaking slowly, almost hesitant] แท็กอยู่กลางประโยคได้และส่งผลต่อคำพูดถัดไป แท็กบรรยายต้องมีข้อความจริงตามหลัง คำสั่งที่อยู่โดด ๆ อาจให้ผลคาดเดาไม่ได้ เริ่มจากคำกำกับที่มีประโยชน์หนึ่งหรือสองรายการก่อนเพิ่มหลายชั้น เพราะแท็กที่ขัดกันอาจบดบังวิธีพูดที่ตั้งใจ เสียงอ้างอิงต่างกันอาจตอบสนองต่อคำกำกับเดียวกันด้วยความเข้มต่างกัน\n\nข้อมูลเผยแพร่ S2 ระบุประมาณ 80 ภาษา และให้ตัวอย่างคำกำกับวิธีพูดในภาษาเดียวกับบท เตรียมถ้อยคำในภาษาที่ต้องพูดและรักษาชื่อ หน่วย กับตัวย่อที่ต้องอ่านแบบเฉพาะ เสียงบรรยายหลายภาษาสามารถรักษาเสียงที่ตั้งใจขณะเปลี่ยนภาษาบท แต่ชิ้นงานสุดท้ายยังต้องฟังตรวจการออกเสียงและความต่อเนื่อง การสังเคราะห์ทำให้เนื้อหาที่ส่งเป็นเสียงพูด ไม่ได้ตัดสินว่าแอปพลิเคชันควรให้ข้อมูลใด\n\nสำหรับผู้พูดคนเดียว เลือกรหัสเสียงที่บันทึกไว้หรือส่งเสียงอ้างอิงพร้อมบทถอดเสียงที่ตรงกัน ผู้ผลิตแนะนำตัวอย่างสะอาดยาว 10–30 วินาทีสำหรับกำหนดเสียงทันที สำหรับบทสนทนา ใช้เครื่องหมายผู้พูด เช่น <|speaker:0|> และ <|speaker:1|> พร้อมรายการรหัสเสียงตามลำดับหรือกลุ่มอ้างอิงแยกสำหรับแต่ละคน หมายเลขเลือกเสียงรายการที่ตรงกัน รักษาลำดับไว้ขณะสนทนาต่อ คำกำกับการพูดด้วยภาษาธรรมชาติกับการเลือกผู้พูดมีบทบาทต่างกันในบท\n\nผลลัพธ์เสียงเป็น MP3, WAV, PCM ดิบ หรือ Opus ได้ MP3 มีค่าเริ่มต้น 128 kbps และมีตัวเลือก 64 หรือ 192 kbps ส่วน Opus ใช้ 48 kHz ขณะที่ WAV และ PCM รองรับตัวเลือกอัตราสุ่มตามเอกสารเป็นโมโน 16 บิต เลือกรูปแบบตามปลายทางจริง เช่น ไฟล์เก็บสำหรับเสียงบรรยาย หรือชิ้นเสียงที่เหมาะสำหรับเล่น เวิร์กโฟลว์เสียงผู้ผลิตยังอธิบายการสตรีมข้อความสดเมื่อบททยอยมาถึง ผลลัพธ์ที่สร้างควรผูกกับบทเต็มและเสียงที่เลือกเสมอ\n\nปรับความเร็วได้ระหว่าง 0.5 ถึง 2.0 พร้อมตัวควบคุมระดับเสียงและการปรับความดังผลลัพธ์ให้เป็นมาตรฐาน การปรับข้อความช่วยให้อ่านตัวเลขอังกฤษและจีนได้ดีขึ้น การประมวลผลแบ่งส่วนในช่วง 100–300 และมีงบโทเคนเสียงต่อส่วน จึงไม่ควรอ่านค่าพวกนี้เป็นความยาวสูงสุดตายตัวของเสียงบรรยายทั้งเรื่อง การอิงส่วนก่อนหน้าช่วยส่งบริบทเสียงไปยังช่วงถัดไป ตัวควบคุมการสุ่ม เช่น temperature และ top-p มีผลต่อความหลากหลาย แม้เป็นบรรทัดที่กำกับอย่างตั้งใจ ก็ยังต้องมีข้อความกับบริบทพอจะถ่ายทอดเสียงที่ต้องการ\n\nบรีฟผลิตงานที่มีประโยชน์แยกเสียงบรรยาย บทสนทนา และคำกำกับวิธีพูด แล้วระบุเสียงกับรูปแบบชิ้นงาน ฟังตรวจคำตกหล่น เสียงซ้ำ การอ่านตัวเลข การเปลี่ยนผู้พูด และจังหวะปฏิกิริยา แก้บรรทัดหรือเสียงอ้างอิงที่ทำให้ไม่ตรง แทนการสมมติว่าเพิ่มแท็กจะทำให้ทุกช่วงดีขึ้น S2 Pro ยังคงเป็นโมเดล S2 เจเนอเรชันก่อนหน้าที่แยกต่างหาก ส่วน S2.1 Pro เป็นรุ่นหลังที่มีการปรับปรุงและพฤติกรรมการตั้งค่าเฉพาะโมเดล",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "input UTF-8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per input UTF-8 byte",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ],
        "summary": "ดูราคาตามการกำหนดค่าแบบครบถ้วนในรายละเอียด"
      }
    ],
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "fish-audio/s2-pro",
    "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-pro"
                ],
                "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-pro"
                  ],
                  "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-pro",
                "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": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "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-pro', '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": null,
          "unit_prices": {
            "audio_input_utf8_byte": 3e-05
          }
        },
        "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": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s2-pro",
        "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.00003",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "input UTF-8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per input UTF-8 byte",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "fish-audio/s2-pro",
        "request_model_id": "fish-audio/s2-pro",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: S2 Pro",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "Fish Audio S2 Pro สร้างเสียงพูดหลายภาษาที่ถ่ายทอดอารมณ์ พร้อมคำกำกับระดับคำและบทสนทนาหลายผู้พูดโดยตรง คำสั่งในวงเล็บเหลี่ยมควบคุมวิธีพูดในบท ขณะที่เสียงอ้างอิงระบุผู้พูดและการตั้งค่าผลลัพธ์กำหนดชิ้นงานเสียง"
  },
  "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": "Fish Audio S2 Pro สร้างเสียงพูดหลายภาษาที่ถ่ายทอดอารมณ์ พร้อมคำกำกับระดับคำและบทสนทนาหลายผู้พูดโดยตรง คำสั่งในวงเล็บเหลี่ยมควบคุมวิธีพูดในบท ขณะที่เสียงอ้างอิงระบุผู้พูดและการตั้งค่าผลลัพธ์กำหนดชิ้นงานเสียง",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "ce3359f708775184cf5e5f827f741315dc98e8aa165777925dbd505378d27728",
    "renderer_sha256": "890edb706fafafdd4f598bb324acf65fada58918b0911b97eb80e68be2ef65d9"
  },
  "sourceRevision": "47bc5dce2cf6128fcfa0e245f7ec4e5349c1954ea3daadc5324fa81ec6ba3313"
}
