Μετάβαση στο περιεχόμενο
Επιστροφή στο Nymbot

Βάση γνώσεων Οι προγραμματιστές

Εικόνες, ήχο και ενσωματώσεις

Οι γεννήτριες από την εφαρμογή, και τα δομικά στοιχεία για την αναζήτηση: εικόνες, βίντεο, ομιλία, μεταγραφή και ενσωματώσεις, το καθένα τιμολογείται ανά χρήση από το υπόλοιπο σας.

Δημιουργία εικόνων

Δημιουργεί μία έως τέσσερις εικόνες από μια προτροπή και τις επιστρέφει όταν ολοκληρωθούν. ?image μέσα στην εφαρμογή.

POST https://nymbot.ai/api/v1/images/generations - χρειάζεται ένα κλειδί API, ή Πληρωμή Lightning κατόπιν αιτήματος.

Οι Ινδίες προέρχονται από GET /api/v1/models?type=imageΗ τυπική γεννήτρια, @cf/black-forest-labs/flux-1-schnell, κοστίζει μια επίπεδη 5 τυποποιημένες πιστώσεις (50 sats) μια εικόνα. Κάθε άλλη γεννήτρια ξοδεύει Pro πιστώσεις με τη δική της τιμή, με τη συνήθη αμοιβή και το περιθώριο, όπως στην Το app. n Φωτογραφίες Κόστος n Ένα πεδίο που δεν λαμβάνεται από μια γεννήτρια πέφτει αντί να απορρίπτεται. η τυπική γεννήτρια χρησιμοποιεί μόνο την προειδοποίηση.

Το πεδίοΤύποςΑπαιτείταιΠεριγραφή
modelΣτρογγυλοΝαίΜια γεννήτρια ID, όπως nano-banana.
promptΣτρογγυλοΝαίΤι να σχεδιάσετε; Χρησιμοποιούνται μόνο οι πρώτοι 2000 χαρακτήρες.
nΙΝΤΕΡΌχι1 έως 4. προεπιλογή 1. επίσης αποδεκτό ως num_images.
sizeΣτρογγυλοΌχιΜια αναλογία όπως η "16:9"Είτε πρόκειται για ανοιχτό μέγεθος όπως "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ΣτρογγυλοΌχιΜια εικόνα για να ξεκινήσετε από: ένα 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.
size
aspect_ratio
quality
negative_prompt
output_format
ΣτρογγυλοΌχιΌσο για τη γενιά.
response_formatΣτρογγυλοΌχι"b64_json" (η προεπιλογή εδώ) ή "url".

Η εικόνα που ανεβάζετε ελέγχεται για να είναι μια καλά διαμορφωμένη PNG, JPEG, WebP ή GIF, αποστέλλεται ως πραγματικός τύπος και τοποθετείται σε δημόσιο Blossom host, επειδή οι γεννήτριες συλλέγουν την είσοδό τους με σύνδεση. Θεραπεύστε την ως δημόσια. Εάν η επεξεργασία αποτύχει και δεν χρεώνεται τίποτα, το φιλοξενούμενο αντίγραφο διαγράφεται ξανά. Η απάντηση έχει το ίδιο σχήμα με την παραγωγή. Η τιμή είναι η τιμή του γεννήτη, η οποία για ορισμένες γεννήτριες περιλαμβάνει χρέωση για την εικόνα εισόδου.

Απάντηση

{
  "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Δεν υπάρχει εικόνα ή προειδοποίηση, ένα αρχείο που δεν είναι εικόνα (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"));

ΒΙΝΤΕΟ

Ένα βίντεο διαρκεί λεπτά, οπότε τρέχει στο παρασκήνιο. το υποβάλλετε, παίρνετε ένα id αμέσως, και ρωτήστε για το id μέχρι να γίνει.

POST https://nymbot.ai/api/v1/videos - χρειάζεται ένα κλειδί API, ή Πληρωμή Lightning κατόπιν αιτήματοςΕπιστρέφει 202.

Το πεδίοΤύποςΑπαιτείταιΠεριγραφή
modelΣτρογγυλοΝαίΈνα βίντεο γεννήτρια id από GET /api/v1/models?type=video, όπως veo.
promptΣτρογγυλοΝαίΤι θα έπρεπε να συμβεί.
durationΑριθμός ή stringΌχιΧρησιμοποιείται μόνο από γεννήτριες που σας επιτρέπουν να επιλέξετε το μήκος. οι άλλοι κάνουν το συνηθισμένο μήκος τους, το οποίο είναι seconds Η απάντηση και η τιμή ακολουθούν.
aspect_ratioΣτρογγυλοΌχιΌπως "16:9" ή "9:16"Ένα μέγεθος όπως "1280x720" γίνεται η πλησιέστερη αναλογία.
resolution
quality
ΣτρογγυλοΌχιΜία από τις γεννήτριες resolutions Στη λίστα με τα μοντέλα, όπως "720p" ή "1080p"Καθορίζει την τιμή.Τα υπόλοιπα απορρίπτονται unsupported_resolution.
image_urlΣτρογγυλοΌχιΜια εικόνα για να ξεκινήσετε από: ένα https:// Σύνδεσμος ή Α data:image/… URL, το οποίο φορτώνεται πρώτα σε έναν δημόσιο Blossom host. 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Η ισορροπία Pro δεν μπορεί να καλύψει το βίντεο.
404Δεν υπάρχει τέτοια γεννήτρια (model_not_found) ή καμία εργασία από αυτό το αναγνωριστικό για το nym σας, ή είναι πάνω από 24 ώρες (video_not_found).
429Το δικό σας nym έχει ήδη 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);

Το κείμενο της ομιλίας

Διαβάζει κείμενο δυνατά και επιστρέφει το ίδιο το αρχείο ήχου, όχι έναν σύνδεσμο. audio.speech.create Το OpenAI SDKs λειτουργεί.

POST https://nymbot.ai/api/v1/audio/speech - χρειάζεται ένα κλειδί API, ή Πληρωμή Lightning κατόπιν αιτήματος.

Το πεδίοΤύποςΑπαιτείταιΠεριγραφή
modelΣτρογγυλοΌχιΈνα μοντέλο ομιλίας από Ο κατάλογος των μοντέλων ήχουΠροεπιλεγμένη φωνή: Η τυπική φωνή, @cf/myshell-ai/melotts. aura-2 Το Deepgram Aura 2.
inputΣτρογγυλοΝαίΤο κείμενο για ανάγνωση: έως 800 χαρακτήρες για την τυπική φωνή, 2.000 για την Aura 2.
voiceΣτρογγυλοΌχιΈνα Voice ID από Η λίστα των φωνώνΈνας μεγάλος ομιλητής, όπως luna (ή aura-2-luna-en) ή μια γλώσσα MeloTTS (en, es, fr, zhΑνοιχτά ονόματα φωνής όπως 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 Αν το πρότυπο ομιλίας αποτύχει, δεν χρεώνεται τίποτα.

Απάντηση

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()));

Μοντέλα ήχου και φωνές

Δύο δημόσιες λίστες για να επιλέξετε ένα μοντέλο ομιλίας και φωνής, ή ένα μοντέλο μεταγραφής. Υπάρχουν 41 Αγγλοι ομιλητές Aura 2 και τέσσερις γλώσσες 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 bytes έως 25 MB και έως 30 λεπτά: WAV, WebM, MP4 ή M4A, Ogg ή Opus, MP3 και οι άλλες μορφές Whisper διαβάζει.
modelΣτρογγυλοΌχιΕλλείψεις whisperΑυτό είναι το Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo και @cf/openai/whisper-large-v3-turbo Σημαίνει το ίδιο.
languageΣτρογγυλοΌχιΗ προφορική γλώσσα, όπως enΑνακαλύφθηκε αν είχε φύγει.
promptΣτρογγυλοΌχιΛέξεις ή ορθογραφίες που μπορείτε να περιμένετε, όπως ονόματα. Χρησιμοποιούνται μόνο οι πρώτοι 1.000 χαρακτήρες.
response_formatΣτρογγυλοΌχιjson (Η αποτυχία είναι text, srt, vtt ή verbose_json.

Για τα αρχεία WAV, WebM, MP4 και Ogg, το μήκος διαβάζεται από το αρχείο πριν από την εκτέλεση οποιουδήποτε, οπότε μια εγγραφή άνω των 30 λεπτών αρνείται προς τα εμπρός (με χάρη των 3 δευτερολέπτων). Το μήκος ενός αρχείου WAV προέρχεται από το ποσοστό δειγματοληψίας, τα κανάλια και το μέγεθος δείγματος. Το μήκος άλλων μορφών, όπως το MP3, δεν μπορεί να διαβαστεί προς τα εμπρός, οπότε περιορίζονται από το μέγεθος: στο χαμηλότερο bitrate το 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 πίστωση ένα αίτημα. 402 δίνει αυτό που θα χρειαζόταν κάθε ισορροπία.Στην εφαρμογή, η μεταγραφή ενός φωνητικού μηνύματος μπορεί να είναι δωρεάν.Στο 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 Επιστρέφουν οι υποτιτλίες και verbose_json προσθέτει τη γλώσσα, τη διάρκεια και τα χρονικά τμήματα. Για τα τρία που δεν είναι JSON, το κόστος είναι στις επικεφαλίδες.

Το καθεστώςΠότε
400Κανένα αρχείο, ένα αρχείο χωρίς χρήσιμο ήχο (invalid_audio, μια άγνωστη μορφή, ή ένα μοντέλο που δεν είναι μεταγραφικό μοντέλο (invalid_model).
402Ούτε η ισορροπία μπορεί να το καλύψει.
413Το αρχείο είναι μεγαλύτερο από 25 MB (file_too_largeΗ διάρκεια της ομιλίας δεν μπορεί να ξεπεράσει τα 8 λεπτά, ενώ η διάρκεια της ομιλίας δεν μπορεί να ξεπεράσει τα 8 λεπτά.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, όρια και τιμή, αλλά το κείμενο επιστρέφει στα αγγλικά ανεξάρτητα από τη γλώσσα που ομιλείται. 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);

Εμπιστοσύνη

Μετατρέπει το κείμενο σε φορείς για αναζήτηση, ομαδοποίηση και αποκλιμάκωση. Τα μοντέλα εκτελούνται στο Cloudflare και ξοδεύουν το πρότυπο υπόλοιπο.

POST https://nymbot.ai/api/v1/embeddings - χρειάζεται ένα κλειδί API, ή Πληρωμή Lightning κατόπιν αιτήματος.

Το πεδίοΤύποςΑπαιτείταιΠεριγραφή
modelΣτρογγυλοΝαίΈνα ενσωματωμένο μοντέλο από GET /api/v1/models?type=embedding.
inputΣύνδεσμος ή αριθμός σειρώνΝαίΤο κείμενο που πρέπει να ενσωματωθεί, μέχρι 100 μη κενές σειρές.token_input_unsupportedΚάθε εισαγωγή πρέπει να ταιριάζει με το μοντέλο context_length, μετρήθηκε ως περίπου τέσσερα bytes ένα token.
encoding_formatΣτρογγυλοΌχιfloat (η αποτυχία) ή base64 (Μικροσκοπικά 32 bit floats)
dimensionsΙΝΤΕΡΌχιτο μέγεθος του μοντέλου, ή για ένα μοντέλο με supported_dimensions Ένας από αυτούς, ο φορέας συντομεύεται και ομαλοποιείται.Τα υπόλοιπα απορρίπτονται.
μοντέλοΔιαστάσειςΤο πλαίσιο
@cf/baai/bge-m31024 σε πολλές γλώσσες8.192 Ετικέτες
@cf/qwen/qwen3-embedding-0.6b1024 σε πολλές γλώσσες8.192 Ετικέτες
@cf/baai/bge-large-en-v1.51024 Αγγλικά512 Ετικέτες
@cf/baai/bge-base-en-v1.5768, Αγγλικά512 Ετικέτες
@cf/baai/bge-small-en-v1.5384 Αγγλικά512 Ετικέτες

Η λίστα των μοντέλων είναι η πηγή της αλήθειας για τα οποία είναι διαθέσιμα και τι κοστίζουν. το EmbeddingGemma της Google, με μικρότερους φορείς κατόπιν αιτήματος, εμφανίζεται εκεί επίσης όταν ο κατάλογος έχει τιμή γι 'αυτό. οι ενσωματώσεις μετρούνται ανά token εισόδου και το ελάχιστο 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 array (token_input_unsupported(περισσότερα από 100 εισαγωγές)too_many_inputs); μια εισαγωγή μεγαλύτερη από τη χρήση του μοντέλου (input_too_long); ένα μέγεθος που το μοντέλο δεν μπορεί να δώσει (unsupported_dimensions).
402Η στάνταρ ισορροπία είναι πολύ χαμηλή. οι ενσωματώσεις δεν χρησιμοποιούν ποτέ την ισορροπία Pro.
404Κανένα μοντέλο με αυτό το όνομα.
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);