wan2.7-image
Μοντέλο δημιουργίας εικόνων από κείμενο για παραλλαγές σχεδιασμού και εικονογραφήσεις. Σύμφωνα με την Alibaba, αυτή η έκδοση έχει σχεδιαστεί για ταχύτερη δημιουργία εικόνων.
Σχετικά με το μοντέλο
Αυτή η περιγραφή καλύπτει τις δυνατότητες του μοντέλου. Οι είσοδοι, έξοδοι και επιλογές που διατίθενται στο Ailoot παρατίθενται παρακάτω για την επιλεγμένη μέθοδο.
Το Wan2.7-Image δημιουργεί εικόνες από οδηγίες κειμένου. Η τρέχουσα κάρτα του Ailoot παρουσιάζει αποκλειστικά είσοδο κειμένου και αποτέλεσμα σε μορφή εικόνας. Σύμφωνα με την Alibaba, η συγκεκριμένη έκδοση προορίζεται για ταχύτερη παραγωγή παραλλαγών. Οι προδιαγραφές του κατασκευαστή περιλαμβάνουν επίσης επεξεργασία, συνδυασμό εικόνων αναφοράς και τοπικές αλλαγές· απαιτούν ξεχωριστή υποστήριξη εικόνων εισόδου, η οποία δεν περιλαμβάνεται στην τρέχουσα μέθοδο της κάρτας.
Λειτουργίες που περιγράφει η Alibaba
Για τη λειτουργία με εικόνες αναφοράς, η Alibaba προβλέπει έως εννέα αρχικές εικόνες στις οδηγίες. Χρησιμεύουν ως βάση για την εμφάνιση του αντικειμένου, τη σύνθεση και τις λεπτομέρειες. Το μοντέλο μπορεί να συνδυάζει διαφορετικό υλικό σε μια νέα σκηνή ή να αλλάζει την αρχική εικόνα διατηρώντας το κύριο αντικείμενο. Για στοχευμένη επεξεργασία προβλέπονται ρητά ορισμένες περιοχές: σε μία εικόνα μπορούν να οριστούν έως δύο ορθογώνια τμήματα.
Στις προδιαγραφές της Alibaba η κανονική λειτουργία παράγει από ένα έως τέσσερα αποτελέσματα. Μια διαδοχική σειρά επιτρέπει αίτημα για έως 12 εικόνες που συνδέονται με ιστορία ή κοινά χαρακτηριστικά χαρακτήρων. Για τη σειρά, αυτό είναι ανώτατο όριο: το μοντέλο καθορίζει μόνο του πόσα καρέ χρειάζονται και μπορεί να επιστρέψει λιγότερα. Οι οδηγίες και το αρχικό υλικό βοηθούν να διατηρείται κοινή αφηγηματική γραμμή.
Για κανονική δημιουργία από κείμενο, χωρίς εικόνες αναφοράς και διαδοχική σειρά, προβλέπεται λειτουργία συλλογισμού. Σε αυτήν το μοντέλο αναλύει λεπτομερέστερα μια σύνθετη περιγραφή πριν δημιουργήσει την εικόνα. Η λειτουργία δεν εφαρμόζεται κατά την επεξεργασία με εικόνες ούτε σε διαδοχική σειρά. Η χρήση καθορισμένης παλέτας από 3–10 χρώματα είναι διαθέσιμη εκτός διαδοχικών σειρών.
Είσοδος και αποτέλεσμα
Στις λειτουργίες του κατασκευαστή με αρχικές εικόνες υποστηρίζονται JPEG, JPG, PNG χωρίς διαφάνεια, BMP και WEBP. Κάθε πλευρά μπορεί να έχει από 240 έως 8000 pixel, το μέγεθος αρχείου έως 20 MB και ο λόγος διαστάσεων από 1:8 έως 8:1.
Οι οδηγίες κειμένου υποστηρίζουν κινεζικά και αγγλικά και περιορίζονται σε 5000 χαρακτήρες· το επιπλέον τμήμα απορρίπτεται. Για τη συγκεκριμένη έκδοση δεν προβλέπονται αρνητική περιγραφή ούτε πρόσθετη επέκταση των οδηγιών.
Η μορφή εξόδου είναι PNG και η ανάλυση φτάνει έως το επίπεδο 2K. Ο όρος αφορά τη συνολική επιφάνεια σε pixel και όχι σταθερό μέγιστο μήκος πλευράς· το σχήμα μπορεί να επιλεγεί σε εύρος από 1:8 έως 8:1. Κατά την επεξεργασία με προκαθορισμένη ανάλυση, το αποτέλεσμα διατηρεί τον λόγο διαστάσεων της τελευταίας εικόνας αναφοράς. Η ίδια αρχική τιμή τυχαιότητας βοηθά να προκύψουν παρόμοιες παραλλαγές, αλλά δεν εγγυάται πλήρη ταύτιση.
Ailoot · Εικόνες POST /v1/images/generations wan2.7-image
wan2.7-imageΕισαγωγή
Μοντέλο δημιουργίας εικόνων από κείμενο για παραλλαγές σχεδιασμού και εικονογραφήσεις. Σύμφωνα με την Alibaba, αυτή η έκδοση έχει σχεδιαστεί για ταχύτερη δημιουργία εικόνων.
- Αποδεκτές είσοδοι
- Κείμενο
- Αποτελέσματα
- Εικόνες
Διαθέσιμα στο Ailoot · είσοδοι και μέθοδοι
Ailoot · Εικόνες POST /v1/images/generations
- Είσοδος
text- Έξοδος
image- Μορφή εξόδου
- Αρχείο εικόνας
| Πεδίο | Τύπος | Απαίτηση | Τιμές και όρια | Προεπιλογή |
|---|---|---|---|---|
Πεδίοmodel | Τύποςstring | ΑπαίτησηΥποχρεωτικό | Τιμές και όρια wan2.7-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
POST /v1/images/generations- Έξοδος
- 0,03 $ ανά εικόνα ανάλυσης 1K
- Έξοδος
- 0,03 $ ανά εικόνα ανάλυσης 2K
Το Ailoot δεσμεύει ένα εκτιμώμενο ποσό πριν από το αίτημα. Μετά το αποτέλεσμα, εκκαθαρίζει την τελική χρέωση βάσει της μετρημένης χρήσης. Η εκκαθάριση ροής χρησιμοποιεί την τελική καταγραφή χρήσης. Πώς λειτουργούν η δέσμευση και η εκκαθάριση →
Στοιχεία τιμοκαταλόγου αναφοράς
Οι πίνακες αναφοράς του μοντέλου δεν αλλάζουν την επιλογή μεθόδου, τις εκτιμήσεις τιμής ή τις χρεώσεις. Οι εφαρμοζόμενες χρεώσεις χρησιμοποιούν τις τιμές της επιλεγμένης μεθόδου Ailoot.
wan2.7-image
Τιμές ανά διαμόρφωση
| Διαμόρφωση | Συνθήκες χρέωσης | Χρέωση |
|---|---|---|
| Διαμόρφωσηwan2.7-image · Προεπιλεγμένη διαμόρφωση | Συνθήκες χρέωσηςΠροεπιλεγμένη διαμόρφωση | Χρέωση Είσοδος · Είσοδος 0,00 $ ανά κλήση Έξοδος · Έξοδος 0,06 $ ανά κλήση |
Παραδείγματα αιτημάτων
Ailoot · Εικόνες
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", "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', '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", "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}/contentGET /v1/media/assetsGET /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
Εναλλακτικές διαδρομές μεθόδων
Χρησιμοποιήστε τις διαδρομές μεθόδων που εμφανίζονται παραπάνω.
Σχετικά ID μοντέλων
FAQ · wan2.7-image
- Ποιες είσοδοι και αποτελέσματα διατίθενται;
POST /v1/images/generations·wan2.7-image:text→image- Ποια πεδία χρησιμοποιεί το αίτημα;
POST /v1/images/generations·wan2.7-image:model,prompt,n,response_format,stream,image,image[]- Ποια όρια ισχύουν;
POST /v1/images/generations·wan2.7-image:n.minimum:1