Recraft: Recraft V3
Το Recraft V3 δημιουργεί φωτογραφίες, εικονογραφήσεις και γραφιστικές διατάξεις με σύνθεση που λαμβάνει υπόψη το κείμενο και ελέγχους ύφους. Οι διακριτές παραλλαγές raster και SVG ταιριάζουν σε αφίσες, επώνυμα σύνολα εικόνων, εικονίδια και σχέδια όπου διατύπωση και οπτική δομή πρέπει να συνεργάζονται.
Σχετικά με το μοντέλο
Αυτή η περιγραφή καλύπτει τις δυνατότητες του μοντέλου. Οι είσοδοι, έξοδοι και επιλογές που διατίθενται στο Ailoot παρατίθενται παρακάτω για την επιλεγμένη μέθοδο.
Το Recraft V3 είναι μοντέλο δημιουργίας εικόνων φτιαγμένο για γραφιστικό σχεδιασμό, καθώς και φωτογραφικές και εικονογραφημένες σκηνές. Μια γραπτή περιγραφή ορίζει θέμα, περιβάλλον και σύνθεση· το αποτέλεσμα είναι εικόνα. Το V3 αναπτύσσει την απόδοση κειμένου και τον φωτορεαλισμό της Recraft, διατηρώντας συνέπεια ύφους από εικόνες παραδείγματος χωρίς επανεκπαίδευση.
Το κείμενο ως μέρος της σύνθεσης
Το V3 δουλεύει με κείμενο μέσα στην εικόνα, μαζί με μεγαλύτερα κείμενα και γράμματα μεσαίου μεγέθους. Η Recraft περιγράφει στάδιο διάταξης που καθορίζει λέξεις και θέσεις τους πριν τη δημιουργία εικόνας. Η διάταξη μπορεί να παράγεται αυτόματα από την περιγραφή ή να οργανώνεται χειροκίνητα στο σχεδιαστικό περιβάλλον της Recraft. Αυτό βοηθά στη σύνδεση τίτλου, εικονογράφησης και υποστηρικτικού κειμένου σε μία σύνθεση. Ο κατασκευαστής τεκμηριώνει επίσης ρητές συντεταγμένες διάταξης κειμένου, εκφρασμένες ως προς την εικόνα αντί για σταθερό πλέγμα pixel. Κάθε στοιχείο κειμένου περιέχει μία λέξη και τέσσερα γωνιακά σημεία σε κανονικοποιημένες συντεταγμένες: το (0, 0) είναι επάνω αριστερά και το (1, 1) κάτω δεξιά. Οι συντεταγμένες μπορεί να εκτείνονται εκτός αυτού του εύρους, οπότε το σχήμα περικόπτεται. Οι ρητές λέξεις διάταξης κειμένου πρέπει να ακολουθούν τους τεκμηριωμένους περιορισμούς χαρακτήρων.
Για αφίσα ή εξώφυλλο, δώστε την ακριβή διατύπωση και περιγράψτε την ιεραρχία: ποια γραμμή προηγείται, πού βρίσκεται και πώς την υποστηρίζει η εικόνα. Ελέγξτε την αποδοσμένη ορθογραφία και τις αποστάσεις όταν επιλέγετε αποτέλεσμα.
Ύφος, παλέτα και καλλιτεχνική κατεύθυνση
Το V3 περιλαμβάνει επιμελημένα ύφη φωτογραφίας, εικονογράφησης και εμβλημάτων, μαζί με χωριστή βιβλιοθήκη διανυσματικών υφών. Το Recraft V3 Raw είναι το προεπιλεγμένο ύφος μοντέλου raster· το Vector art είναι προεπιλογή για τη διανυσματική παραλλαγή. Το Photorealism στοχεύει σε φωτογραφική εμφάνιση, ενώ το Illustration υποστηρίζει στυλιζαρισμένες υφές, σκίαση και πιο σύνθετες χρωματικές μεταβάσεις. Τα διανυσματικά ύφη ευνοούν σχήματα, περιορισμένες παλέτες και επίπεδα γεμίσματα ή απλές διαβαθμίσεις.
Τα προσαρμοσμένα ύφη μπορούν να δημιουργούνται από εικόνες αναφοράς, υπάρχοντα συμβατά ύφη ή συνδυασμό. Παρέχουν επαναχρησιμοποιήσιμη οπτική κατεύθυνση σε σειρά εικόνων. Οι τεκμηριωμένοι έλεγχοι μίξης επιτρέπουν χωριστά βάρη για αναφορές και αρχικά ύφη· το πλήθος βαρών αντιστοιχεί στις πηγές. Τα PaletteMatch και MaxWeight είναι οι δύο αναφερόμενες πολιτικές μίξης. Ο κατασκευαστής επιτρέπει έως 10 εικόνες αναφοράς ύφους και χρησιμοποιεί την κανονική λειτουργία αντιστοίχισης ύφους για V3. Αποθηκευμένο προσαρμοσμένο ύφος και απευθείας αναφορές ύφους είναι εναλλακτικές είσοδοι και το προσαρμοσμένο ύφος πρέπει να ταιριάζει με το μοντέλο δημιουργίας.
Προτιμώμενα χρώματα και χρώμα φόντου καθοδηγούν την παλέτα. Τεκμηριώνονται έως 10 χρώματα RGB, με κάθε συνιστώσα από 0 έως 255. Προαιρετικά σχετικά βάρη κυμαίνονται από 0 έως 1· πρέπει να παρέχονται για κάθε χρώμα ή για κανένα και το άθροισμά τους δεν μπορεί να υπερβαίνει το 1. Το καλλιτεχνικό επίπεδο κυμαίνεται από 0 για στατική, καθαρή απόδοση έως 5 για πιο δυναμικές, εκκεντρικές συνθέσεις. Μια αρνητική προτροπή περιγράφει ανεπιθύμητα στοιχεία· χωριστός έλεγχος χωρίς κείμενο απενεργοποιεί τις ενσωματωμένες διατάξεις κειμένου. Διατίθεται τυχαίο seed για αναπαραγωγιμότητα. Αυτοί οι έλεγχοι δίνουν διαφορετικούς μοχλούς για τη σκηνή, το ύφος της και την οπτική διάταξη.
Εικόνες raster και χωριστή παραλλαγή SVG
Η Recraft τεκμηριώνει δύο παραλλαγές V3. Το μοντέλο raster παράγει WebP χωρίς απώλειες ή PNG και είναι κατάλληλο για φωτογραφική λεπτομέρεια, σκίαση και εικονογράφηση με υφές. Το Recraft V3 Vector παράγει SVG: διαδρομές και σχήματα που μπορούν να κλιμακώνονται χωρίς σταθερή ανάλυση pixel. Ταιριάζει σε εικονογράμματα, ιδέες λογοτύπων, σήματα και λεπτομερή διανυσματικά εικαστικά. Η μετατροπή raster σε vector είναι χωριστή λειτουργία από την απευθείας δημιουργία διανυσματικού εικαστικού.
Και οι δύο παραλλαγές έχουν δική τους ταυτότητα. Μια εικόνα με διανυσματική εμφάνιση και μια πραγματική έξοδος SVG είναι διαφορετικές επιλογές. Επιλέξτε την επιθυμητή έξοδο όταν προετοιμάζετε σχεδιαστική ροή, αντί να αντιμετωπίζετε το κοινό όνομα V3 ως απόδειξη ότι κάθε λειτουργία επιστρέφει ίδιο τύπο αρχείου.
Επεξεργασία και ολοκλήρωση υπάρχοντος εικαστικού
Η τεκμηρίωση V3 της Recraft αναφέρει δημιουργία εικόνας προς εικόνα, inpainting, outpainting και αντικατάσταση ή δημιουργία φόντου. Η εργασία εικόνας προς εικόνα συνδυάζει υπάρχουσα εικόνα με νέα περιγραφή. Το inpainting αναδημιουργεί την επιλεγμένη περιοχή χρησιμοποιώντας εικόνα και αντίστοιχη μάσκα· το outpainting προσθέτει περιεχόμενο πέρα από το αρχικό κάδρο. Οι λειτουργίες φόντου αφορούν το περιβάλλον θέματος.
Το συνοδευτικό σύνολο εργαλείων περιλαμβάνει επίσης σβήσιμο, αφαίρεση φόντου, διανυσματοποίηση και δύο προσεγγίσεις αύξησης ανάλυσης. Η δημιουργική αύξηση ανάλυσης μπορεί να εισάγει νέα λεπτομέρεια· η crisp αύξηση ανάλυσης στοχεύει σε πιο ευκρινή μεγαλύτερη απόδοση υπάρχοντος περιεχομένου. Πρόκειται για διακριτές λειτουργίες με δικές τους εισόδους και αποτελέσματα, αντί για πρόσθετες σημασίες του ονόματος μοντέλου raster ή vector.
Όρια προτροπής, μεγέθους και αρχικής εικόνας
Η προδιαγραφή δημιουργίας V3 του κατασκευαστή δέχεται προτροπή έως 1000 χαρακτήρες και 1–6 εικόνες ανά αίτημα. Υποστηρίζει 14 αναλογίες: 1:1, 2:1, 1:2, 3:2, 2:3, 4:3, 3:4, 5:4, 4:5, 6:10, 14:10, 10:14, 16:9 και 9:16. Τα τεκμηριωμένα παραδείγματα raster περιλαμβάνουν 1024x1024, 1820x1024 και 1024x1820. Οι ακριβείς διαστάσεις raster πρέπει να προέρχονται από την υποστηριζόμενη λίστα· το SVG χρησιμοποιεί αναλογίες χωρίς σταθερό μέγεθος pixel. Όταν παραλείπεται το μέγεθος, το σύστημα κατασκευαστή το επιλέγει από την προτροπή.
Για λειτουργίες εισόδου εικόνας, ο κατασκευαστής αναφέρει PNG, JPG και WebP, με SVG όπου το επιτρέπει η συγκεκριμένη λειτουργία. Τα αρχεία πρέπει να είναι κάτω από 20 MB, έως 16 MP, με μεγαλύτερη πλευρά έως 4096 pixel. Η μικρότερη πλευρά είναι τουλάχιστον 256 pixel, με εξαίρεση 32 pixel για crisp αύξηση ανάλυσης. Οι μάσκες αντιστοιχούν στο μέγεθος εικόνας και χρησιμοποιούν καθαρό μαύρο και λευκό· οι αναφορές ύφους έχουν συνολικό όριο 64 MB.
Για έργο Ailoot API, μετατρέψτε την εργασία σε εστιασμένη περιγραφή εικόνας: ακριβές κείμενο, διάταξη αντικειμένων, οπτικό ύφος και επιθυμητή σύνθεση. Αφίσα, σκηνή προϊόντος και σειρά εικονιδίων χρειάζονται διαφορετικές περιγραφές· διατηρήστε τις σχετικές διακρίσεις παραλλαγής και λειτουργίας V3 όταν αποφασίζετε πώς θα χρησιμοποιηθεί κάθε αποτέλεσμα.
Ailoot Ultra · Εικόνες POST /v1/images/generations recraft/recraft-v3
recraft/recraft-v3Εισαγωγή
Το Recraft V3 δημιουργεί φωτογραφίες, εικονογραφήσεις και γραφιστικές διατάξεις με σύνθεση που λαμβάνει υπόψη το κείμενο και ελέγχους ύφους. Οι διακριτές παραλλαγές raster και SVG ταιριάζουν σε αφίσες, επώνυμα σύνολα εικόνων, εικονίδια και σχέδια όπου διατύπωση και οπτική δομή πρέπει να συνεργάζονται.
- Αποδεκτές είσοδοι
- Κείμενο · Εικόνες
- Αποτελέσματα
- Εικόνες
Διαθέσιμα στο Ailoot · είσοδοι και μέθοδοι
Ailoot Ultra · Εικόνες POST /v1/images/generations
- Είσοδος
text,image- Έξοδος
image- Μορφή εξόδου
- Αρχείο εικόνας
| Πεδίο | Τύπος | Απαίτηση | Τιμές και όρια | Προεπιλογή |
|---|---|---|---|---|
Πεδίοmodel | Τύποςstring | ΑπαίτησηΥποχρεωτικό | Τιμές και όρια recraft/recraft-v3 | Προεπιλογή— |
Πεδίοprompt | Τύποςstring | ΑπαίτησηΥποχρεωτικό | Τιμές και όρια Ελάχιστο μήκος: 1 | Προεπιλογή— |
Πεδίοn | Τύποςinteger | ΑπαίτησηΠροαιρετικό | Τιμές και όρια Ελάχιστο: 1 Μέγιστο: 6 | Προεπιλογή— |
Πεδίοaspect_ratio | Τύποςstring | ΑπαίτησηΠροαιρετικό | Τιμές και όρια 1:1, 4:3, 3:4, 16:9, 9:16, auto | Προεπιλογή— |
Πεδίοinput_references | Τύποςarray | ΑπαίτησηΠροαιρετικό | Τιμές και όρια Ελάχιστο πλήθος στοιχείων: 0 Μέγιστο πλήθος στοιχείων: 1 | Προεπιλογή— |
Συνδυασμοί υλικών εισόδου
Κείμενο σε εικόνα · Υποχρεωτικό: prompt
Παράμετροι και κύκλος ζωής μεθόδου
| Παράμετρος | Σύμβαση |
|---|---|
Παράμετροςcontent_type | Σύμβασηapplication/json |
Παράμετροςrequired | Σύμβασηmodel, prompt |
Παράμετροςmaterial_types | Σύμβασηtext, image |
Παράμετροςoptional_controls | Σύμβασηaspect_ratio, n, input_references |
Παράμετροςexact_supported_parameters | Σύμβαση{"aspect_ratio":{"type":"enum","values":["1:1","4:3","3:4","16:9","9:16","auto"]},"n":{"type":"range","min":1,"max":6},"input_references":{"type":"range","min":0,"max":1}} |
Παράμετροςreference_material_rule | ΣύμβασηΜόνο πραγματικές εικόνες αναφοράς του πελάτη· διέπονται από τις προϋποθέσεις του τελικού σημείου του παρόχου. |
Εναλλακτικά ονόματα μεθόδου: /v1/images
Κύκλος ζωής: 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 που επιστρέφονται.
Τιμολόγηση
Πώς υπολογίζεται η τελική χρέωση
Οι εμφανιζόμενες τιμές χρησιμοποιούνται για την εκτίμηση του κόστους πριν από την παραγωγή. Η τελική χρέωση υπολογίζεται από το κόστος που καταγράφηκε για την αρχική παραγωγή. Η μετρημένη διάρκεια της εξόδου και οι προβλεπόμενες ποσότητες δεν αποτελούν την τελική χρεώσιμη ποσότητα.
Οι τιμολογιακές αναφορές δεν προσθέτουν επιλογές αιτήματος. Οι υποστηριζόμενες παράμετροι αναφέρονται στην επιλεγμένη μέθοδο.
- Γρήγορη λειτουργία
- Δεν έχει οριστεί Όταν επιλέγεται η γρήγορη λειτουργία
- Λειτουργία flex
- Δεν έχει οριστεί Όταν επιλέγεται η λειτουργία flex
- Μέγιστη προσπάθεια συλλογισμού
- Δεν έχει οριστεί Όταν η μέγιστη προσπάθεια συλλογισμού χρησιμοποιεί την προσαρμογή default
Εκτιμώμενες χρεώσεις για σύγκριση
Τιμές ανά διαμόρφωση
Αντιστοιχίστε κάθε χρέωση στις συνθήκες που εμφανίζονται. Χρησιμοποιήστε μία χρέωση ανά σύνολο εναλλακτικών διαμορφώσεων.
| Διαμόρφωση | Πίνακας χρεώσεων | Προβλεπόμενη ποσότητα | Μονάδα τιμολόγησης | Χρέωση |
|---|---|---|---|---|
| ΔιαμόρφωσηΒασικές χρεώσεις token | Πίνακας χρεώσεωνΒασική χρέωση | Προβλεπόμενη ποσότητα— | Μονάδα τιμολόγησης— | Χρέωση Είσοδος · Token εισόδου · Εκτίμηση μόνο για σύγκριση — / 1K token Έξοδος · Token εξόδου · Εκτίμηση μόνο για σύγκριση — / 1K token Είσοδος · Ανάγνωση από την κρυφή μνήμη · Εκτίμηση μόνο για σύγκριση — / 1K token Είσοδος · Εγγραφή στην κρυφή μνήμη · Εκτίμηση μόνο για σύγκριση — / 1K token Είσοδος · Εγγραφή στην κρυφή μνήμη, 1 ώρα · Εκτίμηση μόνο για σύγκριση — / 1K token |
| ΔιαμόρφωσηUltra | Πίνακας χρεώσεων— | Προβλεπόμενη ποσότητα— | Μονάδα τιμολόγησηςανά εικόνα εξόδου | Χρέωση Έξοδος · έξοδος εικόνας · Εκτίμηση μόνο για σύγκριση $0.08 ανά εικόνα εξόδου |
| ΔιαμόρφωσηΕκτιμώμενο κόστος δημιουργίας | Πίνακας χρεώσεων— | Προβλεπόμενη ποσότηταεκτίμηση για μία δημιουργία | Μονάδα τιμολόγησης— | Χρέωση Έξοδος · Εκτιμώμενο κόστος δημιουργίας · Εκτίμηση μόνο για σύγκριση $0.08 εκτίμηση πριν από τη δημιουργία Αυτή η εκτίμηση δεν αποτελεί πρόσθετη χρέωση ούτε σταθερή τιμή για την ολοκληρωμένη παραγωγή. |
Το Ailoot δεσμεύει ένα εκτιμώμενο ποσό πριν από το αίτημα. Μετά το αποτέλεσμα, εκκαθαρίζει την τελική χρέωση βάσει της μετρημένης χρήσης. Η εκκαθάριση ροής χρησιμοποιεί την τελική καταγραφή χρήσης. Πώς λειτουργούν η δέσμευση και η εκκαθάριση →
Στοιχεία τιμοκαταλόγου αναφοράς
Οι πίνακες αναφοράς του μοντέλου δεν αλλάζουν την επιλογή μεθόδου, τις εκτιμήσεις τιμής ή τις χρεώσεις. Οι εφαρμοζόμενες χρεώσεις χρησιμοποιούν τις τιμές της επιλεγμένης μεθόδου Ailoot.
Διαμορφώσεις τιμολόγησης εικόνων
Τιμές ανά διαμόρφωση
| Διαμόρφωση | Συνθήκες χρέωσης | Χρέωση |
|---|---|---|
| ΔιαμόρφωσηΕικόνα εξόδου | Συνθήκες χρέωσηςΔεν δηλώνεται παραλλαγή τιμολόγησης. | Χρέωση Έξοδος · Εικόνα εξόδου $0.08 ανά εικόνα Οι ισοδύναμες καταχωρίσεις περιγράφουν την ίδια χρέωση· δεν προσθέτουν δεύτερη χρέωση. |
Παραδείγματα αιτημάτων
Ailoot Ultra · Εικόνες
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'recraft/recraft-v3', 'prompt': 'a red panda astronaut floating in space, studio lighting'}
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")
request={'model': 'recraft/recraft-v3', 'prompt': 'a red panda astronaut floating in space, studio lighting'}
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": "recraft/recraft-v3", "prompt": "a red panda astronaut floating in space, studio lighting"};
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 Ultra · Εικόνες
Κατεβάστε κάθε εικόνα που επιστρέφεται ή αποθηκεύστε το περιεχόμενο Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Διατηρήστε όλα τα ολοκληρωμένα αποτελέσματα
Αποθηκεύστε κάθε ολοκληρωμένη εικόνα· ανακτήστε κάθε URL που επιστρέφεται ή αποκωδικοποιήστε το περιεχόμενο Base64.
Διατηρήστε κάθε στοιχείο δεδομένων και ολόκληρη τη χρήση· εξασφαλίστε ότι όλες οι πραγματικές εικόνες που επιστρέφονται σας ανήκουν και αποθηκεύστε τις. Χωρίς επινοημένα URL ή ID.
Αν χρειάζεται έλεγχος της αρχικής απάντησης
Αν το αποτέλεσμα παραγωγής ή επεξεργασίας εικόνας χρειάζεται έλεγχο, διατηρήστε το αρχικό 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 |
Εναλλακτικά ονόματα
Εναλλακτικά ονόματα μοντέλου
Ailoot Ultra recraft/recraft-v3
Εναλλακτικές διαδρομές μεθόδων
/v1/images
Σχετικά ID μοντέλων
FAQ · Recraft: Recraft V3
- Ποιες είσοδοι και αποτελέσματα διατίθενται;
POST /v1/images/generations·recraft/recraft-v3:text,image→image- Ποια πεδία χρησιμοποιεί το αίτημα;
POST /v1/images/generations·recraft/recraft-v3:model,prompt,n,aspect_ratio,input_references- Ποια όρια ισχύουν;
POST /v1/images/generations·recraft/recraft-v3:n.minimum:1;n.maximum:6