μοντέλα

wan2.7-image-pro

Markdown · JSON

wan2.7-image-pro

Μοντέλο δημιουργίας εικόνων από οδηγίες κειμένου. Ο κατασκευαστής προβλέπει έλεγχο χρωματικής παλέτας και ανάλυση έως 4K για κανονική δημιουργία από κείμενο.

Σχετικά με το μοντέλο

Αυτή η περιγραφή καλύπτει τις δυνατότητες του μοντέλου. Οι είσοδοι, έξοδοι και επιλογές που διατίθενται στο Ailoot παρατίθενται παρακάτω για την επιλεγμένη μέθοδο.

Το Wan2.7-Image-Pro είναι μοντέλο της Alibaba για δημιουργία εικόνων από κείμενο. Η τρέχουσα κάρτα του Ailoot δημοσιεύει είσοδο κειμένου και αποτέλεσμα σε μορφή εικόνας. Ο κατασκευαστής προβλέπει επίσης επεξεργασία, συνδυασμό εικόνων αναφοράς και τοπικές αλλαγές· αυτοί οι τρόποι χρήσης απαιτούν ξεχωριστή υποστήριξη εικόνων εισόδου και δεν περιλαμβάνονται στην τρέχουσα μέθοδο της κάρτας.

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

Παλέτα και σύνθετες οδηγίες

Εκτός διαδοχικών σειρών μπορεί να οριστεί παλέτα από 3–10 χρώματα. Η λειτουργία συλλογισμού προορίζεται για κανονική δημιουργία από κείμενο χωρίς εικόνες αναφοράς και διαδοχική σειρά: το μοντέλο αναλύει προκαταρκτικά την περιγραφή της σκηνής.

Στις προδιαγραφές της Alibaba η κανονική έξοδος περιλαμβάνει από μία έως τέσσερις εικόνες. Σε αφηγηματική σειρά μπορεί να τεθεί ανώτατο όριο έως 12· τον πραγματικό αριθμό τον επιλέγει το μοντέλο σύμφωνα με τις οδηγίες. Η σειρά μπορεί να χρησιμοποιεί κείμενο και εικόνες αναφοράς για κοινά χαρακτηριστικά χαρακτήρων και συνεκτική εξέλιξη της ιστορίας. Η παλέτα και ο συλλογισμός δεν εφαρμόζονται σε αυτή τη λειτουργία.

Η ανάλυση εξαρτάται από τη λειτουργία

Το επίπεδο 4K υποστηρίζεται σε κανονική δημιουργία από κείμενο χωρίς εικόνες αναφοράς και διαδοχική σειρά. Η επεξεργασία από εικόνες και οι διαδοχικές σειρές περιορίζονται στο επίπεδο 2K. Αυτοί οι όροι ορίζουν την επιφάνεια σε pixel, όχι ίδιο μήκος για κάθε πλευρά. Το σχήμα του καρέ μπορεί να επιλεγεί από 1:8 έως 8:1· κατά την επεξεργασία με προκαθορισμένη ανάλυση ο λόγος διαστάσεων ακολουθεί την τελευταία εικόνα αναφοράς. Τα αποτελέσματα αποθηκεύονται σε PNG.

Για τρόπους χρήσης με εικόνες εισόδου, η Alibaba δέχεται JPEG, JPG, PNG χωρίς διαφάνεια, BMP και WEBP. Τα όρια είναι 20 MB ανά αρχείο, από 240 έως 8000 pixel για κάθε πλευρά και λόγος διαστάσεων από 1:8 έως 8:1. Για οδηγίες κειμένου υποστηρίζονται κινεζικά και αγγλικά· το μέγιστο είναι 5000 χαρακτήρες και το επιπλέον τμήμα απορρίπτεται. Για τη συγκεκριμένη έκδοση δεν προβλέπονται αρνητική περιγραφή και επέκταση των οδηγιών. Η αρχική τιμή τυχαιότητας βοηθά στη διατήρηση ομοιότητας μεταξύ παραλλαγών, αλλά δεν εξασφαλίζει ακριβή επανάληψη.

Ailoot · Εικόνες POST /v1/images/generations wan2.7-image-pro

wan2.7-image-pro

Alibaba /wan2.7-image-pro
ID μοντέλου
  • wan2.7-image-pro
  • wan-image
  • wan-image-latest

Εισαγωγή

Μοντέλο δημιουργίας εικόνων από οδηγίες κειμένου. Ο κατασκευαστής προβλέπει έλεγχο χρωματικής παλέτας και ανάλυση έως 4K για κανονική δημιουργία από κείμενο.

Αποδεκτές είσοδοι
Κείμενο
Αποτελέσματα
Εικόνες

Διαθέσιμα στο Ailoot · είσοδοι και μέθοδοι

Ailoot · Εικόνες POST /v1/images/generations
Είσοδος
text
Έξοδος
image
Μορφή εξόδου
Αρχείο εικόνας
ΠεδίοΤύποςΑπαίτησηΤιμές και όριαΠροεπιλογή
ΠεδίοmodelΤύποςstringΑπαίτησηΥποχρεωτικόΤιμές και όρια
wan2.7-image-pro
Προεπιλογή—
ΠεδίοpromptΤύποςstringΑπαίτησηΥποχρεωτικόΤιμές και όρια
Ελάχιστο μήκος: 1
Προεπιλογή—
ΠεδίοnΤύποςintegerΑπαίτησηΠροαιρετικόΤιμές και όρια
Ελάχιστο: 1
Προεπιλογή1
Πεδίοresponse_formatΤύποςstringΑπαίτησηΠροαιρετικόΤιμές και όρια
url, b64_json
Προεπιλογή—
ΠεδίοstreamΤύποςbooleanΑπαίτησηΠροαιρετικόΤιμές και όριαΠροεπιλογήfalse
ΠεδίοsizeΤύποςstringΑπαίτησηΠροαιρετικόΤιμές και όρια
Εξαρτάται από το μοντέλο
Προεπιλογή—
Πεδίοpartial_imagesΤύποςintegerΑπαίτησηΠροαιρετικόΤιμές και όρια
Εξαρτάται από το μοντέλο
Προεπιλογή—
Πεδίοimages[].image_urlΤύποςstringΑπαίτησηΔεν υποστηρίζεταιΤιμές και όρια
Μέγιστο πλήθος αποκωδικοποιημένων byte: 20.971.520
Τύποι MIME: image/png, image/jpeg
Μέγιστο πλήθος εικόνων ανά πίνακα: 9
Συνθήκες: Ένα πραγματικό URL ανά αντικείμενο images[]. Το πλήθος του πίνακα διαφέρει από αυτή την τελική τιμή συμβολοσειράς.
Εφαρμόζεται όταν: Μόνο JSON images/edits· το JSON images/generations δεν αναλύει αναφορές images.
Προεπιλογή—
ΠεδίοimageΤύποςfileΑπαίτησηΠροαιρετικόΤιμές και όρια
Μέγιστο πλήθος αποκωδικοποιημένων byte: 20.971.520
Τύποι MIME: image/png, image/jpeg
Εφαρμόζεται όταν: δημιουργία με multipart/form-data
Προεπιλογή—
Πεδίοimage[]Τύποςfile[]ΑπαίτησηΠροαιρετικόΤιμές και όρια
Μέγιστο πλήθος στοιχείων: 9
Μέγιστο πλήθος αποκωδικοποιημένων byte: 20.971.520
Τύποι MIME: image/png, image/jpeg
Εφαρμόζεται όταν: δημιουργία με multipart/form-data
Προεπιλογή—
Συνδυασμοί υλικών εισόδου

Κείμενο σε εικόνα · Υποχρεωτικό: prompt

reference_images_generation · Υποχρεωτικό: prompt

Παράμετροι και κύκλος ζωής μεθόδου
ΠαράμετροςΣύμβαση
Παράμετροςmaterial_typesΣύμβασηtext
ΠαράμετροςrequiredΣύμβασηmodel, prompt
Παράμετροςoptional_controlsΣύμβασηnull
Παράμετροςcontent_typeΣύμβασηapplication/json

Κύκλος ζωής: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · Το πραγματικό task_id που επιστράφηκε ή μια εγγραφή στη βιβλιοθήκη πολυμέσων

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Οι δομές και τα ID των μεθόδων είναι ακριβή· η δυνατότητα του προμηθευτή είναι ξεχωριστή από την αποδοχή αιτημάτων.

Τιμολόγηση

Χρεώσεις μεθόδων Ailoot

Ailoot ΕικόνεςPOST /v1/images/generations
Έξοδος
0,075 $ ανά εικόνα ανάλυσης 1K
Έξοδος
0,075 $ ανά εικόνα ανάλυσης 2K

Το Ailoot δεσμεύει ένα εκτιμώμενο ποσό πριν από το αίτημα. Μετά το αποτέλεσμα, εκκαθαρίζει την τελική χρέωση βάσει της μετρημένης χρήσης. Η εκκαθάριση ροής χρησιμοποιεί την τελική καταγραφή χρήσης. Πώς λειτουργούν η δέσμευση και η εκκαθάριση →

Στοιχεία τιμοκαταλόγου αναφοράς

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

wan2.7-image-pro

Τιμές ανά διαμόρφωση

ΔιαμόρφωσηΣυνθήκες χρέωσηςΧρέωση
Διαμόρφωσηwan2.7-image-pro · Προεπιλεγμένη διαμόρφωσηΣυνθήκες χρέωσηςΠροεπιλεγμένη διαμόρφωσηΧρέωση
Είσοδος · Είσοδος 0,00 $ ανά κλήση
Έξοδος · Έξοδος 0,16 $ ανά κλήση

Παραδείγματα αιτημάτων

Ailoot · Εικόνες

curlPython SDKNode.js SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "wan2.7-image-pro", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'wan2.7-image-pro', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "wan2.7-image-pro", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");

Λήψη και αποθήκευση αποτελεσμάτων

Ailoot · Εικόνες

Κατεβάστε κάθε εικόνα που επιστρέφεται ή αποθηκεύστε το περιεχόμενο Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Διατηρήστε όλα τα ολοκληρωμένα αποτελέσματα

Αποθηκεύστε κάθε ολοκληρωμένη εικόνα· ανακτήστε κάθε URL που επιστρέφεται ή αποκωδικοποιήστε το περιεχόμενο Base64.

Αποθηκεύστε κάθε στοιχείο δεδομένων. Αποκωδικοποιήστε κάθε b64_json ή ανακτήστε κάθε υπογεγραμμένο URL που επιστράφηκε. Επιλέξτε την επέκταση του ονόματος αρχείου βάσει του πραγματικού τύπου MIME/των byte.

Αν χρειάζεται έλεγχος της αρχικής απάντησης

Αν το αποτέλεσμα παραγωγής ή επεξεργασίας εικόνας χρειάζεται έλεγχο, διατηρήστε το αρχικό operation_id/X-Client-Request-ID και τις πληροφορίες αποτελέσματος που επιστράφηκαν. Ανακτήστε τα υπάρχοντα αποτελέσματα που σας ανήκουν μέσω της βιβλιοθήκης πολυμέσων χρησιμοποιώντας πραγματικές τιμές task_id ή asset_id. Μην υποβάλετε ξανά το αίτημα παραγωγής/επεξεργασίας και μην κατασκευάσετε URL περιοδικού ελέγχου από το operation_id.

Πεδία απάντησης
ΠεδίοΤύπος
ΠεδίοcreatedΤύποςinteger
Πεδίοdata[].urlΤύποςstring
Πεδίοdata[].b64_jsonΤύποςbase64 string
ΠεδίοusageΤύποςobject
Σφάλματα και επόμενα βήματα
ΑπάντησηΣυνθήκηΕπόμενο βήμα
Απάντηση400 · invalid_request_errorΣυνθήκηΜη έγκυρα υποχρεωτικά πεδία, μη έγκυρη αναπαράσταση υλικού ή μη έγκυρη τιμή παραμέτρουΕπόμενο βήμαΔιορθώστε τα υποδεικνυόμενα πεδία πριν από νέο αίτημα δημιουργίας.
Απάντησηserver_errorΣυνθήκηΗ απόκριση που επιστράφηκε αναφέρει ότι η λειτουργία ή το αποτέλεσμα χρειάζεται έλεγχοΕπόμενο βήμαΔιατηρήστε το αρχικό ID της λειτουργίας/εργασίας που επιστράφηκε, τις κεφαλίδες του αιτήματος και την απόκριση· συνεχίστε με τις υποστηριζόμενες αναγνώσεις αυτής της αρχικής λειτουργίας. Μην υποβάλετε ξανά το αίτημα δημιουργίας.

Εναλλακτικά ονόματα

Εναλλακτικά ονόματα μοντέλου

Ailoot wan2.7-image-pro, wan-image, wan-image-latest

Εναλλακτικές διαδρομές μεθόδων

Χρησιμοποιήστε τις διαδρομές μεθόδων που εμφανίζονται παραπάνω.

Σχετικά ID μοντέλων

wan2.7-image-pro, wan-image, wan-image-latest

Ailoot · Εικόνες POST /v1/images/generations wan-image

wan-image

Alibaba /wan-image
ID μοντέλου
  • wan2.7-image-pro
  • wan-image
  • wan-image-latest

Εισαγωγή

Μοντέλο δημιουργίας εικόνων από οδηγίες κειμένου. Ο κατασκευαστής προβλέπει έλεγχο χρωματικής παλέτας και ανάλυση έως 4K για κανονική δημιουργία από κείμενο.

Αποδεκτές είσοδοι
Κείμενο
Αποτελέσματα
Εικόνες

Διαθέσιμα στο Ailoot · είσοδοι και μέθοδοι

Ailoot · Εικόνες POST /v1/images/generations
Είσοδος
text
Έξοδος
image
Μορφή εξόδου
Αρχείο εικόνας
ΠεδίοΤύποςΑπαίτησηΤιμές και όριαΠροεπιλογή
ΠεδίοmodelΤύποςstringΑπαίτησηΥποχρεωτικόΤιμές και όρια
wan-image
Προεπιλογή—
ΠεδίοpromptΤύποςstringΑπαίτησηΥποχρεωτικόΤιμές και όρια
Ελάχιστο μήκος: 1
Προεπιλογή—
ΠεδίοnΤύποςintegerΑπαίτησηΠροαιρετικόΤιμές και όρια
Ελάχιστο: 1
Προεπιλογή1
Πεδίοresponse_formatΤύποςstringΑπαίτησηΠροαιρετικόΤιμές και όρια
url, b64_json
Προεπιλογή—
ΠεδίοstreamΤύποςbooleanΑπαίτησηΠροαιρετικόΤιμές και όριαΠροεπιλογήfalse
ΠεδίοsizeΤύποςstringΑπαίτησηΠροαιρετικόΤιμές και όρια
Εξαρτάται από το μοντέλο
Προεπιλογή—
Πεδίοpartial_imagesΤύποςintegerΑπαίτησηΠροαιρετικόΤιμές και όρια
Εξαρτάται από το μοντέλο
Προεπιλογή—
Πεδίοimages[].image_urlΤύποςstringΑπαίτησηΔεν υποστηρίζεταιΤιμές και όρια
Μέγιστο πλήθος αποκωδικοποιημένων byte: 20.971.520
Τύποι MIME: image/png, image/jpeg
Μέγιστο πλήθος εικόνων ανά πίνακα: 9
Συνθήκες: Ένα πραγματικό URL ανά αντικείμενο images[]. Το πλήθος του πίνακα διαφέρει από αυτή την τελική τιμή συμβολοσειράς.
Εφαρμόζεται όταν: Μόνο JSON images/edits· το JSON images/generations δεν αναλύει αναφορές images.
Προεπιλογή—
ΠεδίοimageΤύποςfileΑπαίτησηΠροαιρετικόΤιμές και όρια
Μέγιστο πλήθος αποκωδικοποιημένων byte: 20.971.520
Τύποι MIME: image/png, image/jpeg
Εφαρμόζεται όταν: δημιουργία με multipart/form-data
Προεπιλογή—
Πεδίοimage[]Τύποςfile[]ΑπαίτησηΠροαιρετικόΤιμές και όρια
Μέγιστο πλήθος στοιχείων: 9
Μέγιστο πλήθος αποκωδικοποιημένων byte: 20.971.520
Τύποι MIME: image/png, image/jpeg
Εφαρμόζεται όταν: δημιουργία με multipart/form-data
Προεπιλογή—
Συνδυασμοί υλικών εισόδου

Κείμενο σε εικόνα · Υποχρεωτικό: prompt

reference_images_generation · Υποχρεωτικό: prompt

Παράμετροι και κύκλος ζωής μεθόδου
ΠαράμετροςΣύμβαση
Παράμετροςmaterial_typesΣύμβασηtext
ΠαράμετροςrequiredΣύμβασηmodel, prompt
Παράμετροςoptional_controlsΣύμβασηnull
Παράμετροςcontent_typeΣύμβασηapplication/json

Κύκλος ζωής: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · Το πραγματικό task_id που επιστράφηκε ή μια εγγραφή στη βιβλιοθήκη πολυμέσων

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Οι δομές και τα ID των μεθόδων είναι ακριβή· η δυνατότητα του προμηθευτή είναι ξεχωριστή από την αποδοχή αιτημάτων.

Τιμολόγηση

Χρεώσεις μεθόδων Ailoot

Ailoot ΕικόνεςPOST /v1/images/generations
Έξοδος
0,075 $ ανά εικόνα ανάλυσης 1K
Έξοδος
0,075 $ ανά εικόνα ανάλυσης 2K

Το Ailoot δεσμεύει ένα εκτιμώμενο ποσό πριν από το αίτημα. Μετά το αποτέλεσμα, εκκαθαρίζει την τελική χρέωση βάσει της μετρημένης χρήσης. Η εκκαθάριση ροής χρησιμοποιεί την τελική καταγραφή χρήσης. Πώς λειτουργούν η δέσμευση και η εκκαθάριση →

Στοιχεία τιμοκαταλόγου αναφοράς

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

wan2.7-image-pro

Τιμές ανά διαμόρφωση

ΔιαμόρφωσηΣυνθήκες χρέωσηςΧρέωση
Διαμόρφωσηwan2.7-image-pro · Προεπιλεγμένη διαμόρφωσηΣυνθήκες χρέωσηςΠροεπιλεγμένη διαμόρφωσηΧρέωση
Είσοδος · Είσοδος 0,00 $ ανά κλήση
Έξοδος · Έξοδος 0,16 $ ανά κλήση

Παραδείγματα αιτημάτων

Ailoot · Εικόνες

curlPython SDKNode.js SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "wan-image", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'wan-image', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "wan-image", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");

Λήψη και αποθήκευση αποτελεσμάτων

Ailoot · Εικόνες

Κατεβάστε κάθε εικόνα που επιστρέφεται ή αποθηκεύστε το περιεχόμενο Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Διατηρήστε όλα τα ολοκληρωμένα αποτελέσματα

Αποθηκεύστε κάθε ολοκληρωμένη εικόνα· ανακτήστε κάθε URL που επιστρέφεται ή αποκωδικοποιήστε το περιεχόμενο Base64.

Αποθηκεύστε κάθε στοιχείο δεδομένων. Αποκωδικοποιήστε κάθε b64_json ή ανακτήστε κάθε υπογεγραμμένο URL που επιστράφηκε. Επιλέξτε την επέκταση του ονόματος αρχείου βάσει του πραγματικού τύπου MIME/των byte.

Αν χρειάζεται έλεγχος της αρχικής απάντησης

Αν το αποτέλεσμα παραγωγής ή επεξεργασίας εικόνας χρειάζεται έλεγχο, διατηρήστε το αρχικό operation_id/X-Client-Request-ID και τις πληροφορίες αποτελέσματος που επιστράφηκαν. Ανακτήστε τα υπάρχοντα αποτελέσματα που σας ανήκουν μέσω της βιβλιοθήκης πολυμέσων χρησιμοποιώντας πραγματικές τιμές task_id ή asset_id. Μην υποβάλετε ξανά το αίτημα παραγωγής/επεξεργασίας και μην κατασκευάσετε URL περιοδικού ελέγχου από το operation_id.

Πεδία απάντησης
ΠεδίοΤύπος
ΠεδίοcreatedΤύποςinteger
Πεδίοdata[].urlΤύποςstring
Πεδίοdata[].b64_jsonΤύποςbase64 string
ΠεδίοusageΤύποςobject
Σφάλματα και επόμενα βήματα
ΑπάντησηΣυνθήκηΕπόμενο βήμα
Απάντηση400 · invalid_request_errorΣυνθήκηΜη έγκυρα υποχρεωτικά πεδία, μη έγκυρη αναπαράσταση υλικού ή μη έγκυρη τιμή παραμέτρουΕπόμενο βήμαΔιορθώστε τα υποδεικνυόμενα πεδία πριν από νέο αίτημα δημιουργίας.
Απάντησηserver_errorΣυνθήκηΗ απόκριση που επιστράφηκε αναφέρει ότι η λειτουργία ή το αποτέλεσμα χρειάζεται έλεγχοΕπόμενο βήμαΔιατηρήστε το αρχικό ID της λειτουργίας/εργασίας που επιστράφηκε, τις κεφαλίδες του αιτήματος και την απόκριση· συνεχίστε με τις υποστηριζόμενες αναγνώσεις αυτής της αρχικής λειτουργίας. Μην υποβάλετε ξανά το αίτημα δημιουργίας.

Εναλλακτικά ονόματα

Εναλλακτικά ονόματα μοντέλου

Ailoot wan2.7-image-pro, wan-image, wan-image-latest

Εναλλακτικές διαδρομές μεθόδων

Χρησιμοποιήστε τις διαδρομές μεθόδων που εμφανίζονται παραπάνω.

Σχετικά ID μοντέλων

wan2.7-image-pro, wan-image, wan-image-latest

Ailoot · Εικόνες POST /v1/images/generations wan-image-latest

wan-image-latest

Alibaba /wan-image-latest
ID μοντέλου
  • wan2.7-image-pro
  • wan-image
  • wan-image-latest

Εισαγωγή

Μοντέλο δημιουργίας εικόνων από οδηγίες κειμένου. Ο κατασκευαστής προβλέπει έλεγχο χρωματικής παλέτας και ανάλυση έως 4K για κανονική δημιουργία από κείμενο.

Αποδεκτές είσοδοι
Κείμενο
Αποτελέσματα
Εικόνες

Διαθέσιμα στο Ailoot · είσοδοι και μέθοδοι

Ailoot · Εικόνες POST /v1/images/generations
Είσοδος
text
Έξοδος
image
Μορφή εξόδου
Αρχείο εικόνας
ΠεδίοΤύποςΑπαίτησηΤιμές και όριαΠροεπιλογή
ΠεδίοmodelΤύποςstringΑπαίτησηΥποχρεωτικόΤιμές και όρια
wan-image-latest
Προεπιλογή—
ΠεδίοpromptΤύποςstringΑπαίτησηΥποχρεωτικόΤιμές και όρια
Ελάχιστο μήκος: 1
Προεπιλογή—
ΠεδίοnΤύποςintegerΑπαίτησηΠροαιρετικόΤιμές και όρια
Ελάχιστο: 1
Προεπιλογή1
Πεδίοresponse_formatΤύποςstringΑπαίτησηΠροαιρετικόΤιμές και όρια
url, b64_json
Προεπιλογή—
ΠεδίοstreamΤύποςbooleanΑπαίτησηΠροαιρετικόΤιμές και όριαΠροεπιλογήfalse
ΠεδίοsizeΤύποςstringΑπαίτησηΠροαιρετικόΤιμές και όρια
Εξαρτάται από το μοντέλο
Προεπιλογή—
Πεδίοpartial_imagesΤύποςintegerΑπαίτησηΠροαιρετικόΤιμές και όρια
Εξαρτάται από το μοντέλο
Προεπιλογή—
Πεδίοimages[].image_urlΤύποςstringΑπαίτησηΔεν υποστηρίζεταιΤιμές και όρια
Μέγιστο πλήθος αποκωδικοποιημένων byte: 20.971.520
Τύποι MIME: image/png, image/jpeg
Μέγιστο πλήθος εικόνων ανά πίνακα: 9
Συνθήκες: Ένα πραγματικό URL ανά αντικείμενο images[]. Το πλήθος του πίνακα διαφέρει από αυτή την τελική τιμή συμβολοσειράς.
Εφαρμόζεται όταν: Μόνο JSON images/edits· το JSON images/generations δεν αναλύει αναφορές images.
Προεπιλογή—
ΠεδίοimageΤύποςfileΑπαίτησηΠροαιρετικόΤιμές και όρια
Μέγιστο πλήθος αποκωδικοποιημένων byte: 20.971.520
Τύποι MIME: image/png, image/jpeg
Εφαρμόζεται όταν: δημιουργία με multipart/form-data
Προεπιλογή—
Πεδίοimage[]Τύποςfile[]ΑπαίτησηΠροαιρετικόΤιμές και όρια
Μέγιστο πλήθος στοιχείων: 9
Μέγιστο πλήθος αποκωδικοποιημένων byte: 20.971.520
Τύποι MIME: image/png, image/jpeg
Εφαρμόζεται όταν: δημιουργία με multipart/form-data
Προεπιλογή—
Συνδυασμοί υλικών εισόδου

Κείμενο σε εικόνα · Υποχρεωτικό: prompt

reference_images_generation · Υποχρεωτικό: prompt

Παράμετροι και κύκλος ζωής μεθόδου
ΠαράμετροςΣύμβαση
Παράμετροςmaterial_typesΣύμβασηtext
ΠαράμετροςrequiredΣύμβασηmodel, prompt
Παράμετροςoptional_controlsΣύμβασηnull
Παράμετροςcontent_typeΣύμβασηapplication/json

Κύκλος ζωής: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · Το πραγματικό task_id που επιστράφηκε ή μια εγγραφή στη βιβλιοθήκη πολυμέσων

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Οι δομές και τα ID των μεθόδων είναι ακριβή· η δυνατότητα του προμηθευτή είναι ξεχωριστή από την αποδοχή αιτημάτων.

Τιμολόγηση

Χρεώσεις μεθόδων Ailoot

Ailoot ΕικόνεςPOST /v1/images/generations
Έξοδος
0,075 $ ανά εικόνα ανάλυσης 1K
Έξοδος
0,075 $ ανά εικόνα ανάλυσης 2K

Το Ailoot δεσμεύει ένα εκτιμώμενο ποσό πριν από το αίτημα. Μετά το αποτέλεσμα, εκκαθαρίζει την τελική χρέωση βάσει της μετρημένης χρήσης. Η εκκαθάριση ροής χρησιμοποιεί την τελική καταγραφή χρήσης. Πώς λειτουργούν η δέσμευση και η εκκαθάριση →

Στοιχεία τιμοκαταλόγου αναφοράς

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

wan2.7-image-pro

Τιμές ανά διαμόρφωση

ΔιαμόρφωσηΣυνθήκες χρέωσηςΧρέωση
Διαμόρφωσηwan2.7-image-pro · Προεπιλεγμένη διαμόρφωσηΣυνθήκες χρέωσηςΠροεπιλεγμένη διαμόρφωσηΧρέωση
Είσοδος · Είσοδος 0,00 $ ανά κλήση
Έξοδος · Έξοδος 0,16 $ ανά κλήση

Παραδείγματα αιτημάτων

Ailoot · Εικόνες

curlPython SDKNode.js SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "wan-image-latest", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'wan-image-latest', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "wan-image-latest", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");

Λήψη και αποθήκευση αποτελεσμάτων

Ailoot · Εικόνες

Κατεβάστε κάθε εικόνα που επιστρέφεται ή αποθηκεύστε το περιεχόμενο Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Διατηρήστε όλα τα ολοκληρωμένα αποτελέσματα

Αποθηκεύστε κάθε ολοκληρωμένη εικόνα· ανακτήστε κάθε URL που επιστρέφεται ή αποκωδικοποιήστε το περιεχόμενο Base64.

Αποθηκεύστε κάθε στοιχείο δεδομένων. Αποκωδικοποιήστε κάθε b64_json ή ανακτήστε κάθε υπογεγραμμένο URL που επιστράφηκε. Επιλέξτε την επέκταση του ονόματος αρχείου βάσει του πραγματικού τύπου MIME/των byte.

Αν χρειάζεται έλεγχος της αρχικής απάντησης

Αν το αποτέλεσμα παραγωγής ή επεξεργασίας εικόνας χρειάζεται έλεγχο, διατηρήστε το αρχικό operation_id/X-Client-Request-ID και τις πληροφορίες αποτελέσματος που επιστράφηκαν. Ανακτήστε τα υπάρχοντα αποτελέσματα που σας ανήκουν μέσω της βιβλιοθήκης πολυμέσων χρησιμοποιώντας πραγματικές τιμές task_id ή asset_id. Μην υποβάλετε ξανά το αίτημα παραγωγής/επεξεργασίας και μην κατασκευάσετε URL περιοδικού ελέγχου από το operation_id.

Πεδία απάντησης
ΠεδίοΤύπος
ΠεδίοcreatedΤύποςinteger
Πεδίοdata[].urlΤύποςstring
Πεδίοdata[].b64_jsonΤύποςbase64 string
ΠεδίοusageΤύποςobject
Σφάλματα και επόμενα βήματα
ΑπάντησηΣυνθήκηΕπόμενο βήμα
Απάντηση400 · invalid_request_errorΣυνθήκηΜη έγκυρα υποχρεωτικά πεδία, μη έγκυρη αναπαράσταση υλικού ή μη έγκυρη τιμή παραμέτρουΕπόμενο βήμαΔιορθώστε τα υποδεικνυόμενα πεδία πριν από νέο αίτημα δημιουργίας.
Απάντησηserver_errorΣυνθήκηΗ απόκριση που επιστράφηκε αναφέρει ότι η λειτουργία ή το αποτέλεσμα χρειάζεται έλεγχοΕπόμενο βήμαΔιατηρήστε το αρχικό ID της λειτουργίας/εργασίας που επιστράφηκε, τις κεφαλίδες του αιτήματος και την απόκριση· συνεχίστε με τις υποστηριζόμενες αναγνώσεις αυτής της αρχικής λειτουργίας. Μην υποβάλετε ξανά το αίτημα δημιουργίας.

Εναλλακτικά ονόματα

Εναλλακτικά ονόματα μοντέλου

Ailoot wan2.7-image-pro, wan-image, wan-image-latest

Εναλλακτικές διαδρομές μεθόδων

Χρησιμοποιήστε τις διαδρομές μεθόδων που εμφανίζονται παραπάνω.

Σχετικά ID μοντέλων

wan2.7-image-pro, wan-image, wan-image-latest

FAQ · wan2.7-image-pro
Ποιες είσοδοι και αποτελέσματα διατίθενται;

POST /v1/images/generations · wan2.7-image-pro: text → image

POST /v1/images/generations · wan-image: text → image

POST /v1/images/generations · wan-image-latest: text → image

Ποια πεδία χρησιμοποιεί το αίτημα;

POST /v1/images/generations · wan2.7-image-pro: model, prompt, n, response_format, stream, image, image[]

POST /v1/images/generations · wan-image: model, prompt, n, response_format, stream, image, image[]

POST /v1/images/generations · wan-image-latest: model, prompt, n, response_format, stream, image, image[]

Ποια όρια ισχύουν;

POST /v1/images/generations · wan2.7-image-pro: n.minimum: 1

POST /v1/images/generations · wan-image: n.minimum: 1

POST /v1/images/generations · wan-image-latest: n.minimum: 1

Περισσότερες λεπτομέρειες

Συνδέστε το Ailoot με Claude Code, OpenCode, Hermes ή τη δική σας εφαρμογή.

Η εταιρεία και το χαρτοφυλάκιο έργων της

Η εταιρεία και το χαρτοφυλάκιο έργων της: εκατομμύρια πελάτες· μηνιαίες πωλήσεις δισεκατομμυρίων.

Αγοράστε token με έκπτωση.

Έκπτωση συνδρομής για τακτική χρήση. Προωθητικοί κωδικοί — έως 50% στην αγορά token.

Συνδρομή
Επιλέξτε πρόγραμμα με έκπτωση για τα τακτικά αιτήματά σας.
Προωθητικός κωδικός έως 50%
Εισαγάγετε τον κωδικό στην αγορά. Η τιμή επανυπολογίζεται σύμφωνα με την ενεργή προσφορά.
Δαπάνες στο ιστορικό
Μοντέλο, token και ποσό αποθηκεύονται για κάθε αίτημα.

Επιλέξτε συνδρομή · Δείτε τιμές μοντέλων

Συνδέστε το API με το προϊόν που πουλάτε.

SaaS, εφαρμογές και bot — σύμφωνα με τη δημόσια προσφορά και τη σύμβαση άδειας χρήσης Ailoot. Για μεταπώληση ζητήστε σχετική άδεια.

Εμπορική εφαρμογή
Ενσωματώστε δημιουργία κειμένου, εικόνων, βίντεο και ήχου στις πληρωμένες λειτουργίες της υπηρεσίας σας.
Άδεια για μεταπωλητή
Στείλτε περιγραφή έργου και τρόπο πρόσβασης. Ζητήστε γραπτούς όρους χρήσης και μεταπώλησης.
Έγγραφα στον ιστότοπο
Δημόσια προσφορά, σύμβαση άδειας χρήσης και πολιτική επεξεργασίας δεδομένων είναι διαθέσιμες πριν τη σύνδεση.

Ζητήστε άδεια μεταπώλησης · Δημόσια προσφορά και σύμβαση άδειας χρήσης