ฐานความรู้ ผู้พัฒนา
รูปภาพเสียงและ embeddings
เครื่องกําเนิดไฟฟ้าจากแอปพลิเคชันและบล็อกสร้างสรรค์สําหรับการค้นหา: รูปภาพวิดีโอการพูดการ transkription และ embeddings แต่ละคํานวณต่อการใช้งานจากสมดุลของคุณ
หน้านี้แปลด้วยเครื่องเพื่อความสะดวก ต้นฉบับภาษาอังกฤษเป็นเวอร์ชันที่ใช้
การสร้างภาพ
ทําภาพหนึ่งถึงสี่ภาพจากคําแนะนําและกลับพวกเขาเมื่อทํา มันเป็นชุดเดียวกันของเครื่องกําเนิดไฟฟ้าเช่น ?image ใน app
POST https://nymbot.ai/api/v1/images/generations ต้องใช้คีย์ API หรือ การชําระเงิน Lightning ตามคําขอ.
ids มาจาก GET /api/v1/models?type=imageเครื่องกําเนิดไฟฟ้ามาตรฐาน
@cf/black-forest-labs/flux-1-schnell, ค่าธรรมเนียม 5 เครดิตมาตรฐาน (50 sats) รูปภาพ แต่ละเครื่องกําเนิดไฟฟ้าอื่น ๆ ใช้เครดิต Pro ในราคาของตัวเองพร้อมกับค่าธรรมเนียมและค่าธรรมเนียมตามปกติ แอป. n ค่าใช้จ่ายรูปภาพ
n หลายครั้ง ฟิลด์ที่เครื่องกําเนิดไฟฟ้าไม่ใช้จะถูกลดลงแทนจะถูกปฏิเสธ เครื่องกําเนิดไฟฟ้ามาตรฐานใช้ตัวอักษรเท่านั้น
| พื้นที่ | ชนิด | ต้องการ | คําอธิบาย |
|---|---|---|---|
model | สายรัด | ใช่ | เครื่องกําเนิดไฟฟ้า ID เช่น nano-banana. |
prompt | สายรัด | ใช่ | สิ่งที่จะวาด การใช้เฉพาะ 2000 ตัวอักษรแรก |
n | อินเทอร์ | ไม่ | 1 ถึง 4. หลักฐาน 1 นอกจากนี้ยังยอมรับเป็น num_images. |
size | สายรัด | ไม่ | อัตราส่วนเช่น "16:9", หรือขนาด OpenAI เช่น "1792x1024"ซึ่งจะกลายเป็นที่ใกล้ที่สุดของ 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 และ 4:5. "auto" ให้มันไปยังเครื่องกําเนิดไฟฟ้า |
aspect_ratio | สายรัด | ไม่ | เช่นเดียวกับ size, และชนะถ้าทั้งสองถูกส่ง |
quality | สายรัด | ไม่ | เครื่องกําเนิดไฟฟ้าเฉพาะเช่น "low", "medium" หรือ "high". |
negative_prompt | สายรัด | ไม่ | สิ่งที่จะออกจาก |
output_format | สายรัด | ไม่ | "png", "jpeg" หรือ "webp". |
response_format | สายรัด | ไม่ | "url" (ความผิดพลาด) หรือ "b64_json". |
image_url | สายรัด | ไม่ | รูปภาพที่จะเริ่มต้นด้วย: a https:// เชื่อมโยงสูงสุด 4,096 ตัวอักษรโดยไม่มีชื่อผู้ใช้หรือรหัสผ่านในนั้นหรือ data:image/…;base64 URL (PNG, JPEG, WebP หรือ GIF ไม่ใช่ SVG) สําหรับเครื่องกําเนิดไฟฟ้าที่มี edit; ต้องการโดยผู้ที่มี requires_image_url. |
resolution ไม่ใช้: แต่ละเครื่องกําเนิดไฟฟ้าทําขนาดของตัวเอง ด้วย url, แต่ละภาพจะถูกอัปโหลดไปยังโฮสต์ Blossom สาธารณะและคุณจะได้รับลิงก์ของมัน (บางเครื่องกําเนิดไฟฟ้าเพียงส่งกลับลิงก์ของตัวเองซึ่งจะถูกส่งต่อ) ทุกคนที่มีลิงก์สามารถเปิดและไม่สามารถถูกลบลงอีกครั้ง ดู สิ่งที่ไฟสามารถเห็นได้ด้วย
b64_json รูปภาพจะกลับมาในคําตอบและไม่เคยอัปโหลด รูปภาพที่ส่งเป็น data: URL ใน image_url ตรวจสอบในลักษณะเดียวกันกับ
เอเดท และอัปโหลดไปยัง Blossom เป็นครั้งแรกเพื่อให้เครื่องกําเนิดไฟฟ้าสามารถเรียกเก็บได้ มันจะถูกลบอีกครั้งหากคําขอไม่สามารถเรียกเก็บเงินได้
ถ้าบางส่วนของ n ภาพล้มเหลวคุณจะได้รับผู้ที่ทํางานจะถูกเรียกเก็บเงินเพียงสําหรับผู้ที่ (รวมถึงผู้ให้บริการใด ๆ ที่เรียกเก็บเงินแม้จะล้มเหลว) และ nymbot.failed หมายถึงจํานวนที่หายไป หากทั้งหมดล้มเหลวคําขอจะกลับ 502.
คําตอบ
{
"created": 1790726400,
"model": "nano-banana",
"cost": 0.2126,
"data": [
{
"url": "https://blossom.example/5c0e4b7d3a91f2e8...c4.png",
"content_type": "image/png"
}
],
"nymbot": { "balance": "pro", "charged_credits": 1.817, "charged_sats": 181.7, "balance_credits": 410.608, "balance_sats": 41060.8 }
}
| สถานะ | เมื่อ |
|---|---|
400 | ไม่รวดเร็ว n ด้านนอก 1 ถึง 4 (invalid_value) ; ขนาดไม่ดี (invalid_size) หรือภาพ (invalid_image, invalid_image_url); รูปแบบที่มีอยู่ แต่ไม่ใช่เครื่องกําเนิดภาพ (invalid_model); ภาพสําหรับเครื่องกําเนิดไฟฟ้าที่ไม่สามารถแก้ไขได้ (edit_unsupported); ไม่มีภาพสําหรับคนที่ต้องการมัน (image_required). |
402 | ความสมดุลไม่สามารถครอบคลุมภาพทุกภาพที่ต้องการ |
404 | ไม่มีรูปแบบที่มีชื่อนี้ (model_not_found). |
502 | เครื่องกําเนิดไฟฟ้าล้มเหลว (upstream_error) ไม่มีอะไรจะถูกเรียกเก็บเงินเว้นแต่ผู้ให้บริการเรียกเก็บเงินสําหรับความพยายามแล้วข้อผิดพลาดจะเกิดขึ้น charged_sats. |
503 | รูปภาพไม่สามารถโฮสต์ได้ในขณะนี้ (media_hosting_unavailable). b64_json ยังคงทํางาน |
cURL
curl https://nymbot.ai/api/v1/images/generations \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana",
"prompt": "A lighthouse at dusk, oil painting",
"size": "16:9"
}'
Python
import os
import requests
res = requests.post(
"https://nymbot.ai/api/v1/images/generations",
headers={"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]},
json={"model": "nano-banana", "prompt": "A lighthouse at dusk, oil painting", "size": "16:9"},
)
res.raise_for_status()
print(res.json()["data"][0]["url"])
JavaScript
const res = await fetch("https://nymbot.ai/api/v1/images/generations", {
method: "POST",
headers: {
"Authorization": "Bearer " + process.env.NYMBOT_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ model: "nano-banana", prompt: "A lighthouse at dusk, oil painting", size: "16:9" }),
});
const body = await res.json();
console.log(body.data[0].url);
การแก้ไขภาพ
เปลี่ยนภาพที่คุณอัปโหลดตามคําแนะนํา นี่คือจุดสิ้นสุดการแก้ไขของ OpenAI ดังนั้น OpenAI SDKs' images.edit ทํางานตามที่มันเป็น. เฉพาะเครื่องกําเนิดไฟฟ้า Pro กับ edit ในรายการรูปแบบยอมรับมัน
POST https://nymbot.ai/api/v1/images/edits ต้องใช้คีย์ API หรือ การชําระเงิน Lightning ตามคําขอร่างกายคือ multipart/form-dataสูงสุด 32 MB
| พื้นที่ | ชนิด | ต้องการ | คําอธิบาย |
|---|---|---|---|
image | ไฟล์ | ใช่ | ภาพที่จะแก้ไข: PNG, JPEG, WebP หรือ GIF, สูงสุด 20 MB นอกจากนี้ยังยอมรับเป็น image[]; เป็นครั้งแรกที่ใช้ |
prompt | สายรัด | ใช่ | สิ่งที่จะเปลี่ยน |
model | สายรัด | ใช่ | เครื่องกําเนิดไฟฟ้าที่มี edit. |
n | อินเทอร์ | ไม่ | 1 ถึง 4 |
sizeaspect_ratioqualitynegative_promptoutput_format | สายรัด | ไม่ | เกี่ยวกับรุ่น |
response_format | สายรัด | ไม่ | "b64_json" (ค่าเริ่มต้นที่นี่) หรือ "url". |
ภาพที่คุณอัปโหลดจะถูกตรวจสอบให้เป็น PNG, JPEG, WebP หรือ GIF ที่สร้างขึ้นอย่างดีส่งเป็นประเภทที่แท้จริงและวางไว้บนโฮสต์ Blossom สาธารณะเนื่องจากเครื่องกําเนิดไฟฟ้าจะรับข้อมูลเข้าด้วยลิงก์ เก็บเป็นสาธารณะ หากการแก้ไขล้มเหลวและไม่มีอะไรชาร์จสําเนาที่โฮสต์จะถูกลบออกอีกครั้ง การตอบสนองมีรูปร่างที่คล้ายคลึงกันกับการสร้าง ราคาคือราคาของเครื่องกําเนิดไฟฟ้าซึ่งสําหรับเครื่องกําเนิดไฟฟ้าบางคนรวมถึงค่าธรรมเนียมสําหรับภาพเข้า
คําตอบ
{
"created": 1790726460,
"model": "nano-banana",
"cost": 0.2126,
"data": [{ "b64_json": "iVBORw0KGgoAAAANSUhEUgAA..." }],
"nymbot": { "balance": "pro", "charged_credits": 1.817, "charged_sats": 181.7, "balance_credits": 408.791, "balance_sats": 40879.1 }
}
| สถานะ | เมื่อ |
|---|---|
400 | ไม่มีภาพหรือ prompt ไฟล์ที่ไม่ได้เป็นภาพ (invalid_image) หรือเครื่องกําเนิดไฟฟ้าที่ไม่สามารถแก้ไขได้ (edit_unsupported). |
413 | ภาพถ่ายมากกว่า 20 MB (file_too_large), หรือคําขอทั้งหมดมากกว่า 32 MB |
503 | ภาพนี้ไม่สามารถโฮสต์ได้ในขณะนี้ (media_hosting_unavailable). |
cURL
curl https://nymbot.ai/api/v1/images/edits \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-F model=nano-banana \
-F [email protected] \
-F prompt="Make it a snowy evening"
Python
import base64, os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
with open("photo.png", "rb") as f:
result = client.images.edit(model="nano-banana", image=f, prompt="Make it a snowy evening")
with open("edited.png", "wb") as out:
out.write(base64.b64decode(result.data[0].b64_json))
JavaScript
import fs from "node:fs";
import { writeFile } from "node:fs/promises";
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const result = await client.images.edit({
model: "nano-banana",
image: fs.createReadStream("photo.png"),
prompt: "Make it a snowy evening",
});
await writeFile("edited.png", Buffer.from(result.data[0].b64_json, "base64"));
วิดีโอ
วิดีโอใช้เวลาไม่กี่นาทีดังนั้นจึงทํางานในพื้นหลัง คุณส่งมันคุณจะได้รับบัตรประจําตัวทันทีและถามเกี่ยวกับบัตรประจําตัวจนกว่าจะเสร็จสมบูรณ์ เครื่องกําเนิดไฟฟ้าวิดีโอแต่ละคนใช้สมดุล Pro
POST https://nymbot.ai/api/v1/videos ต้องใช้คีย์ API หรือ การชําระเงิน Lightning ตามคําขอกลับ 202.
| พื้นที่ | ชนิด | ต้องการ | คําอธิบาย |
|---|---|---|---|
model | สายรัด | ใช่ | เครื่องกําเนิดไฟฟ้าวิดีโอ ID จาก GET /api/v1/models?type=video, เช่น veo. |
prompt | สายรัด | ใช่ | สิ่งที่ควรเกิดขึ้น |
duration | หมายเลขหรือ string | ไม่ | ความยาวในวินาทีมากกว่า 0 และถึง 60 ใช้เฉพาะโดยเครื่องกําเนิดไฟฟ้าที่ช่วยให้คุณเลือกความยาว คนอื่น ๆ ทําความยาวปกติของพวกเขาซึ่งเป็นสิ่งที่ seconds ในคําตอบและราคาต่อไปนี้ |
aspect_ratio | สายรัด | ไม่ | เช่นเดียวกับ "16:9" หรือ "9:16"; ขนาดเช่น "1280x720" เป็นอัตราส่วนที่ใกล้ที่สุด |
resolutionquality | สายรัด | ไม่ | หนึ่งในเครื่องกําเนิดไฟฟ้า resolutions ในรายการรูปแบบเช่น "720p" หรือ "1080p"มันตั้งค่าราคา สิ่งอื่น ๆ จะถูกปฏิเสธด้วย unsupported_resolution. |
image_url | สายรัด | ไม่ | รูปภาพที่จะเริ่มต้นด้วย: a https:// เชื่อมโยงหรือ a data:image/… URL, ซึ่งอัปโหลดไปยังโฮสต์ Blossom สาธารณะครั้งแรก. ต้องใช้โดยเครื่องกําเนิดไฟฟ้าที่มี requires_image_url. |
ราคาคงที่เมื่อคุณส่งจากเครื่องกําเนิดไฟฟ้าความละเอียดและความยาวดังนั้นจึงถูกเรียกเก็บจากสมดุล Pro ของคุณทันทีที่ผู้ให้บริการยอมรับงานและแสดงให้เห็นว่า
cost, estimated_cost และ nymbot. หากผู้ให้บริการปฏิเสธการทํางานไม่มีอะไรจะถูกเรียกเก็บ หากการแสดงผลล้มเหลวในภายหลังหรือคลิปที่เสร็จแล้วไม่สามารถเก็บไว้และผู้ให้บริการไม่ได้เรียกเก็บค่าใช้จ่ายจะถูกคืนค่าใช้จ่ายครั้งเดียวโดยอัตโนมัติ การแสดงผลที่ยังคงเกิดขึ้นหลังจากหนึ่งชั่วโมงจะถูกยกเลิกและเก็บค่าใช้จ่ายเพราะผู้ให้บริการเรียกเก็บค่าใช้จ่ายเมื่อได้รับการยอมรับ การคืนค่าใช้จ่ายจะคืนค่าใช้จ่าย แต่ไม่ลดจํานวนค่าใช้จ่ายของคีย์
คําตอบ (202)
{
"id": "vid_3e9a51c07b2f4d86e0a1c4f2",
"object": "video",
"model": "veo",
"status": "in_progress",
"created": 1790726400,
"seconds": 8,
"resolution": "1080p",
"estimated_cost": 3.18,
"expires_at": 1790812800,
"cost": 3.18,
"nymbot": { "balance": "pro", "charged_credits": 31.8, "charged_sats": 3180, "balance_credits": 378.808, "balance_sats": 37880.8 }
}
status เริ่มต้น in_progressหรือ completed ด้วยวิดีโอที่มีอยู่แล้วใน data เมื่อเครื่องกําเนิดไฟฟ้ากลับมันทันที
ตรวจสอบในวิดีโอ
GET https://nymbot.ai/api/v1/videos/{id} — ต้องใช้คีย์ที่อยู่กับ nym ที่ส่งมัน คีย์ที่ถึงขอบเขตสามารถตรวจสอบได้
มันตอบ 202 ในขณะที่วิดีโอจะทําและ 200 เมื่อเสร็จสิ้นหรือล้มเหลว คําถามทุก 5 ถึง 10 วินาที แต่ละการตรวจสอบถามผู้ให้บริการครั้งเดียวและตอบกลับพร้อมกัน ไม่เคยรอวิดีโอ งานจะถูกเก็บไว้เป็นเวลา 24 ชั่วโมงหลังจากการส่ง
GET /api/v1/videos รายการ 50 งานล่าสุดของคีย์เป็น
{"object": "list", "data": […]}.
คําตอบ (200)
{
"id": "vid_3e9a51c07b2f4d86e0a1c4f2",
"object": "video",
"model": "veo",
"status": "completed",
"created": 1790726400,
"seconds": 8,
"resolution": "1080p",
"estimated_cost": 3.18,
"expires_at": 1790812800,
"completed_at": 1790726590,
"data": { "url": "https://blossom.example/9b41d0c2e7a3f658...1e.mp4", "content_type": "video/mp4" },
"cost": 3.18,
"nymbot": { "balance": "pro", "charged_credits": 31.8, "charged_sats": 3180 }
}
status เป็น in_progress, completed หรือ failed. ทํางานที่ล้มเหลวนํา error ({"code": "generation_failed", "message": …}) หากมีการคืนเงิน cost เป็น 0 และ nymbot อะไหล่
refunded_credits และ refunded_satsวิดีโอสําเร็จรูปอยู่ในโฮสต์ Blossom สาธารณะเช่นภาพที่สร้างขึ้น
| สถานะ | เมื่อ |
|---|---|
400 | ไม่มีความเร็ว; ระยะเวลาภายนอก 0 ถึง 60 (invalid_value); ความละเอียดที่เครื่องกําเนิดไฟฟ้าไม่ให้ (unsupported_resolution); ไม่มีภาพสําหรับเครื่องกําเนิดไฟฟ้าที่ต้องการ (image_required); รุ่นที่ไม่ได้เป็นเครื่องกําเนิดไฟฟ้าวิดีโอ (invalid_model). |
402 | Balance Pro ไม่สามารถครอบคลุมวิดีโอได้ |
404 | ไม่มีเครื่องกําเนิดไฟฟ้าดังกล่าว (model_not_found), หรือไม่มีงานโดย id ที่สําหรับ nym ของคุณหรือมีอายุมากกว่า 24 ชั่วโมง (video_not_found). |
429 | ไนมของคุณมี 10 วิดีโอ rendering ได้แล้ว (video_jobs_limit) ตรวจสอบพวกเขาและส่งเพิ่มเติมเมื่อหนึ่งเสร็จสิ้น |
502 | เครื่องกําเนิดไฟฟ้าปฏิเสธการทํางาน ไม่มีอะไรจะถูกเรียกเก็บเงินเว้นแต่ผู้ให้บริการเรียกเก็บเงินสําหรับมัน |
503 | วิดีโอไม่สามารถส่งหรือจัดเก็บได้ในขณะนี้ (media_hosting_unavailable, service_unavailable). |
cURL
curl https://nymbot.ai/api/v1/videos \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "veo", "prompt": "Waves rolling onto a beach at sunrise", "duration": 8, "aspect_ratio": "16:9"}'
curl https://nymbot.ai/api/v1/videos/vid_3e9a51c07b2f4d86 \
-H "Authorization: Bearer $NYMBOT_API_KEY"
Python
import os, time
import requests
headers = {"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]}
job = requests.post(
"https://nymbot.ai/api/v1/videos",
headers=headers,
json={"model": "veo", "prompt": "Waves rolling onto a beach at sunrise", "duration": 8, "aspect_ratio": "16:9"},
).json()
while True:
time.sleep(8)
status = requests.get("https://nymbot.ai/api/v1/videos/" + job["id"], headers=headers).json()
if status["status"] in ("completed", "failed"):
break
print(status["data"]["url"] if status["status"] == "completed" else status["error"])
JavaScript
const headers = {
"Authorization": "Bearer " + process.env.NYMBOT_API_KEY,
"Content-Type": "application/json",
};
const job = await (await fetch("https://nymbot.ai/api/v1/videos", {
method: "POST",
headers,
body: JSON.stringify({ model: "veo", prompt: "Waves rolling onto a beach at sunrise", duration: 8, aspect_ratio: "16:9" }),
})).json();
let status;
do {
await new Promise((r) => setTimeout(r, 8000));
status = await (await fetch("https://nymbot.ai/api/v1/videos/" + job.id, { headers })).json();
} while (status.status !== "completed" && status.status !== "failed");
console.log(status.status === "completed" ? status.data.url : status.error);
ข้อความถึงการพูด
อ่านข้อความด้วยเสียงและกลับไฟล์เสียงเองไม่ใช่ลิงก์ มันเป็นจุดสิ้นสุดการพูดของ OpenAI ดังนั้น audio.speech.create ใน OpenAI SDKs ทํางาน
POST https://nymbot.ai/api/v1/audio/speech ต้องใช้คีย์ API หรือ การชําระเงิน Lightning ตามคําขอ.
| พื้นที่ | ชนิด | ต้องการ | คําอธิบาย |
|---|---|---|---|
model | สายรัด | ไม่ | รูปแบบการพูดจาก รายการรูปแบบเสียง. Default: เสียงมาตรฐาน @cf/myshell-ai/melotts. aura-2 Deepgram Aura 2 |
input | สายรัด | ใช่ | ข้อความที่จะอ่าน: สูงสุด 800 ตัวอักษรสําหรับเสียงมาตรฐาน 2,000 สําหรับ Aura 2 |
voice | สายรัด | ไม่ | ID เสียงจาก รายการเสียง: Aura speaker เช่น luna (หรือ aura-2-luna-en), หรือภาษา MeloTTS (en, es, fr, zh). OpenAI ชื่อเสียงเช่น alloy ได้รับการยอมรับและให้เสียงเริ่มต้นของรุ่น |
language | สายรัด | ไม่ | รหัสภาษาเช่น esไม่มีเสียงมันจะเลือกหนึ่งสําหรับภาษานั้น เสียงที่พูดภาษาอื่นจะกลับมา 422 voice_language_mismatch, และภาษาที่รุ่นไม่มีเสียงสําหรับ 422 unsupported_language. |
response_format | สายรัด | ไม่ | เสียงมาตรฐานกลับมา mp3 เท่านั้น Aura 2 กลับ mp3 (ข้อผิดพลาด) opus, aac, flac, wav หรือ pcm. |
speed | หมายเลข | ไม่ | ได้รับการยอมรับและลืม |
เสียงมาตรฐานมีค่าธรรมเนียม 3 เครดิตมาตรฐาน (30 sats) ต่อคําขอเช่นเดียวกับในแอป Aura 2 เป็น Pro ราคาตามตัวอักษรที่คุณส่ง ร่างกายการตอบสนองคือเสียงที่มีการจับคู่
Content-Type; ค่าใช้จ่ายอยู่ใน X-Nymbot-Cost-Sats header. หากรูปแบบการพูดล้มเหลวไม่มีอะไรจะถูกเรียกเก็บเงิน
คําตอบ
HTTP/1.1 200 OK
Content-Type: audio/mpeg
X-Nymbot-Cost-Sats: 4.2
X-Nymbot-Balance-Sats: 41055.6
(audio bytes)
| สถานะ | เมื่อ |
|---|---|
400 | ไม่มีการป้อนข้อมูล; การป้อนข้อมูลมากกว่าขีด จํากัด ของรุ่น (input_too_long); รูปแบบที่รุ่นไม่สามารถผลิตได้ (unsupported_response_format); เสียงที่ไม่รู้จัก (invalid_voice); รูปแบบที่ไม่ได้เป็นรูปแบบการพูด (invalid_model). |
422 | เสียงไม่พูดภาษาที่กําหนดหรือรูปแบบไม่มีเสียงสําหรับมัน |
502 | รูปแบบการพูดล้มเหลว ไม่มีอะไรถูกเรียกเก็บ |
cURL
curl https://nymbot.ai/api/v1/audio/speech \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "aura-2", "voice": "luna", "input": "Your invoice has been paid."}' \
--output speech.mp3
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
audio = client.audio.speech.create(
model="aura-2",
voice="luna",
input="Your invoice has been paid.",
)
audio.write_to_file("speech.mp3")
JavaScript
import { writeFile } from "node:fs/promises";
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const audio = await client.audio.speech.create({
model: "aura-2",
voice: "luna",
input: "Your invoice has been paid.",
});
await writeFile("speech.mp3", Buffer.from(await audio.arrayBuffer()));
รูปแบบเสียงและเสียง
สองรายการสาธารณะสําหรับการเลือกรูปแบบการพูดและเสียงหรือรูปแบบการแปล มีผู้พูดภาษาอังกฤษ Aura 2 41 คนและภาษา MeloTTS สี่คน
GET https://nymbot.ai/api/v1/audio/models ไม่จําเป็นต้องมีคีย์
GET https://nymbot.ai/api/v1/audio/voices?language=en ไม่จําเป็นต้องมีคีย์
| พื้นที่ | ชนิด | ต้องการ | คําอธิบาย |
|---|---|---|---|
language | สกรู (query) | ไม่ | เพียงเสียงสําหรับภาษานี้ |
model | สกรู (query) | ไม่ | เพียงเสียงสําหรับรุ่นนี้ |
คําตอบ (เสียง)
{
"object": "list",
"data": [
{ "id": "luna", "name": "Luna", "provider": "deepgram", "model_id": "aura-2", "models": ["aura-2"], "language": "en", "description": "Aura 2 English voice", "gender": "female", "preview_url": null },
{ "id": "en", "name": "MeloTTS English", "provider": "myshell", "model_id": "@cf/myshell-ai/melotts", "models": ["@cf/myshell-ai/melotts", "melotts"], "language": "en", "description": "English (MeloTTS)", "gender": null, "preview_url": null }
]
}
รูปแบบรายการคําตอบ {"object": "list", "data": {"tts": […], "stt": […]}}. แต่ละรูปแบบการพูดให้สมดุลราคา max_input_chars,
response_formats, languages และ default_voice; รูปแบบการแปลให้ตัวอักษรของมัน max_file_bytes, max_seconds, รูปแบบและราคาต่อนาที
cURL
curl https://nymbot.ai/api/v1/audio/models
curl "https://nymbot.ai/api/v1/audio/voices?language=en"
Python
import requests
print(requests.get("https://nymbot.ai/api/v1/audio/models").json())
for voice in requests.get("https://nymbot.ai/api/v1/audio/voices", params={"language": "en"}).json()["data"]:
print(voice["id"], voice["model_id"])
JavaScript
console.log(await (await fetch("https://nymbot.ai/api/v1/audio/models")).json());
const voices = await (await fetch("https://nymbot.ai/api/v1/audio/voices?language=en")).json();
for (const v of voices.data) console.log(v.id, v.model_id);
การพูดถึงข้อความ
แปลงการบันทึกเป็นข้อความด้วย Whisper นี่คือจุดสิ้นสุดการแปลงของ OpenAI ดังนั้น
audio.transcriptions.create การทํางาน
POST https://nymbot.ai/api/v1/audio/transcriptions ต้องใช้คีย์ API หรือ การชําระเงิน Lightning ตามคําขอร่างกายคือ multipart/form-data.
| พื้นที่ | ชนิด | ต้องการ | คําอธิบาย |
|---|---|---|---|
file | ไฟล์ | ใช่ | การบันทึกตั้งแต่ 256 บิตถึง 25 MB และถึง 30 นาที: WAV, WebM, MP4 หรือ M4A, Ogg หรือ Opus, MP3 และรูปแบบอื่น ๆ Whisper อ่าน MP3 และรูปแบบอื่น ๆ ที่ความยาวไม่สามารถอ่านได้ด้านหน้า จํากัด 1.8 MB |
model | สายรัด | ไม่ | ความผิดพลาด whisper, ซึ่งเป็น Whisper Large v3 Turbo whisper-1, whisper-large-v3-turbo และ @cf/openai/whisper-large-v3-turbo หมายถึงเดียวกัน |
language | สายรัด | ไม่ | ภาษาที่พูดเช่น enตรวจสอบถ้าออก |
prompt | สายรัด | ไม่ | คําหรือตัวอักษรที่คุณสามารถคาดหวังเช่นชื่อ เท่านั้น 1000 ตัวอักษรแรกที่ใช้ |
response_format | สายรัด | ไม่ | json (ข้อผิดพลาด) text, srt, vtt หรือ verbose_json. |
สําหรับไฟล์ WAV, WebM, MP4 และ Ogg ความยาวจะถูกอ่านจากไฟล์ก่อนที่จะทํางานอะไรดังนั้นการบันทึกมากกว่า 30 นาทีจะถูกปฏิเสธขึ้นไปข้างหน้า (ด้วย 3 วินาที) ความยาวของไฟล์ WAV มาจากอัตราตัวอย่างช่องและขนาดตัวอย่าง ความยาวของรูปแบบอื่น ๆ เช่น MP3 ไม่สามารถอ่านขึ้นไปข้างหน้าดังนั้นพวกเขาจะถูก จํากัด โดยขนาด: ที่อัตราบิตต่ําที่สุด Nymbot หมายความว่า 8 kbps, 30 นาทีคือ 1.8 MB และไฟล์ขนาดใหญ่ในรูปแบบดังกล่าวจะถูกปฏิเสธด้วย 413
audio_too_long ส่งบันทึกที่ยาวนานขึ้นเช่น WAV, WebM, MP4 หรือ Ogg หาก Whisper จากนั้นรายงานมากกว่า 30 นาทีคําขอจะถูกปฏิเสธด้วย
413 audio_too_longและเนื่องจาก Whisper ทํางาน 30 นาทีจะถูกเรียกเก็บ
คุณจ่ายสําหรับความยาวของเสียงให้กลมขึ้นเป็นวินาที: ความยาวที่ยาวที่สุดอ่านจากไฟล์ความยาวของรายงาน Whisper และขนาดไฟล์ที่น้อยที่สุดที่อนุญาตในราคาต่อนาทีของ Whisper กับค่าธรรมเนียมและค่าธรรมเนียมปกติและอย่างน้อย 0.05 เครดิตคําขอ มันจะจ่ายจากสมดุลมาตรฐานเมื่อที่สามารถครอบคลุมการถือครองและจาก Pro อื่น ๆ ; 402 ให้สิ่งที่แต่ละสมดุลจะต้องการ ในแอพพลิเคชันการ transkription ของข้อความเสียงอาจเป็นอิสระ ใน API มันจะชาร์จอยู่เสมอ หาก Whisper ไม่สามารถชาร์จได้
คําตอบ
{
"text": "Your invoice has been paid.",
"usage": { "type": "duration", "seconds": 3 },
"nymbot": { "balance": "standard", "charged_credits": 0.05, "charged_sats": 0.5, "balance_credits": 120.35, "balance_sats": 1203.5 }
}
text กลับข้อความที่ชัดเจน srt และ vtt กลับ subtitles และ
verbose_json เพิ่มภาษาระยะเวลาและช่วงเวลา สําหรับสามที่ไม่ใช่ JSON ค่าใช้จ่ายอยู่ในหัว
| สถานะ | เมื่อ |
|---|---|
400 | ไม่มีไฟล์, ไฟล์ที่มีเสียงไม่สามารถใช้ได้ (invalid_audio), รูปแบบที่ไม่รู้จักหรือรูปแบบที่ไม่ใช่รูปแบบการถ่ายภาพ (invalid_model). |
402 | ความสมดุลไม่สามารถครอบคลุมได้ |
413 | ไฟล์มีขนาดมากกว่า 25 MB (file_too_large) หรือบันทึกมากกว่า 30 นาทีหรือในรูปแบบที่มีความยาวไม่สามารถอ่านได้ด้านหน้ามากกว่า 1.8 MB (audio_too_long). |
502 | whisper ไม่สามารถประมวลผลเสียง ไม่มีอะไรที่ถูกเรียกเก็บ |
cURL
curl https://nymbot.ai/api/v1/audio/transcriptions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-F [email protected] \
-F model=whisper \
-F response_format=json
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
with open("memo.m4a", "rb") as f:
transcript = client.audio.transcriptions.create(model="whisper", file=f)
print(transcript.text)
JavaScript
import fs from "node:fs";
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const transcript = await client.audio.transcriptions.create({
model: "whisper",
file: fs.createReadStream("memo.m4a"),
});
console.log(transcript.text);
การแปลการพูดถึงภาษาอังกฤษ
POST https://nymbot.ai/api/v1/audio/translations ต้องใช้คีย์ API หรือ การชําระเงิน Lightning ตามคําขอร่างกายคือ multipart/form-data.
เดียวกันเช่นเดียวกับการถ่ายภาพด้วยฟิลด์เดียวกันยกเว้น languageข้อ จํากัด และราคา แต่ข้อความจะกลับมาในภาษาอังกฤษโดยไม่คํานึงถึงภาษาที่พูด OpenAI SDKs เรียกมันด้วย audio.translations.create.
cURL
curl https://nymbot.ai/api/v1/audio/translations \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-F [email protected] \
-F model=whisper
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
with open("nota.m4a", "rb") as f:
translation = client.audio.translations.create(model="whisper", file=f)
print(translation.text)
JavaScript
import fs from "node:fs";
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const translation = await client.audio.translations.create({
model: "whisper",
file: fs.createReadStream("nota.m4a"),
});
console.log(translation.text);
สัมผัส
แปลงข้อความเป็นเวกเตอร์สําหรับการค้นหาการรวบรวมและ deduplication รูปแบบทํางานบน Cloudflare และใช้สมดุลมาตรฐาน
POST https://nymbot.ai/api/v1/embeddings ต้องใช้คีย์ API หรือ การชําระเงิน Lightning ตามคําขอ.
| พื้นที่ | ชนิด | ต้องการ | คําอธิบาย |
|---|---|---|---|
model | สายรัด | ใช่ | แบบบูรณาการจาก GET /api/v1/models?type=embedding. |
input | string หรือ array ของ string | ใช่ | ข้อความที่จะแทรกได้ถึง 100 สัญญาณที่ว่างเปล่า หมายเลขแถวจะถูกปฏิเสธ (token_input_unsupported) แต่ละอินพุตต้องพอดีกับรูปแบบ context_length, หมายเลขเป็นประมาณสี่บิตต่อ token |
encoding_format | สายรัด | ไม่ | float (ความผิดพลาด) หรือ base64 (Little-endian 32 บิต floats) |
dimensions | อินเทอร์ | ไม่ | ขนาดของรุ่นเองหรือสําหรับรุ่นที่มี supported_dimensions หนึ่งในเหล่านี้; ตัวเวกเตอร์จะถูกสั้นลงและเป็นปกติ ทุกสิ่งอื่น ๆ จะถูกปฏิเสธ |
| รูปแบบ | มิติ | กรณี |
|---|---|---|
@cf/baai/bge-m3 | 1024 หลายภาษา | 8,192 ตุ๊กตา |
@cf/qwen/qwen3-embedding-0.6b | 1024 หลายภาษา | 8,192 ตุ๊กตา |
@cf/baai/bge-large-en-v1.5 | 1024 ภาษาอังกฤษ | 512 ตุ๊กตา |
@cf/baai/bge-base-en-v1.5 | 768, อังกฤษ | 512 ตุ๊กตา |
@cf/baai/bge-small-en-v1.5 | 384 ภาษาอังกฤษ | 512 ตุ๊กตา |
รายชื่อรุ่นเป็นแหล่งของความจริงสําหรับสิ่งที่มีอยู่และค่าใช้จ่ายของพวกเขา; EmbeddingGemma ของ Google ที่มีเวกเตอร์ที่สั้นขึ้นตามคําขอปรากฏที่นี่เมื่อแคตตาล็อกมีราคาสําหรับมัน การแทรกจะวัดต่อ token input และขั้นต่ํา 0.05 เครดิตจะใช้กับแต่ละคําขอไม่ใช่สําหรับแต่ละรายการดังนั้นการแทรกข้อความหลายรายการเป็นคําขอหนึ่งครั้งจะถูกกว่าการส่งข้อความหนึ่งครั้ง
คําตอบ
{
"object": "list",
"data": [
{ "object": "embedding", "index": 0, "embedding": [0.0213, -0.0487, 0.0112] }
],
"model": "@cf/baai/bge-m3",
"usage": { "prompt_tokens": 9, "total_tokens": 9 },
"nymbot": { "balance": "standard", "charged_credits": 0.05, "charged_sats": 0.5, "balance_credits": 1204.35, "balance_sats": 12043.5 }
}
| สถานะ | เมื่อ |
|---|---|
400 | ไม่มีการป้อนข้อมูลหรือช่องว่าง; ตารางโทเค็น (token_input_unsupported); มากกว่า 100 อินพุต (too_many_inputs); การป้อนข้อมูลที่ยาวนานกว่ารูปแบบใช้ (input_too_long); ขนาดที่รูปแบบไม่สามารถให้ (unsupported_dimensions). |
402 | อัตราแลกเปลี่ยนมาตรฐานต่ําเกินไป Embeddings ไม่เคยใช้อัตราแลกเปลี่ยน Pro |
404 | ไม่มีรูปแบบ embedded ด้วยชื่อนี้ |
502 | แบบล้มเหลว ไม่มีการเรียกเก็บเงินอะไร |
cURL
curl https://nymbot.ai/api/v1/embeddings \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "@cf/baai/bge-m3", "input": ["Lightning invoices expire.", "Invoices on Lightning have a time limit."]}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
result = client.embeddings.create(
model="@cf/baai/bge-m3",
input=["Lightning invoices expire.", "Invoices on Lightning have a time limit."],
)
print(len(result.data), len(result.data[0].embedding))
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const result = await client.embeddings.create({
model: "@cf/baai/bge-m3",
input: ["Lightning invoices expire.", "Invoices on Lightning have a time limit."],
});
console.log(result.data.length, result.data[0].embedding.length);