{
  "aboutHtml": "<p>Το Recraft V3 είναι μοντέλο δημιουργίας εικόνων φτιαγμένο για γραφιστικό σχεδιασμό, καθώς και φωτογραφικές και εικονογραφημένες σκηνές. Μια γραπτή περιγραφή ορίζει θέμα, περιβάλλον και σύνθεση· το αποτέλεσμα είναι εικόνα. Το V3 αναπτύσσει την απόδοση κειμένου και τον φωτορεαλισμό της Recraft, διατηρώντας συνέπεια ύφους από εικόνες παραδείγματος χωρίς επανεκπαίδευση.</p><h4>Το κείμενο ως μέρος της σύνθεσης</h4><p>Το V3 δουλεύει με κείμενο μέσα στην εικόνα, μαζί με μεγαλύτερα κείμενα και γράμματα μεσαίου μεγέθους. Η Recraft περιγράφει στάδιο διάταξης που καθορίζει λέξεις και θέσεις τους πριν τη δημιουργία εικόνας. Η διάταξη μπορεί να παράγεται αυτόματα από την περιγραφή ή να οργανώνεται χειροκίνητα στο σχεδιαστικό περιβάλλον της Recraft. Αυτό βοηθά στη σύνδεση τίτλου, εικονογράφησης και υποστηρικτικού κειμένου σε μία σύνθεση. Ο κατασκευαστής τεκμηριώνει επίσης ρητές συντεταγμένες διάταξης κειμένου, εκφρασμένες ως προς την εικόνα αντί για σταθερό πλέγμα pixel. Κάθε στοιχείο κειμένου περιέχει μία λέξη και τέσσερα γωνιακά σημεία σε κανονικοποιημένες συντεταγμένες: το (0, 0) είναι επάνω αριστερά και το (1, 1) κάτω δεξιά. Οι συντεταγμένες μπορεί να εκτείνονται εκτός αυτού του εύρους, οπότε το σχήμα περικόπτεται. Οι ρητές λέξεις διάταξης κειμένου πρέπει να ακολουθούν τους τεκμηριωμένους περιορισμούς χαρακτήρων.</p><p>Για αφίσα ή εξώφυλλο, δώστε την ακριβή διατύπωση και περιγράψτε την ιεραρχία: ποια γραμμή προηγείται, πού βρίσκεται και πώς την υποστηρίζει η εικόνα. Ελέγξτε την αποδοσμένη ορθογραφία και τις αποστάσεις όταν επιλέγετε αποτέλεσμα.</p><h4>Ύφος, παλέτα και καλλιτεχνική κατεύθυνση</h4><p>Το V3 περιλαμβάνει επιμελημένα ύφη φωτογραφίας, εικονογράφησης και εμβλημάτων, μαζί με χωριστή βιβλιοθήκη διανυσματικών υφών. Το Recraft V3 Raw είναι το προεπιλεγμένο ύφος μοντέλου raster· το Vector art είναι προεπιλογή για τη διανυσματική παραλλαγή. Το Photorealism στοχεύει σε φωτογραφική εμφάνιση, ενώ το Illustration υποστηρίζει στυλιζαρισμένες υφές, σκίαση και πιο σύνθετες χρωματικές μεταβάσεις. Τα διανυσματικά ύφη ευνοούν σχήματα, περιορισμένες παλέτες και επίπεδα γεμίσματα ή απλές διαβαθμίσεις.</p><p>Τα προσαρμοσμένα ύφη μπορούν να δημιουργούνται από εικόνες αναφοράς, υπάρχοντα συμβατά ύφη ή συνδυασμό. Παρέχουν επαναχρησιμοποιήσιμη οπτική κατεύθυνση σε σειρά εικόνων. Οι τεκμηριωμένοι έλεγχοι μίξης επιτρέπουν χωριστά βάρη για αναφορές και αρχικά ύφη· το πλήθος βαρών αντιστοιχεί στις πηγές. Τα PaletteMatch και MaxWeight είναι οι δύο αναφερόμενες πολιτικές μίξης. Ο κατασκευαστής επιτρέπει έως 10 εικόνες αναφοράς ύφους και χρησιμοποιεί την κανονική λειτουργία αντιστοίχισης ύφους για V3. Αποθηκευμένο προσαρμοσμένο ύφος και απευθείας αναφορές ύφους είναι εναλλακτικές είσοδοι και το προσαρμοσμένο ύφος πρέπει να ταιριάζει με το μοντέλο δημιουργίας.</p><p>Προτιμώμενα χρώματα και χρώμα φόντου καθοδηγούν την παλέτα. Τεκμηριώνονται έως 10 χρώματα RGB, με κάθε συνιστώσα από 0 έως 255. Προαιρετικά σχετικά βάρη κυμαίνονται από 0 έως 1· πρέπει να παρέχονται για κάθε χρώμα ή για κανένα και το άθροισμά τους δεν μπορεί να υπερβαίνει το 1. Το καλλιτεχνικό επίπεδο κυμαίνεται από 0 για στατική, καθαρή απόδοση έως 5 για πιο δυναμικές, εκκεντρικές συνθέσεις. Μια αρνητική προτροπή περιγράφει ανεπιθύμητα στοιχεία· χωριστός έλεγχος χωρίς κείμενο απενεργοποιεί τις ενσωματωμένες διατάξεις κειμένου. Διατίθεται τυχαίο seed για αναπαραγωγιμότητα. Αυτοί οι έλεγχοι δίνουν διαφορετικούς μοχλούς για τη σκηνή, το ύφος της και την οπτική διάταξη.</p><h4>Εικόνες raster και χωριστή παραλλαγή SVG</h4><p>Η Recraft τεκμηριώνει δύο παραλλαγές V3. Το μοντέλο raster παράγει WebP χωρίς απώλειες ή PNG και είναι κατάλληλο για φωτογραφική λεπτομέρεια, σκίαση και εικονογράφηση με υφές. Το Recraft V3 Vector παράγει SVG: διαδρομές και σχήματα που μπορούν να κλιμακώνονται χωρίς σταθερή ανάλυση pixel. Ταιριάζει σε εικονογράμματα, ιδέες λογοτύπων, σήματα και λεπτομερή διανυσματικά εικαστικά. Η μετατροπή raster σε vector είναι χωριστή λειτουργία από την απευθείας δημιουργία διανυσματικού εικαστικού.</p><p>Και οι δύο παραλλαγές έχουν δική τους ταυτότητα. Μια εικόνα με διανυσματική εμφάνιση και μια πραγματική έξοδος SVG είναι διαφορετικές επιλογές. Επιλέξτε την επιθυμητή έξοδο όταν προετοιμάζετε σχεδιαστική ροή, αντί να αντιμετωπίζετε το κοινό όνομα V3 ως απόδειξη ότι κάθε λειτουργία επιστρέφει ίδιο τύπο αρχείου.</p><h4>Επεξεργασία και ολοκλήρωση υπάρχοντος εικαστικού</h4><p>Η τεκμηρίωση V3 της Recraft αναφέρει δημιουργία εικόνας προς εικόνα, inpainting, outpainting και αντικατάσταση ή δημιουργία φόντου. Η εργασία εικόνας προς εικόνα συνδυάζει υπάρχουσα εικόνα με νέα περιγραφή. Το inpainting αναδημιουργεί την επιλεγμένη περιοχή χρησιμοποιώντας εικόνα και αντίστοιχη μάσκα· το outpainting προσθέτει περιεχόμενο πέρα από το αρχικό κάδρο. Οι λειτουργίες φόντου αφορούν το περιβάλλον θέματος.</p><p>Το συνοδευτικό σύνολο εργαλείων περιλαμβάνει επίσης σβήσιμο, αφαίρεση φόντου, διανυσματοποίηση και δύο προσεγγίσεις αύξησης ανάλυσης. Η δημιουργική αύξηση ανάλυσης μπορεί να εισάγει νέα λεπτομέρεια· η crisp αύξηση ανάλυσης στοχεύει σε πιο ευκρινή μεγαλύτερη απόδοση υπάρχοντος περιεχομένου. Πρόκειται για διακριτές λειτουργίες με δικές τους εισόδους και αποτελέσματα, αντί για πρόσθετες σημασίες του ονόματος μοντέλου raster ή vector.</p><h4>Όρια προτροπής, μεγέθους και αρχικής εικόνας</h4><p>Η προδιαγραφή δημιουργίας 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. Όταν παραλείπεται το μέγεθος, το σύστημα κατασκευαστή το επιλέγει από την προτροπή.</p><p>Για λειτουργίες εισόδου εικόνας, ο κατασκευαστής αναφέρει PNG, JPG και WebP, με SVG όπου το επιτρέπει η συγκεκριμένη λειτουργία. Τα αρχεία πρέπει να είναι κάτω από 20 MB, έως 16 MP, με μεγαλύτερη πλευρά έως 4096 pixel. Η μικρότερη πλευρά είναι τουλάχιστον 256 pixel, με εξαίρεση 32 pixel για crisp αύξηση ανάλυσης. Οι μάσκες αντιστοιχούν στο μέγεθος εικόνας και χρησιμοποιούν καθαρό μαύρο και λευκό· οι αναφορές ύφους έχουν συνολικό όριο 64 MB.</p><p>Για έργο Ailoot API, μετατρέψτε την εργασία σε εστιασμένη περιγραφή εικόνας: ακριβές κείμενο, διάταξη αντικειμένων, οπτικό ύφος και επιθυμητή σύνθεση. Αφίσα, σκηνή προϊόντος και σειρά εικονιδίων χρειάζονται διαφορετικές περιγραφές· διατηρήστε τις σχετικές διακρίσεις παραλλαγής και λειτουργίας V3 όταν αποφασίζετε πώς θα χρησιμοποιηθεί κάθε αποτέλεσμα.</p>",
  "aboutText": "Το Recraft V3 είναι μοντέλο δημιουργίας εικόνων φτιαγμένο για γραφιστικό σχεδιασμό, καθώς και φωτογραφικές και εικονογραφημένες σκηνές. Μια γραπτή περιγραφή ορίζει θέμα, περιβάλλον και σύνθεση· το αποτέλεσμα είναι εικόνα. Το V3 αναπτύσσει την απόδοση κειμένου και τον φωτορεαλισμό της Recraft, διατηρώντας συνέπεια ύφους από εικόνες παραδείγματος χωρίς επανεκπαίδευση.\n\n### Το κείμενο ως μέρος της σύνθεσης\n\nΤο V3 δουλεύει με κείμενο μέσα στην εικόνα, μαζί με μεγαλύτερα κείμενα και γράμματα μεσαίου μεγέθους. Η Recraft περιγράφει στάδιο διάταξης που καθορίζει λέξεις και θέσεις τους πριν τη δημιουργία εικόνας. Η διάταξη μπορεί να παράγεται αυτόματα από την περιγραφή ή να οργανώνεται χειροκίνητα στο σχεδιαστικό περιβάλλον της Recraft. Αυτό βοηθά στη σύνδεση τίτλου, εικονογράφησης και υποστηρικτικού κειμένου σε μία σύνθεση. Ο κατασκευαστής τεκμηριώνει επίσης ρητές συντεταγμένες διάταξης κειμένου, εκφρασμένες ως προς την εικόνα αντί για σταθερό πλέγμα pixel. Κάθε στοιχείο κειμένου περιέχει μία λέξη και τέσσερα γωνιακά σημεία σε κανονικοποιημένες συντεταγμένες: το (0, 0) είναι επάνω αριστερά και το (1, 1) κάτω δεξιά. Οι συντεταγμένες μπορεί να εκτείνονται εκτός αυτού του εύρους, οπότε το σχήμα περικόπτεται. Οι ρητές λέξεις διάταξης κειμένου πρέπει να ακολουθούν τους τεκμηριωμένους περιορισμούς χαρακτήρων.\n\nΓια αφίσα ή εξώφυλλο, δώστε την ακριβή διατύπωση και περιγράψτε την ιεραρχία: ποια γραμμή προηγείται, πού βρίσκεται και πώς την υποστηρίζει η εικόνα. Ελέγξτε την αποδοσμένη ορθογραφία και τις αποστάσεις όταν επιλέγετε αποτέλεσμα.\n\n### Ύφος, παλέτα και καλλιτεχνική κατεύθυνση\n\nΤο V3 περιλαμβάνει επιμελημένα ύφη φωτογραφίας, εικονογράφησης και εμβλημάτων, μαζί με χωριστή βιβλιοθήκη διανυσματικών υφών. Το Recraft V3 Raw είναι το προεπιλεγμένο ύφος μοντέλου raster· το Vector art είναι προεπιλογή για τη διανυσματική παραλλαγή. Το Photorealism στοχεύει σε φωτογραφική εμφάνιση, ενώ το Illustration υποστηρίζει στυλιζαρισμένες υφές, σκίαση και πιο σύνθετες χρωματικές μεταβάσεις. Τα διανυσματικά ύφη ευνοούν σχήματα, περιορισμένες παλέτες και επίπεδα γεμίσματα ή απλές διαβαθμίσεις.\n\nΤα προσαρμοσμένα ύφη μπορούν να δημιουργούνται από εικόνες αναφοράς, υπάρχοντα συμβατά ύφη ή συνδυασμό. Παρέχουν επαναχρησιμοποιήσιμη οπτική κατεύθυνση σε σειρά εικόνων. Οι τεκμηριωμένοι έλεγχοι μίξης επιτρέπουν χωριστά βάρη για αναφορές και αρχικά ύφη· το πλήθος βαρών αντιστοιχεί στις πηγές. Τα PaletteMatch και MaxWeight είναι οι δύο αναφερόμενες πολιτικές μίξης. Ο κατασκευαστής επιτρέπει έως 10 εικόνες αναφοράς ύφους και χρησιμοποιεί την κανονική λειτουργία αντιστοίχισης ύφους για V3. Αποθηκευμένο προσαρμοσμένο ύφος και απευθείας αναφορές ύφους είναι εναλλακτικές είσοδοι και το προσαρμοσμένο ύφος πρέπει να ταιριάζει με το μοντέλο δημιουργίας.\n\nΠροτιμώμενα χρώματα και χρώμα φόντου καθοδηγούν την παλέτα. Τεκμηριώνονται έως 10 χρώματα RGB, με κάθε συνιστώσα από 0 έως 255. Προαιρετικά σχετικά βάρη κυμαίνονται από 0 έως 1· πρέπει να παρέχονται για κάθε χρώμα ή για κανένα και το άθροισμά τους δεν μπορεί να υπερβαίνει το 1. Το καλλιτεχνικό επίπεδο κυμαίνεται από 0 για στατική, καθαρή απόδοση έως 5 για πιο δυναμικές, εκκεντρικές συνθέσεις. Μια αρνητική προτροπή περιγράφει ανεπιθύμητα στοιχεία· χωριστός έλεγχος χωρίς κείμενο απενεργοποιεί τις ενσωματωμένες διατάξεις κειμένου. Διατίθεται τυχαίο seed για αναπαραγωγιμότητα. Αυτοί οι έλεγχοι δίνουν διαφορετικούς μοχλούς για τη σκηνή, το ύφος της και την οπτική διάταξη.\n\n### Εικόνες raster και χωριστή παραλλαγή SVG\n\nΗ Recraft τεκμηριώνει δύο παραλλαγές V3. Το μοντέλο raster παράγει WebP χωρίς απώλειες ή PNG και είναι κατάλληλο για φωτογραφική λεπτομέρεια, σκίαση και εικονογράφηση με υφές. Το Recraft V3 Vector παράγει SVG: διαδρομές και σχήματα που μπορούν να κλιμακώνονται χωρίς σταθερή ανάλυση pixel. Ταιριάζει σε εικονογράμματα, ιδέες λογοτύπων, σήματα και λεπτομερή διανυσματικά εικαστικά. Η μετατροπή raster σε vector είναι χωριστή λειτουργία από την απευθείας δημιουργία διανυσματικού εικαστικού.\n\nΚαι οι δύο παραλλαγές έχουν δική τους ταυτότητα. Μια εικόνα με διανυσματική εμφάνιση και μια πραγματική έξοδος SVG είναι διαφορετικές επιλογές. Επιλέξτε την επιθυμητή έξοδο όταν προετοιμάζετε σχεδιαστική ροή, αντί να αντιμετωπίζετε το κοινό όνομα V3 ως απόδειξη ότι κάθε λειτουργία επιστρέφει ίδιο τύπο αρχείου.\n\n### Επεξεργασία και ολοκλήρωση υπάρχοντος εικαστικού\n\nΗ τεκμηρίωση V3 της Recraft αναφέρει δημιουργία εικόνας προς εικόνα, inpainting, outpainting και αντικατάσταση ή δημιουργία φόντου. Η εργασία εικόνας προς εικόνα συνδυάζει υπάρχουσα εικόνα με νέα περιγραφή. Το inpainting αναδημιουργεί την επιλεγμένη περιοχή χρησιμοποιώντας εικόνα και αντίστοιχη μάσκα· το outpainting προσθέτει περιεχόμενο πέρα από το αρχικό κάδρο. Οι λειτουργίες φόντου αφορούν το περιβάλλον θέματος.\n\nΤο συνοδευτικό σύνολο εργαλείων περιλαμβάνει επίσης σβήσιμο, αφαίρεση φόντου, διανυσματοποίηση και δύο προσεγγίσεις αύξησης ανάλυσης. Η δημιουργική αύξηση ανάλυσης μπορεί να εισάγει νέα λεπτομέρεια· η crisp αύξηση ανάλυσης στοχεύει σε πιο ευκρινή μεγαλύτερη απόδοση υπάρχοντος περιεχομένου. Πρόκειται για διακριτές λειτουργίες με δικές τους εισόδους και αποτελέσματα, αντί για πρόσθετες σημασίες του ονόματος μοντέλου raster ή vector.\n\n### Όρια προτροπής, μεγέθους και αρχικής εικόνας\n\nΗ προδιαγραφή δημιουργίας 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. Όταν παραλείπεται το μέγεθος, το σύστημα κατασκευαστή το επιλέγει από την προτροπή.\n\nΓια λειτουργίες εισόδου εικόνας, ο κατασκευαστής αναφέρει PNG, JPG και WebP, με SVG όπου το επιτρέπει η συγκεκριμένη λειτουργία. Τα αρχεία πρέπει να είναι κάτω από 20 MB, έως 16 MP, με μεγαλύτερη πλευρά έως 4096 pixel. Η μικρότερη πλευρά είναι τουλάχιστον 256 pixel, με εξαίρεση 32 pixel για crisp αύξηση ανάλυσης. Οι μάσκες αντιστοιχούν στο μέγεθος εικόνας και χρησιμοποιούν καθαρό μαύρο και λευκό· οι αναφορές ύφους έχουν συνολικό όριο 64 MB.\n\nΓια έργο Ailoot API, μετατρέψτε την εργασία σε εστιασμένη περιγραφή εικόνας: ακριβές κείμενο, διάταξη αντικειμένων, οπτικό ύφος και επιθυμητή σύνθεση. Αφίσα, σκηνή προϊόντος και σειρά εικονιδίων χρειάζονται διαφορετικές περιγραφές· διατηρήστε τις σχετικές διακρίσεις παραλλαγής και λειτουργίας V3 όταν αποφασίζετε πώς θα χρησιμοποιηθεί κάθε αποτέλεσμα.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "be017e94beb49619b2018ea6469f21cecc78ab9e42cd8c6e1127a3e45ec80257",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "el",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Recraft: Recraft V3</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Κλείσιμο\">×</button></div><div class=\"idline\"><span>Recraft /</span><code>recraft/recraft-v3</code><button type=\"button\" id=\"copy-id\">Αντιγραφή ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Ενότητες κάρτας μοντέλου\"><button type=\"button\" data-card-jump=\"overview\">Εισαγωγή</button><button type=\"button\" data-card-jump=\"methods\">Είσοδοι και μέθοδοι</button><button type=\"button\" data-card-jump=\"pricing\">Τιμολόγηση</button><button type=\"button\" data-card-jump=\"examples\">Παραδείγματα</button><button type=\"button\" data-card-jump=\"results\">Αποτελέσματα</button><button type=\"button\" data-card-jump=\"aliases\">Εναλλακτικά ονόματα</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Μέθοδοι API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|images|/v1/images/generations|recraft%2Frecraft-v3\">Εικόνες</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Εισαγωγή</h3><p class=\"mdesc-full\">Το Recraft V3 δημιουργεί φωτογραφίες, εικονογραφήσεις και γραφιστικές διατάξεις με σύνθεση που λαμβάνει υπόψη το κείμενο και ελέγχους ύφους. Οι διακριτές παραλλαγές raster και SVG ταιριάζουν σε αφίσες, επώνυμα σύνολα εικόνων, εικονίδια και σχέδια όπου διατύπωση και οπτική δομή πρέπει να συνεργάζονται.</p><dl class=\"card-io\" data-card-io><div><dt>Αποδεκτές είσοδοι</dt><dd>Κείμενο · Εικόνες</dd></div><div><dt>Αποτελέσματα</dt><dd>Εικόνες</dd></div></dl><details class=\"card-about\"><summary>Σχετικά με το μοντέλο</summary><p class=\"note-s\" data-model-method-boundary>Αυτή η περιγραφή καλύπτει τις δυνατότητες του μοντέλου. Οι είσοδοι, έξοδοι και επιλογές που διατίθενται στο Ailoot παρατίθενται παρακάτω για την επιλεγμένη μέθοδο.</p><div class=\"mabout\" id=\"m-about\"><p>Το Recraft V3 είναι μοντέλο δημιουργίας εικόνων φτιαγμένο για γραφιστικό σχεδιασμό, καθώς και φωτογραφικές και εικονογραφημένες σκηνές. Μια γραπτή περιγραφή ορίζει θέμα, περιβάλλον και σύνθεση· το αποτέλεσμα είναι εικόνα. Το V3 αναπτύσσει την απόδοση κειμένου και τον φωτορεαλισμό της Recraft, διατηρώντας συνέπεια ύφους από εικόνες παραδείγματος χωρίς επανεκπαίδευση.</p><h4>Το κείμενο ως μέρος της σύνθεσης</h4><p>Το V3 δουλεύει με κείμενο μέσα στην εικόνα, μαζί με μεγαλύτερα κείμενα και γράμματα μεσαίου μεγέθους. Η Recraft περιγράφει στάδιο διάταξης που καθορίζει λέξεις και θέσεις τους πριν τη δημιουργία εικόνας. Η διάταξη μπορεί να παράγεται αυτόματα από την περιγραφή ή να οργανώνεται χειροκίνητα στο σχεδιαστικό περιβάλλον της Recraft. Αυτό βοηθά στη σύνδεση τίτλου, εικονογράφησης και υποστηρικτικού κειμένου σε μία σύνθεση. Ο κατασκευαστής τεκμηριώνει επίσης ρητές συντεταγμένες διάταξης κειμένου, εκφρασμένες ως προς την εικόνα αντί για σταθερό πλέγμα pixel. Κάθε στοιχείο κειμένου περιέχει μία λέξη και τέσσερα γωνιακά σημεία σε κανονικοποιημένες συντεταγμένες: το (0, 0) είναι επάνω αριστερά και το (1, 1) κάτω δεξιά. Οι συντεταγμένες μπορεί να εκτείνονται εκτός αυτού του εύρους, οπότε το σχήμα περικόπτεται. Οι ρητές λέξεις διάταξης κειμένου πρέπει να ακολουθούν τους τεκμηριωμένους περιορισμούς χαρακτήρων.</p><p>Για αφίσα ή εξώφυλλο, δώστε την ακριβή διατύπωση και περιγράψτε την ιεραρχία: ποια γραμμή προηγείται, πού βρίσκεται και πώς την υποστηρίζει η εικόνα. Ελέγξτε την αποδοσμένη ορθογραφία και τις αποστάσεις όταν επιλέγετε αποτέλεσμα.</p><h4>Ύφος, παλέτα και καλλιτεχνική κατεύθυνση</h4><p>Το V3 περιλαμβάνει επιμελημένα ύφη φωτογραφίας, εικονογράφησης και εμβλημάτων, μαζί με χωριστή βιβλιοθήκη διανυσματικών υφών. Το Recraft V3 Raw είναι το προεπιλεγμένο ύφος μοντέλου raster· το Vector art είναι προεπιλογή για τη διανυσματική παραλλαγή. Το Photorealism στοχεύει σε φωτογραφική εμφάνιση, ενώ το Illustration υποστηρίζει στυλιζαρισμένες υφές, σκίαση και πιο σύνθετες χρωματικές μεταβάσεις. Τα διανυσματικά ύφη ευνοούν σχήματα, περιορισμένες παλέτες και επίπεδα γεμίσματα ή απλές διαβαθμίσεις.</p><p>Τα προσαρμοσμένα ύφη μπορούν να δημιουργούνται από εικόνες αναφοράς, υπάρχοντα συμβατά ύφη ή συνδυασμό. Παρέχουν επαναχρησιμοποιήσιμη οπτική κατεύθυνση σε σειρά εικόνων. Οι τεκμηριωμένοι έλεγχοι μίξης επιτρέπουν χωριστά βάρη για αναφορές και αρχικά ύφη· το πλήθος βαρών αντιστοιχεί στις πηγές. Τα PaletteMatch και MaxWeight είναι οι δύο αναφερόμενες πολιτικές μίξης. Ο κατασκευαστής επιτρέπει έως 10 εικόνες αναφοράς ύφους και χρησιμοποιεί την κανονική λειτουργία αντιστοίχισης ύφους για V3. Αποθηκευμένο προσαρμοσμένο ύφος και απευθείας αναφορές ύφους είναι εναλλακτικές είσοδοι και το προσαρμοσμένο ύφος πρέπει να ταιριάζει με το μοντέλο δημιουργίας.</p><p>Προτιμώμενα χρώματα και χρώμα φόντου καθοδηγούν την παλέτα. Τεκμηριώνονται έως 10 χρώματα RGB, με κάθε συνιστώσα από 0 έως 255. Προαιρετικά σχετικά βάρη κυμαίνονται από 0 έως 1· πρέπει να παρέχονται για κάθε χρώμα ή για κανένα και το άθροισμά τους δεν μπορεί να υπερβαίνει το 1. Το καλλιτεχνικό επίπεδο κυμαίνεται από 0 για στατική, καθαρή απόδοση έως 5 για πιο δυναμικές, εκκεντρικές συνθέσεις. Μια αρνητική προτροπή περιγράφει ανεπιθύμητα στοιχεία· χωριστός έλεγχος χωρίς κείμενο απενεργοποιεί τις ενσωματωμένες διατάξεις κειμένου. Διατίθεται τυχαίο seed για αναπαραγωγιμότητα. Αυτοί οι έλεγχοι δίνουν διαφορετικούς μοχλούς για τη σκηνή, το ύφος της και την οπτική διάταξη.</p><h4>Εικόνες raster και χωριστή παραλλαγή SVG</h4><p>Η Recraft τεκμηριώνει δύο παραλλαγές V3. Το μοντέλο raster παράγει WebP χωρίς απώλειες ή PNG και είναι κατάλληλο για φωτογραφική λεπτομέρεια, σκίαση και εικονογράφηση με υφές. Το Recraft V3 Vector παράγει SVG: διαδρομές και σχήματα που μπορούν να κλιμακώνονται χωρίς σταθερή ανάλυση pixel. Ταιριάζει σε εικονογράμματα, ιδέες λογοτύπων, σήματα και λεπτομερή διανυσματικά εικαστικά. Η μετατροπή raster σε vector είναι χωριστή λειτουργία από την απευθείας δημιουργία διανυσματικού εικαστικού.</p><p>Και οι δύο παραλλαγές έχουν δική τους ταυτότητα. Μια εικόνα με διανυσματική εμφάνιση και μια πραγματική έξοδος SVG είναι διαφορετικές επιλογές. Επιλέξτε την επιθυμητή έξοδο όταν προετοιμάζετε σχεδιαστική ροή, αντί να αντιμετωπίζετε το κοινό όνομα V3 ως απόδειξη ότι κάθε λειτουργία επιστρέφει ίδιο τύπο αρχείου.</p><h4>Επεξεργασία και ολοκλήρωση υπάρχοντος εικαστικού</h4><p>Η τεκμηρίωση V3 της Recraft αναφέρει δημιουργία εικόνας προς εικόνα, inpainting, outpainting και αντικατάσταση ή δημιουργία φόντου. Η εργασία εικόνας προς εικόνα συνδυάζει υπάρχουσα εικόνα με νέα περιγραφή. Το inpainting αναδημιουργεί την επιλεγμένη περιοχή χρησιμοποιώντας εικόνα και αντίστοιχη μάσκα· το outpainting προσθέτει περιεχόμενο πέρα από το αρχικό κάδρο. Οι λειτουργίες φόντου αφορούν το περιβάλλον θέματος.</p><p>Το συνοδευτικό σύνολο εργαλείων περιλαμβάνει επίσης σβήσιμο, αφαίρεση φόντου, διανυσματοποίηση και δύο προσεγγίσεις αύξησης ανάλυσης. Η δημιουργική αύξηση ανάλυσης μπορεί να εισάγει νέα λεπτομέρεια· η crisp αύξηση ανάλυσης στοχεύει σε πιο ευκρινή μεγαλύτερη απόδοση υπάρχοντος περιεχομένου. Πρόκειται για διακριτές λειτουργίες με δικές τους εισόδους και αποτελέσματα, αντί για πρόσθετες σημασίες του ονόματος μοντέλου raster ή vector.</p><h4>Όρια προτροπής, μεγέθους και αρχικής εικόνας</h4><p>Η προδιαγραφή δημιουργίας 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. Όταν παραλείπεται το μέγεθος, το σύστημα κατασκευαστή το επιλέγει από την προτροπή.</p><p>Για λειτουργίες εισόδου εικόνας, ο κατασκευαστής αναφέρει PNG, JPG και WebP, με SVG όπου το επιτρέπει η συγκεκριμένη λειτουργία. Τα αρχεία πρέπει να είναι κάτω από 20 MB, έως 16 MP, με μεγαλύτερη πλευρά έως 4096 pixel. Η μικρότερη πλευρά είναι τουλάχιστον 256 pixel, με εξαίρεση 32 pixel για crisp αύξηση ανάλυσης. Οι μάσκες αντιστοιχούν στο μέγεθος εικόνας και χρησιμοποιούν καθαρό μαύρο και λευκό· οι αναφορές ύφους έχουν συνολικό όριο 64 MB.</p><p>Για έργο Ailoot API, μετατρέψτε την εργασία σε εστιασμένη περιγραφή εικόνας: ακριβές κείμενο, διάταξη αντικειμένων, οπτικό ύφος και επιθυμητή σύνθεση. Αφίσα, σκηνή προϊόντος και σειρά εικονιδίων χρειάζονται διαφορετικές περιγραφές· διατηρήστε τις σχετικές διακρίσεις παραλλαγής και λειτουργίας V3 όταν αποφασίζετε πώς θα χρησιμοποιηθεί κάθε αποτέλεσμα.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Διαθέσιμα στο Ailoot · είσοδοι και μέθοδοι</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Εικόνες</b> <code>POST /v1/images/generations</code></summary><dl class=\"method-capabilities\"><div><dt>Είσοδος</dt><dd><code>text</code>, <code>image</code></dd></div><div><dt>Έξοδος</dt><dd><code>image</code></dd></div><div><dt>Μορφή εξόδου</dt><dd>Αρχείο εικόνας</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Πεδίο</th><th>Τύπος</th><th>Απαίτηση</th><th>Τιμές και όρια</th><th>Προεπιλογή</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>string</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Υποχρεωτικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span><div>recraft/recraft-v3</div></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>string</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Υποχρεωτικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span><div>Ελάχιστο μήκος: 1</div></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"saved_exact_supplier_endpoint\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">n</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>integer</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Προαιρετικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span><div>Ελάχιστο: 1</div><div>Μέγιστο: 6</div></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"saved_exact_supplier_endpoint\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>string</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Προαιρετικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span><div>1:1, 4:3, 3:4, 16:9, 9:16, auto</div></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"saved_exact_supplier_endpoint\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>array</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Προαιρετικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span><div>Ελάχιστο πλήθος στοιχείων: 0</div><div>Μέγιστο πλήθος στοιχείων: 1</div></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Συνδυασμοί υλικών εισόδου</summary><p class=\"note-s\"><b>Κείμενο σε εικόνα</b> · Υποχρεωτικό: prompt</p></details><details class=\"note-s\" data-method-contract><summary>Παράμετροι και κύκλος ζωής μεθόδου</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Παράμετρος</th><th>Σύμβαση</th></tr></thead><tbody><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>content_type</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>application/json</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>required</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>model, prompt</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>material_types</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>text, image</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>optional_controls</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>aspect_ratio, n, input_references</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>exact_supported_parameters</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>{&quot;aspect_ratio&quot;:{&quot;type&quot;:&quot;enum&quot;,&quot;values&quot;:[&quot;1:1&quot;,&quot;4:3&quot;,&quot;3:4&quot;,&quot;16:9&quot;,&quot;9:16&quot;,&quot;auto&quot;]},&quot;n&quot;:{&quot;type&quot;:&quot;range&quot;,&quot;min&quot;:1,&quot;max&quot;:6},&quot;input_references&quot;:{&quot;type&quot;:&quot;range&quot;,&quot;min&quot;:0,&quot;max&quot;:1}}</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>reference_material_rule</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>Μόνο πραγματικές εικόνες αναφοράς του πελάτη· διέπονται από τις προϋποθέσεις του τελικού σημείου του παρόχου.</td></tr></tbody></table></div><p>Εναλλακτικά ονόματα μεθόδου: <code>/v1/images</code></p><p>Κύκλος ζωής: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · Το πραγματικό task_id που επιστράφηκε ή μια εγγραφή στη βιβλιοθήκη πολυμέσων</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p><p class=\"note-s\">Χρησιμοποιήστε το ακριβές μοντέλο και τα τεκμηριωμένα πεδία εισόδου.</p><p class=\"note-s\">Διατηρήστε ολόκληρη την απόκριση, κάθε πραγματική έξοδο και τα αρχικά ID που επιστρέφονται.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Τιμολόγηση</h3><div class=\"card-result-process\" data-billing-basis><h5>Πώς υπολογίζεται η τελική χρέωση</h5><p class=\"note-s\">Οι εμφανιζόμενες τιμές χρησιμοποιούνται για την εκτίμηση του κόστους πριν από την παραγωγή. Η τελική χρέωση υπολογίζεται από το κόστος που καταγράφηκε για την αρχική παραγωγή. Η μετρημένη διάρκεια της εξόδου και οι προβλεπόμενες ποσότητες δεν αποτελούν την τελική χρεώσιμη ποσότητα.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Οι τιμολογιακές αναφορές δεν προσθέτουν επιλογές αιτήματος. Οι υποστηριζόμενες παράμετροι αναφέρονται στην επιλεγμένη μέθοδο.</p><dl data-price-conditions><dt>Γρήγορη λειτουργία</dt><dd>Δεν έχει οριστεί <span class=\"note-s\">Όταν επιλέγεται η γρήγορη λειτουργία</span></dd><dt>Λειτουργία flex</dt><dd>Δεν έχει οριστεί <span class=\"note-s\">Όταν επιλέγεται η λειτουργία flex</span></dd><dt>Μέγιστη προσπάθεια συλλογισμού</dt><dd>Δεν έχει οριστεί <span class=\"note-s\">Όταν η μέγιστη προσπάθεια συλλογισμού χρησιμοποιεί την προσαρμογή default</span></dd></dl></div><div data-declared-tariff-pricing><h4>Εκτιμώμενες χρεώσεις για σύγκριση</h4><h4>Τιμές ανά διαμόρφωση</h4><p class=\"note-s\">Αντιστοιχίστε κάθε χρέωση στις συνθήκες που εμφανίζονται. Χρησιμοποιήστε μία χρέωση ανά σύνολο εναλλακτικών διαμορφώσεων.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Διαμόρφωση</th><th>Πίνακας χρεώσεων</th><th>Προβλεπόμενη ποσότητα</th><th>Μονάδα τιμολόγησης</th><th>Χρέωση</th></tr></thead><tbody><tr><th data-cell-label=\"Διαμόρφωση\" scope=\"row\"><span class=\"card-cell-label\">Διαμόρφωση</span>Βασικές χρεώσεις token</th><td data-cell-label=\"Πίνακας χρεώσεων\"><span class=\"card-cell-label\">Πίνακας χρεώσεων</span>Βασική χρέωση</td><td data-cell-label=\"Προβλεπόμενη ποσότητα\"><span class=\"card-cell-label\">Προβλεπόμενη ποσότητα</span>—</td><td data-cell-label=\"Μονάδα τιμολόγησης\"><span class=\"card-cell-label\">Μονάδα τιμολόγησης</span>—</td><td data-cell-label=\"Χρέωση\"><span class=\"card-cell-label\">Χρέωση</span><div><span>Είσοδος · Token εισόδου · Εκτίμηση μόνο για σύγκριση</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Έξοδος · Token εξόδου · Εκτίμηση μόνο για σύγκριση</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Είσοδος · Ανάγνωση από την κρυφή μνήμη · Εκτίμηση μόνο για σύγκριση</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Είσοδος · Εγγραφή στην κρυφή μνήμη · Εκτίμηση μόνο για σύγκριση</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Είσοδος · Εγγραφή στην κρυφή μνήμη, 1 ώρα · Εκτίμηση μόνο για σύγκριση</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Διαμόρφωση\" scope=\"row\"><span class=\"card-cell-label\">Διαμόρφωση</span>Ultra</th><td data-cell-label=\"Πίνακας χρεώσεων\"><span class=\"card-cell-label\">Πίνακας χρεώσεων</span>—</td><td data-cell-label=\"Προβλεπόμενη ποσότητα\"><span class=\"card-cell-label\">Προβλεπόμενη ποσότητα</span>—</td><td data-cell-label=\"Μονάδα τιμολόγησης\"><span class=\"card-cell-label\">Μονάδα τιμολόγησης</span>ανά εικόνα εξόδου</td><td data-cell-label=\"Χρέωση\"><span class=\"card-cell-label\">Χρέωση</span><div><span>Έξοδος · έξοδος εικόνας · Εκτίμηση μόνο για σύγκριση</span> <b>$0.08</b> <span class=\"price-unit\">ανά εικόνα εξόδου</span></div></td></tr><tr><th data-cell-label=\"Διαμόρφωση\" scope=\"row\"><span class=\"card-cell-label\">Διαμόρφωση</span>Εκτιμώμενο κόστος δημιουργίας</th><td data-cell-label=\"Πίνακας χρεώσεων\"><span class=\"card-cell-label\">Πίνακας χρεώσεων</span>—</td><td data-cell-label=\"Προβλεπόμενη ποσότητα\"><span class=\"card-cell-label\">Προβλεπόμενη ποσότητα</span>εκτίμηση για μία δημιουργία</td><td data-cell-label=\"Μονάδα τιμολόγησης\"><span class=\"card-cell-label\">Μονάδα τιμολόγησης</span>—</td><td data-cell-label=\"Χρέωση\"><span class=\"card-cell-label\">Χρέωση</span><div><span>Έξοδος · Εκτιμώμενο κόστος δημιουργίας · Εκτίμηση μόνο για σύγκριση</span> <b>$0.08</b> <span class=\"price-unit\">εκτίμηση πριν από τη δημιουργία</span></div><p class=\"note-s\">Αυτή η εκτίμηση δεν αποτελεί πρόσθετη χρέωση ούτε σταθερή τιμή για την ολοκληρωμένη παραγωγή.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Το Ailoot δεσμεύει ένα εκτιμώμενο ποσό πριν από το αίτημα. Μετά το αποτέλεσμα, εκκαθαρίζει την τελική χρέωση βάσει της μετρημένης χρήσης. Η εκκαθάριση ροής χρησιμοποιεί την τελική καταγραφή χρήσης. <a href=\"/docs/el/billing/reserve/\">Πώς λειτουργούν η δέσμευση και η εκκαθάριση →</a></p><div data-declared-reference-pricing><h4>Στοιχεία τιμοκαταλόγου αναφοράς</h4><p class=\"note-s\">Οι πίνακες αναφοράς του μοντέλου δεν αλλάζουν την επιλογή μεθόδου, τις εκτιμήσεις τιμής ή τις χρεώσεις. Οι εφαρμοζόμενες χρεώσεις χρησιμοποιούν τις τιμές της επιλεγμένης μεθόδου Ailoot.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Διαμορφώσεις τιμολόγησης εικόνων</summary><h4>Τιμές ανά διαμόρφωση</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Διαμόρφωση</th><th>Συνθήκες χρέωσης</th><th>Χρέωση</th></tr></thead><tbody><tr><th data-cell-label=\"Διαμόρφωση\" scope=\"row\"><span class=\"card-cell-label\">Διαμόρφωση</span>Εικόνα εξόδου</th><td data-cell-label=\"Συνθήκες χρέωσης\"><span class=\"card-cell-label\">Συνθήκες χρέωσης</span>Δεν δηλώνεται παραλλαγή τιμολόγησης.</td><td data-cell-label=\"Χρέωση\"><span class=\"card-cell-label\">Χρέωση</span><div><span>Έξοδος · Εικόνα εξόδου</span> <b>$0.08</b> <span class=\"price-unit\">ανά εικόνα</span></div><p class=\"note-s\">Οι ισοδύναμες καταχωρίσεις περιγράφουν την ίδια χρέωση· δεν προσθέτουν δεύτερη χρέωση.</p></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Παραδείγματα αιτημάτων</h3><h4>Ailoot Ultra · Εικόνες</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Παραλλαγές κώδικα\"><button class=\"cg-tab\" id=\"model-code-2534-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2534-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</button><button class=\"cg-tab\" id=\"model-code-2534-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2534-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Python SDK</button><button class=\"cg-tab\" id=\"model-code-2534-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2534-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Node.js SDK</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Αντιγραφή κώδικα\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2534-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2534-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np={&#39;model&#39;: &#39;recraft/recraft-v3&#39;, &#39;prompt&#39;: &#39;a red panda astronaut floating in space, studio lighting&#39;}\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(&quot;No completed images; retain the full response&quot;)\n    for index, item in enumerate(items):\n        encoded=item.get(&quot;b64_json&quot;)\n        uri=item.get(&quot;url&quot;, &quot;&quot;)\n        if not encoded and uri.startswith(&quot;data:image/&quot;):\n            header, separator, encoded=uri.partition(&quot;,&quot;)\n            if not separator or &quot;;base64&quot; not in header: raise SystemExit(&quot;Unsupported image data URI&quot;)\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(&quot;https://api.ailoot.ai&quot;,uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=&quot;https&quot; or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(&quot;Invalid returned image URL&quot;)\n            owned=parsed.netloc==&quot;api.ailoot.ai&quot; and parsed.path.startswith(&quot;/v1/media/assets/&quot;) and parsed.path.endswith(&quot;/content&quot;)\n            args=[&quot;curl&quot;,&quot;--fail-with-body&quot;,&quot;--silent&quot;,&quot;--show-error&quot;,uri]\n            if owned: args += [&quot;-H&quot;,&quot;Authorization: Bearer &quot;+os.environ[&quot;AILOOT_API_KEY&quot;]]\n            temporary=Path(f&quot;image-{index}.bin&quot;)\n            subprocess.run(args+[&quot;-o&quot;,str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(&quot;Image has neither bytes nor URL&quot;)\n        if not raw: raise SystemExit(&quot;Empty image result&quot;)\n        ext=&quot;png&quot; if raw.startswith(b&quot;\\x89PNG&quot;) else &quot;jpg&quot; if raw.startswith(b&quot;\\xff\\xd8&quot;) else &quot;webp&quot; if raw[:4]==b&quot;RIFF&quot; and raw[8:12]==b&quot;WEBP&quot; else &quot;svg&quot; if raw.lstrip().startswith((b&quot;&lt;svg&quot;,b&quot;&lt;?xml&quot;)) else &quot;bin&quot;\n        Path(f&quot;image-{index}.{ext}&quot;).write_bytes(raw)\n    print(&quot;Every returned image saved; complete response metadata retained&quot;)\nsave_images(json.loads(Path(&quot;result.json&quot;).read_text())[&quot;data&quot;])\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2534-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2534-tab-1\" hidden><pre data-lang=\"python\"><code>from openai import OpenAI\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(&quot;No completed images; retain the full response&quot;)\n    for index, item in enumerate(items):\n        encoded=item.get(&quot;b64_json&quot;)\n        uri=item.get(&quot;url&quot;, &quot;&quot;)\n        if not encoded and uri.startswith(&quot;data:image/&quot;):\n            header, separator, encoded=uri.partition(&quot;,&quot;)\n            if not separator or &quot;;base64&quot; not in header: raise SystemExit(&quot;Unsupported image data URI&quot;)\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(&quot;https://api.ailoot.ai&quot;,uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=&quot;https&quot; or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(&quot;Invalid returned image URL&quot;)\n            owned=parsed.netloc==&quot;api.ailoot.ai&quot; and parsed.path.startswith(&quot;/v1/media/assets/&quot;) and parsed.path.endswith(&quot;/content&quot;)\n            args=[&quot;curl&quot;,&quot;--fail-with-body&quot;,&quot;--silent&quot;,&quot;--show-error&quot;,uri]\n            if owned: args += [&quot;-H&quot;,&quot;Authorization: Bearer &quot;+os.environ[&quot;AILOOT_API_KEY&quot;]]\n            temporary=Path(f&quot;image-{index}.bin&quot;)\n            subprocess.run(args+[&quot;-o&quot;,str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(&quot;Image has neither bytes nor URL&quot;)\n        if not raw: raise SystemExit(&quot;Empty image result&quot;)\n        ext=&quot;png&quot; if raw.startswith(b&quot;\\x89PNG&quot;) else &quot;jpg&quot; if raw.startswith(b&quot;\\xff\\xd8&quot;) else &quot;webp&quot; if raw[:4]==b&quot;RIFF&quot; and raw[8:12]==b&quot;WEBP&quot; else &quot;svg&quot; if raw.lstrip().startswith((b&quot;&lt;svg&quot;,b&quot;&lt;?xml&quot;)) else &quot;bin&quot;\n        Path(f&quot;image-{index}.{ext}&quot;).write_bytes(raw)\n    print(&quot;Every returned image saved; complete response metadata retained&quot;)\n\nrequest={&#39;model&#39;: &#39;recraft/recraft-v3&#39;, &#39;prompt&#39;: &#39;a red panda astronaut floating in space, studio lighting&#39;}\nclient=OpenAI(base_url=&quot;https://api.ailoot.ai/v1&quot;,api_key=os.environ[&quot;AILOOT_API_KEY&quot;],max_retries=0)\nresult=client.images.generate(**request)\nPath(&quot;sdk-result.txt&quot;).write_text(str(result),encoding=&quot;utf-8&quot;)\nsave_images([{&quot;b64_json&quot;:getattr(item,&quot;b64_json&quot;,None),&quot;url&quot;:getattr(item,&quot;url&quot;,None)} for item in result.data])\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2534-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2534-tab-2\" hidden><pre data-lang=\"js\"><code>import OpenAI from &quot;openai&quot;;\nimport { readFileSync, writeFileSync } from &quot;node:fs&quot;;\nconst key=process.env.AILOOT_API_KEY;\nif(!key) throw new Error(&quot;Set your actual Ailoot API key&quot;);\nconst client=new OpenAI({baseURL:&quot;https://api.ailoot.ai/v1&quot;,apiKey:key,maxRetries:0});\nconst request={&quot;model&quot;: &quot;recraft/recraft-v3&quot;, &quot;prompt&quot;: &quot;a red panda astronaut floating in space, studio lighting&quot;};\nconst result=await client.images.generate(request);\nwriteFileSync(&quot;sdk-result.json&quot;,JSON.stringify(result,null,2));\nif(!result.data?.length) throw new Error(&quot;No completed images&quot;);\nfor(let index=0;index&lt;result.data.length;index++) {\n  const item=result.data[index];let encoded=item.b64_json,uri=item.url||&quot;&quot;,raw;\n  if(!encoded &amp;&amp; uri.startsWith(&quot;data:image/&quot;)) {\n    const comma=uri.indexOf(&quot;,&quot;);if(comma&lt;0 || !uri.slice(0,comma).includes(&quot;;base64&quot;)) throw new Error(&quot;Unsupported image data URI&quot;);\n    encoded=uri.slice(comma+1);\n  }\n  if(encoded) {\n    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error(&quot;Invalid Base64&quot;);\n    raw=Buffer.from(encoded,&quot;base64&quot;);\n  } else if(uri) {\n    const u=new URL(uri,&quot;https://api.ailoot.ai&quot;);\n    if(u.protocol!==&quot;https:&quot; || u.username || u.password) throw new Error(&quot;Invalid returned URL&quot;);\n    const owned=u.origin===&quot;https://api.ailoot.ai&quot; &amp;&amp; u.pathname.startsWith(&quot;/v1/media/assets/&quot;) &amp;&amp; u.pathname.endsWith(&quot;/content&quot;);\n    const response=await fetch(u,{headers:owned?{Authorization:&quot;Bearer &quot;+key}:{},redirect:&quot;manual&quot;});\n    if(!response.ok) throw new Error(&quot;Image content download failed: &quot;+response.status);\n    raw=Buffer.from(await response.arrayBuffer());\n  } else throw new Error(&quot;Image has neither bytes nor URL&quot;);\n  if(!raw.length) throw new Error(&quot;Empty image result&quot;);\n  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?&quot;png&quot;:raw[0]===255&amp;&amp;raw[1]===216?&quot;jpg&quot;:raw.toString(&quot;ascii&quot;,0,4)===&quot;RIFF&quot;&amp;&amp;raw.toString(&quot;ascii&quot;,8,12)===&quot;WEBP&quot;?&quot;webp&quot;:raw.toString(&quot;utf8&quot;).trimStart().startsWith(&quot;&lt;svg&quot;)||raw.toString(&quot;utf8&quot;).trimStart().startsWith(&quot;&lt;?xml&quot;)?&quot;svg&quot;:&quot;bin&quot;;\n  writeFileSync(`image-${index}.${ext}`,raw);\n}\nconsole.log(&quot;Every returned image saved; sdk-result.json retains complete metadata&quot;);\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Λήψη και αποθήκευση αποτελεσμάτων</h3><h4>Ailoot Ultra · Εικόνες</h4><p class=\"note-s\">Κατεβάστε κάθε εικόνα που επιστρέφεται ή αποθηκεύστε το περιεχόμενο Base64</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Διατηρήστε όλα τα ολοκληρωμένα αποτελέσματα</h5><p class=\"note-s\">Αποθηκεύστε κάθε ολοκληρωμένη εικόνα· ανακτήστε κάθε URL που επιστρέφεται ή αποκωδικοποιήστε το περιεχόμενο Base64.</p><p class=\"note-s\">Διατηρήστε κάθε στοιχείο δεδομένων και ολόκληρη τη χρήση· εξασφαλίστε ότι όλες οι πραγματικές εικόνες που επιστρέφονται σας ανήκουν και αποθηκεύστε τις. Χωρίς επινοημένα URL ή ID.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Αν χρειάζεται έλεγχος της αρχικής απάντησης</h5><p class=\"note-s\">Αν το αποτέλεσμα παραγωγής ή επεξεργασίας εικόνας χρειάζεται έλεγχο, διατηρήστε το αρχικό operation_id/X-Client-Request-ID και τις πληροφορίες αποτελέσματος που επιστράφηκαν. Ανακτήστε τα υπάρχοντα αποτελέσματα που σας ανήκουν μέσω της βιβλιοθήκης πολυμέσων χρησιμοποιώντας πραγματικές τιμές task_id ή asset_id. Μην υποβάλετε ξανά το αίτημα παραγωγής/επεξεργασίας και μην κατασκευάσετε URL περιοδικού ελέγχου από το operation_id.</p></div><details class=\"card-about\" data-output-fields><summary>Πεδία απάντησης</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Πεδίο</th><th>Τύπος</th></tr></thead><tbody><tr><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">created</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span>integer</td></tr><tr><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">data[].url</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span>string</td></tr><tr><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">data[].b64_json</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span>base64 string</td></tr><tr><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span>object</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Εναλλακτικά ονόματα</h3><h4>Εναλλακτικά ονόματα μοντέλου</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=recraft%2Frecraft-v3&amp;route=Ultra&amp;caller=recraft%2Frecraft-v3&amp;fmt=images\"><code>recraft/recraft-v3</code></a></span></p><h4>Εναλλακτικές διαδρομές μεθόδων</h4><p class=\"note-s\"><code>/v1/images</code></p><h4>Σχετικά ID μοντέλων</h4><p class=\"note-s\"><a href=\"#m=recraft%2Frecraft-v3&amp;route=Ultra&amp;caller=recraft%2Frecraft-v3&amp;fmt=images\"><code>recraft/recraft-v3</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "recraft/recraft-v3",
        "fmt": "images",
        "http": "POST",
        "path": "/v1/images/generations",
        "request_model_id": "recraft/recraft-v3",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|images|/v1/images/generations|recraft%2Frecraft-v3",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Οι εμφανιζόμενες τιμές χρησιμοποιούνται για την εκτίμηση του κόστους πριν από την παραγωγή. Η τελική χρέωση υπολογίζεται από το κόστος που καταγράφηκε για την αρχική παραγωγή. Η μετρημένη διάρκεια της εξόδου και οι προβλεπόμενες ποσότητες δεν αποτελούν την τελική χρεώσιμη ποσότητα.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain every data item and complete usage; own and save all actual returned images. No invented URLs or IDs.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Αν το αποτέλεσμα παραγωγής ή επεξεργασίας εικόνας χρειάζεται έλεγχο, διατηρήστε το αρχικό operation_id/X-Client-Request-ID και τις πληροφορίες αποτελέσματος που επιστράφηκαν. Ανακτήστε τα υπάρχοντα αποτελέσματα που σας ανήκουν μέσω της βιβλιοθήκης πολυμέσων χρησιμοποιώντας πραγματικές τιμές task_id ή asset_id. Μην υποβάλετε ξανά το αίτημα παραγωγής/επεξεργασίας και μην κατασκευάσετε URL περιοδικού ελέγχου από το operation_id."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_image",
                "required": [
                  "prompt"
                ]
              }
            ],
            "outputs": {
              "all_results": "Διατηρήστε κάθε στοιχείο δεδομένων και ολόκληρη τη χρήση· εξασφαλίστε ότι όλες οι πραγματικές εικόνες που επιστρέφονται σας ανήκουν και αποθηκεύστε τις. Χωρίς επινοημένα URL ή ID.",
              "family": "image",
              "fields": [
                {
                  "description": null,
                  "name": "created",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "data[].url",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[].b64_json",
                  "type": "base64 string"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "actual validated raster MIME"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "enum": [
                  "recraft/recraft-v3"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "saved_exact_supplier_endpoint",
                "maximum": 6,
                "minimum": 1,
                "name": "n",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "saved_exact_supplier_endpoint",
                "enum": [
                  "1:1",
                  "4:3",
                  "3:4",
                  "16:9",
                  "9:16",
                  "auto"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "saved_exact_supplier_endpoint",
                "items": {
                  "properties": {
                    "image_url": {
                      "properties": {
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    },
                    "type": {
                      "const": "image_url"
                    }
                  },
                  "required": [
                    "type",
                    "image_url"
                  ],
                  "type": "object"
                },
                "material_rule": "Actual customer HTTP(S) image URL or base64 data URI; no invented reference URL.",
                "maximum_items": 1,
                "minimum_items": 0,
                "name": "input_references",
                "required": false,
                "type": "array"
              }
            ],
            "request_schema": {
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "4:3",
                    "3:4",
                    "16:9",
                    "9:16",
                    "auto"
                  ],
                  "type": "string"
                },
                "input_references": {
                  "items": {
                    "properties": {
                      "image_url": {
                        "properties": {
                          "url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 0,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "recraft/recraft-v3"
                  ],
                  "type": "string"
                },
                "n": {
                  "maximum": 6,
                  "minimum": 1,
                  "type": "integer"
                },
                "prompt": {
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "model": "recraft/recraft-v3",
                "prompt": "a red panda astronaut floating in space, studio lighting"
              },
              "content_type": "application/json"
            }
          },
          "hints": [
            "Χρησιμοποιήστε το ακριβές μοντέλο και τα τεκμηριωμένα πεδία εισόδου.",
            "Διατηρήστε ολόκληρη την απόκριση, κάθε πραγματική έξοδο και τα αρχικά ID που επιστρέφονται."
          ],
          "input": {
            "content_type": "application/json",
            "exact_supported_parameters": {
              "aspect_ratio": {
                "type": "enum",
                "values": [
                  "1:1",
                  "4:3",
                  "3:4",
                  "16:9",
                  "9:16",
                  "auto"
                ]
              },
              "input_references": {
                "max": 1,
                "min": 0,
                "type": "range"
              },
              "n": {
                "max": 6,
                "min": 1,
                "type": "range"
              }
            },
            "material_types": [
              "text",
              "image"
            ],
            "optional_controls": [
              "aspect_ratio",
              "n",
              "input_references"
            ],
            "reference_material_rule": "Μόνο πραγματικές εικόνες αναφοράς του πελάτη· διέπονται από τις προϋποθέσεις του τελικού σημείου του παρόχου.",
            "required": [
              "model",
              "prompt"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Το πραγματικό task_id που επιστράφηκε ή μια εγγραφή στη βιβλιοθήκη πολυμέσων",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "If an image generation or edit result requires a check, keep the original operation_id/X-Client-Request-ID and returned result information. Recover existing owned results through the media library using actual task_id or asset_id values. Do not resubmit the generation/edit request or construct a polling URL from operation_id."
          },
          "method": {
            "http": "POST",
            "path": "/v1/images/generations"
          },
          "method_aliases": [
            "/v1/images"
          ],
          "operation_modes": [
            "text_to_image",
            "reference_guided_image"
          ],
          "output": {
            "all_results": true,
            "family": "image",
            "format": "actual validated raster MIME",
            "result": "every actual owned URL or b64_json"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_basis": "actual physical units",
              "quoted_unit": "per image output"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_image_output",
                "billing_input": false,
                "estimate_only": true,
                "key": "image_output",
                "label": "image output",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "per image output",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "image_output"
              }
            ]
          },
          {
            "basis": "Αυτή η εκτίμηση δεν αποτελεί πρόσθετη χρέωση ούτε σταθερή τιμή για την ολοκληρωμένη παραγωγή.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Εκτιμώμενο κόστος δημιουργίας",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np={'model': 'recraft/recraft-v3', 'prompt': 'a red panda astronaut floating in space, studio lighting'}\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(\"No completed images; retain the full response\")\n    for index, item in enumerate(items):\n        encoded=item.get(\"b64_json\")\n        uri=item.get(\"url\", \"\")\n        if not encoded and uri.startswith(\"data:image/\"):\n            header, separator, encoded=uri.partition(\",\")\n            if not separator or \";base64\" not in header: raise SystemExit(\"Unsupported image data URI\")\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(\"https://api.ailoot.ai\",uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=\"https\" or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(\"Invalid returned image URL\")\n            owned=parsed.netloc==\"api.ailoot.ai\" and parsed.path.startswith(\"/v1/media/assets/\") and parsed.path.endswith(\"/content\")\n            args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",uri]\n            if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n            temporary=Path(f\"image-{index}.bin\")\n            subprocess.run(args+[\"-o\",str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(\"Image has neither bytes nor URL\")\n        if not raw: raise SystemExit(\"Empty image result\")\n        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\"\n        Path(f\"image-{index}.{ext}\").write_bytes(raw)\n    print(\"Every returned image saved; complete response metadata retained\")\nsave_images(json.loads(Path(\"result.json\").read_text())[\"data\"])\nPY_RESULT\n",
            "label": "curl · exact creation/save all outputs",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(\"No completed images; retain the full response\")\n    for index, item in enumerate(items):\n        encoded=item.get(\"b64_json\")\n        uri=item.get(\"url\", \"\")\n        if not encoded and uri.startswith(\"data:image/\"):\n            header, separator, encoded=uri.partition(\",\")\n            if not separator or \";base64\" not in header: raise SystemExit(\"Unsupported image data URI\")\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(\"https://api.ailoot.ai\",uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=\"https\" or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(\"Invalid returned image URL\")\n            owned=parsed.netloc==\"api.ailoot.ai\" and parsed.path.startswith(\"/v1/media/assets/\") and parsed.path.endswith(\"/content\")\n            args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",uri]\n            if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n            temporary=Path(f\"image-{index}.bin\")\n            subprocess.run(args+[\"-o\",str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(\"Image has neither bytes nor URL\")\n        if not raw: raise SystemExit(\"Empty image result\")\n        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\"\n        Path(f\"image-{index}.{ext}\").write_bytes(raw)\n    print(\"Every returned image saved; complete response metadata retained\")\n\nrequest={'model': 'recraft/recraft-v3', 'prompt': 'a red panda astronaut floating in space, studio lighting'}\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.images.generate(**request)\nPath(\"sdk-result.txt\").write_text(str(result),encoding=\"utf-8\")\nsave_images([{\"b64_json\":getattr(item,\"b64_json\",None),\"url\":getattr(item,\"url\",None)} for item in result.data])\n",
            "label": "Python SDK · exact payload/save all outputs",
            "language": "python"
          },
          {
            "code": "import OpenAI from \"openai\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nconst key=process.env.AILOOT_API_KEY;\nif(!key) throw new Error(\"Set your actual Ailoot API key\");\nconst client=new OpenAI({baseURL:\"https://api.ailoot.ai/v1\",apiKey:key,maxRetries:0});\nconst request={\"model\": \"recraft/recraft-v3\", \"prompt\": \"a red panda astronaut floating in space, studio lighting\"};\nconst result=await client.images.generate(request);\nwriteFileSync(\"sdk-result.json\",JSON.stringify(result,null,2));\nif(!result.data?.length) throw new Error(\"No completed images\");\nfor(let index=0;index<result.data.length;index++) {\n  const item=result.data[index];let encoded=item.b64_json,uri=item.url||\"\",raw;\n  if(!encoded && uri.startsWith(\"data:image/\")) {\n    const comma=uri.indexOf(\",\");if(comma<0 || !uri.slice(0,comma).includes(\";base64\")) throw new Error(\"Unsupported image data URI\");\n    encoded=uri.slice(comma+1);\n  }\n  if(encoded) {\n    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error(\"Invalid Base64\");\n    raw=Buffer.from(encoded,\"base64\");\n  } else if(uri) {\n    const u=new URL(uri,\"https://api.ailoot.ai\");\n    if(u.protocol!==\"https:\" || u.username || u.password) throw new Error(\"Invalid returned URL\");\n    const owned=u.origin===\"https://api.ailoot.ai\" && u.pathname.startsWith(\"/v1/media/assets/\") && u.pathname.endsWith(\"/content\");\n    const response=await fetch(u,{headers:owned?{Authorization:\"Bearer \"+key}:{},redirect:\"manual\"});\n    if(!response.ok) throw new Error(\"Image content download failed: \"+response.status);\n    raw=Buffer.from(await response.arrayBuffer());\n  } else throw new Error(\"Image has neither bytes nor URL\");\n  if(!raw.length) throw new Error(\"Empty image result\");\n  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\";\n  writeFileSync(`image-${index}.${ext}`,raw);\n}\nconsole.log(\"Every returned image saved; sdk-result.json retains complete metadata\");\n",
            "label": "Node SDK · exact payload/save all outputs",
            "language": "js"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "images",
        "hints": [
          "Use the exact model and documented input fields.",
          "Keep the complete response, every actual output and original returned IDs."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Картинки",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/images"
        ],
        "out": null,
        "output": [
          "image"
        ],
        "path": "/v1/images/generations",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_basis": "actual physical units",
              "quoted_unit": "per image output"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_image_output",
                "billing_input": false,
                "estimate_only": true,
                "key": "image_output",
                "label": "image output",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "per image output",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "image_output"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "recraft/recraft-v3",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.08",
            "amount_unit": "usd_per_image_output",
            "billing_input": false,
            "estimate_only": true,
            "key": "image_output",
            "label": "image output",
            "native_amount_usd_per_unit": "0.08",
            "native_quantity": 1,
            "public_unit_label": "per image output",
            "quantity": "1",
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "image_output"
          },
          {
            "amount": "0.08",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.08",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "recraft/recraft-v3",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "763893f0ca9d09fc4715dd4cb0998a90b28f09637d62cff4521a3b2f69ec35fc",
    "input_html_sha256": "e2bc73ebfe22172342c116e43996bec1dd16601b8cee009fd246af18e1528d24",
    "private_audit_sha256": "6bc1061a9ba0e82988e0aad1992e5e7f769bfdf98864b884056ca2533e0f8f17",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/el/recraft-recraft-v3/",
    "description": "Το Recraft V3 δημιουργεί φωτογραφίες, εικονογραφήσεις και γραφιστικές διατάξεις με σύνθεση που λαμβάνει υπόψη το κείμενο και ελέγχους ύφους. Οι διακριτές παραλλαγές raster και SVG ταιριάζουν σε αφίσες, επώνυμα σύνολα εικόνων, εικονίδια και σχέδια όπου διατύπωση και οπτική δομή πρέπει να συνεργάζονται.",
    "locale": "el",
    "md_url": "https://ailoot.ai/models/el/recraft-recraft-v3/index.md",
    "title": "Recraft: Recraft V3 — Ailoot",
    "url": "https://ailoot.ai/models/el/recraft-recraft-v3/"
  },
  "rawModel": {
    "about": "Το Recraft V3 είναι μοντέλο δημιουργίας εικόνων φτιαγμένο για γραφιστικό σχεδιασμό, καθώς και φωτογραφικές και εικονογραφημένες σκηνές. Μια γραπτή περιγραφή ορίζει θέμα, περιβάλλον και σύνθεση· το αποτέλεσμα είναι εικόνα. Το V3 αναπτύσσει την απόδοση κειμένου και τον φωτορεαλισμό της Recraft, διατηρώντας συνέπεια ύφους από εικόνες παραδείγματος χωρίς επανεκπαίδευση.\n\n### Το κείμενο ως μέρος της σύνθεσης\n\nΤο V3 δουλεύει με κείμενο μέσα στην εικόνα, μαζί με μεγαλύτερα κείμενα και γράμματα μεσαίου μεγέθους. Η Recraft περιγράφει στάδιο διάταξης που καθορίζει λέξεις και θέσεις τους πριν τη δημιουργία εικόνας. Η διάταξη μπορεί να παράγεται αυτόματα από την περιγραφή ή να οργανώνεται χειροκίνητα στο σχεδιαστικό περιβάλλον της Recraft. Αυτό βοηθά στη σύνδεση τίτλου, εικονογράφησης και υποστηρικτικού κειμένου σε μία σύνθεση. Ο κατασκευαστής τεκμηριώνει επίσης ρητές συντεταγμένες διάταξης κειμένου, εκφρασμένες ως προς την εικόνα αντί για σταθερό πλέγμα pixel. Κάθε στοιχείο κειμένου περιέχει μία λέξη και τέσσερα γωνιακά σημεία σε κανονικοποιημένες συντεταγμένες: το (0, 0) είναι επάνω αριστερά και το (1, 1) κάτω δεξιά. Οι συντεταγμένες μπορεί να εκτείνονται εκτός αυτού του εύρους, οπότε το σχήμα περικόπτεται. Οι ρητές λέξεις διάταξης κειμένου πρέπει να ακολουθούν τους τεκμηριωμένους περιορισμούς χαρακτήρων.\n\nΓια αφίσα ή εξώφυλλο, δώστε την ακριβή διατύπωση και περιγράψτε την ιεραρχία: ποια γραμμή προηγείται, πού βρίσκεται και πώς την υποστηρίζει η εικόνα. Ελέγξτε την αποδοσμένη ορθογραφία και τις αποστάσεις όταν επιλέγετε αποτέλεσμα.\n\n### Ύφος, παλέτα και καλλιτεχνική κατεύθυνση\n\nΤο V3 περιλαμβάνει επιμελημένα ύφη φωτογραφίας, εικονογράφησης και εμβλημάτων, μαζί με χωριστή βιβλιοθήκη διανυσματικών υφών. Το Recraft V3 Raw είναι το προεπιλεγμένο ύφος μοντέλου raster· το Vector art είναι προεπιλογή για τη διανυσματική παραλλαγή. Το Photorealism στοχεύει σε φωτογραφική εμφάνιση, ενώ το Illustration υποστηρίζει στυλιζαρισμένες υφές, σκίαση και πιο σύνθετες χρωματικές μεταβάσεις. Τα διανυσματικά ύφη ευνοούν σχήματα, περιορισμένες παλέτες και επίπεδα γεμίσματα ή απλές διαβαθμίσεις.\n\nΤα προσαρμοσμένα ύφη μπορούν να δημιουργούνται από εικόνες αναφοράς, υπάρχοντα συμβατά ύφη ή συνδυασμό. Παρέχουν επαναχρησιμοποιήσιμη οπτική κατεύθυνση σε σειρά εικόνων. Οι τεκμηριωμένοι έλεγχοι μίξης επιτρέπουν χωριστά βάρη για αναφορές και αρχικά ύφη· το πλήθος βαρών αντιστοιχεί στις πηγές. Τα PaletteMatch και MaxWeight είναι οι δύο αναφερόμενες πολιτικές μίξης. Ο κατασκευαστής επιτρέπει έως 10 εικόνες αναφοράς ύφους και χρησιμοποιεί την κανονική λειτουργία αντιστοίχισης ύφους για V3. Αποθηκευμένο προσαρμοσμένο ύφος και απευθείας αναφορές ύφους είναι εναλλακτικές είσοδοι και το προσαρμοσμένο ύφος πρέπει να ταιριάζει με το μοντέλο δημιουργίας.\n\nΠροτιμώμενα χρώματα και χρώμα φόντου καθοδηγούν την παλέτα. Τεκμηριώνονται έως 10 χρώματα RGB, με κάθε συνιστώσα από 0 έως 255. Προαιρετικά σχετικά βάρη κυμαίνονται από 0 έως 1· πρέπει να παρέχονται για κάθε χρώμα ή για κανένα και το άθροισμά τους δεν μπορεί να υπερβαίνει το 1. Το καλλιτεχνικό επίπεδο κυμαίνεται από 0 για στατική, καθαρή απόδοση έως 5 για πιο δυναμικές, εκκεντρικές συνθέσεις. Μια αρνητική προτροπή περιγράφει ανεπιθύμητα στοιχεία· χωριστός έλεγχος χωρίς κείμενο απενεργοποιεί τις ενσωματωμένες διατάξεις κειμένου. Διατίθεται τυχαίο seed για αναπαραγωγιμότητα. Αυτοί οι έλεγχοι δίνουν διαφορετικούς μοχλούς για τη σκηνή, το ύφος της και την οπτική διάταξη.\n\n### Εικόνες raster και χωριστή παραλλαγή SVG\n\nΗ Recraft τεκμηριώνει δύο παραλλαγές V3. Το μοντέλο raster παράγει WebP χωρίς απώλειες ή PNG και είναι κατάλληλο για φωτογραφική λεπτομέρεια, σκίαση και εικονογράφηση με υφές. Το Recraft V3 Vector παράγει SVG: διαδρομές και σχήματα που μπορούν να κλιμακώνονται χωρίς σταθερή ανάλυση pixel. Ταιριάζει σε εικονογράμματα, ιδέες λογοτύπων, σήματα και λεπτομερή διανυσματικά εικαστικά. Η μετατροπή raster σε vector είναι χωριστή λειτουργία από την απευθείας δημιουργία διανυσματικού εικαστικού.\n\nΚαι οι δύο παραλλαγές έχουν δική τους ταυτότητα. Μια εικόνα με διανυσματική εμφάνιση και μια πραγματική έξοδος SVG είναι διαφορετικές επιλογές. Επιλέξτε την επιθυμητή έξοδο όταν προετοιμάζετε σχεδιαστική ροή, αντί να αντιμετωπίζετε το κοινό όνομα V3 ως απόδειξη ότι κάθε λειτουργία επιστρέφει ίδιο τύπο αρχείου.\n\n### Επεξεργασία και ολοκλήρωση υπάρχοντος εικαστικού\n\nΗ τεκμηρίωση V3 της Recraft αναφέρει δημιουργία εικόνας προς εικόνα, inpainting, outpainting και αντικατάσταση ή δημιουργία φόντου. Η εργασία εικόνας προς εικόνα συνδυάζει υπάρχουσα εικόνα με νέα περιγραφή. Το inpainting αναδημιουργεί την επιλεγμένη περιοχή χρησιμοποιώντας εικόνα και αντίστοιχη μάσκα· το outpainting προσθέτει περιεχόμενο πέρα από το αρχικό κάδρο. Οι λειτουργίες φόντου αφορούν το περιβάλλον θέματος.\n\nΤο συνοδευτικό σύνολο εργαλείων περιλαμβάνει επίσης σβήσιμο, αφαίρεση φόντου, διανυσματοποίηση και δύο προσεγγίσεις αύξησης ανάλυσης. Η δημιουργική αύξηση ανάλυσης μπορεί να εισάγει νέα λεπτομέρεια· η crisp αύξηση ανάλυσης στοχεύει σε πιο ευκρινή μεγαλύτερη απόδοση υπάρχοντος περιεχομένου. Πρόκειται για διακριτές λειτουργίες με δικές τους εισόδους και αποτελέσματα, αντί για πρόσθετες σημασίες του ονόματος μοντέλου raster ή vector.\n\n### Όρια προτροπής, μεγέθους και αρχικής εικόνας\n\nΗ προδιαγραφή δημιουργίας 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. Όταν παραλείπεται το μέγεθος, το σύστημα κατασκευαστή το επιλέγει από την προτροπή.\n\nΓια λειτουργίες εισόδου εικόνας, ο κατασκευαστής αναφέρει PNG, JPG και WebP, με SVG όπου το επιτρέπει η συγκεκριμένη λειτουργία. Τα αρχεία πρέπει να είναι κάτω από 20 MB, έως 16 MP, με μεγαλύτερη πλευρά έως 4096 pixel. Η μικρότερη πλευρά είναι τουλάχιστον 256 pixel, με εξαίρεση 32 pixel για crisp αύξηση ανάλυσης. Οι μάσκες αντιστοιχούν στο μέγεθος εικόνας και χρησιμοποιούν καθαρό μαύρο και λευκό· οι αναφορές ύφους έχουν συνολικό όριο 64 MB.\n\nΓια έργο Ailoot API, μετατρέψτε την εργασία σε εστιασμένη περιγραφή εικόνας: ακριβές κείμενο, διάταξη αντικειμένων, οπτικό ύφος και επιθυμητή σύνθεση. Αφίσα, σκηνή προϊόντος και σειρά εικονιδίων χρειάζονται διαφορετικές περιγραφές· διατηρήστε τις σχετικές διακρίσεις παραλλαγής και λειτουργίας V3 όταν αποφασίζετε πώς θα χρησιμοποιηθεί κάθε αποτέλεσμα.",
    "alias_of": null,
    "aliases": [],
    "author": "Recraft",
    "available": null,
    "canonical_model": "recraft/recraft-v3",
    "capabilities": {
      "context_length": 65536,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "image"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.08",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.08",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "Πλήρης τιμολόγηση της διαμόρφωσης στις λεπτομέρειες."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "312e470b4d419e2b5b8275d6",
        "label": "Διαμορφώσεις τιμολόγησης εικόνων",
        "profiles": [
          {
            "basis": "Οι ισοδύναμες καταχωρίσεις περιγράφουν την ίδια χρέωση· δεν προσθέτουν δεύτερη χρέωση.",
            "dimensions": {
              "conditions": "Δεν δηλώνεται παραλλαγή τιμολόγησης."
            },
            "label": "Εικόνα εξόδου",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_image",
                "billing_input": false,
                "key": "output_image",
                "label": "Output image",
                "public_unit_label": "per image",
                "quantity": 1,
                "rate_role": "typed_image_reference",
                "side": "out",
                "unit": "image"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "images"
    ],
    "id": "recraft/recraft-v3",
    "input": [
      "text",
      "image"
    ],
    "kind": "image",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Οι εμφανιζόμενες τιμές χρησιμοποιούνται για την εκτίμηση του κόστους πριν από την παραγωγή. Η τελική χρέωση υπολογίζεται από το κόστος που καταγράφηκε για την αρχική παραγωγή. Η μετρημένη διάρκεια της εξόδου και οι προβλεπόμενες ποσότητες δεν αποτελούν την τελική χρεώσιμη ποσότητα.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain every data item and complete usage; own and save all actual returned images. No invented URLs or IDs.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Αν το αποτέλεσμα παραγωγής ή επεξεργασίας εικόνας χρειάζεται έλεγχο, διατηρήστε το αρχικό operation_id/X-Client-Request-ID και τις πληροφορίες αποτελέσματος που επιστράφηκαν. Ανακτήστε τα υπάρχοντα αποτελέσματα που σας ανήκουν μέσω της βιβλιοθήκης πολυμέσων χρησιμοποιώντας πραγματικές τιμές task_id ή asset_id. Μην υποβάλετε ξανά το αίτημα παραγωγής/επεξεργασίας και μην κατασκευάσετε URL περιοδικού ελέγχου από το operation_id."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_image",
                "required": [
                  "prompt"
                ]
              }
            ],
            "outputs": {
              "all_results": "Διατηρήστε κάθε στοιχείο δεδομένων και ολόκληρη τη χρήση· εξασφαλίστε ότι όλες οι πραγματικές εικόνες που επιστρέφονται σας ανήκουν και αποθηκεύστε τις. Χωρίς επινοημένα URL ή ID.",
              "family": "image",
              "fields": [
                {
                  "description": null,
                  "name": "created",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "data[].url",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "data[].b64_json",
                  "type": "base64 string"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "actual validated raster MIME"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "enum": [
                  "recraft/recraft-v3"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "saved_exact_supplier_endpoint",
                "maximum": 6,
                "minimum": 1,
                "name": "n",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "saved_exact_supplier_endpoint",
                "enum": [
                  "1:1",
                  "4:3",
                  "3:4",
                  "16:9",
                  "9:16",
                  "auto"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "saved_exact_supplier_endpoint",
                "items": {
                  "properties": {
                    "image_url": {
                      "properties": {
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    },
                    "type": {
                      "const": "image_url"
                    }
                  },
                  "required": [
                    "type",
                    "image_url"
                  ],
                  "type": "object"
                },
                "material_rule": "Actual customer HTTP(S) image URL or base64 data URI; no invented reference URL.",
                "maximum_items": 1,
                "minimum_items": 0,
                "name": "input_references",
                "required": false,
                "type": "array"
              }
            ],
            "request_schema": {
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "4:3",
                    "3:4",
                    "16:9",
                    "9:16",
                    "auto"
                  ],
                  "type": "string"
                },
                "input_references": {
                  "items": {
                    "properties": {
                      "image_url": {
                        "properties": {
                          "url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 0,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "recraft/recraft-v3"
                  ],
                  "type": "string"
                },
                "n": {
                  "maximum": 6,
                  "minimum": 1,
                  "type": "integer"
                },
                "prompt": {
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "model": "recraft/recraft-v3",
                "prompt": "a red panda astronaut floating in space, studio lighting"
              },
              "content_type": "application/json"
            }
          },
          "hints": [
            "Χρησιμοποιήστε το ακριβές μοντέλο και τα τεκμηριωμένα πεδία εισόδου.",
            "Διατηρήστε ολόκληρη την απόκριση, κάθε πραγματική έξοδο και τα αρχικά ID που επιστρέφονται."
          ],
          "input": {
            "content_type": "application/json",
            "exact_supported_parameters": {
              "aspect_ratio": {
                "type": "enum",
                "values": [
                  "1:1",
                  "4:3",
                  "3:4",
                  "16:9",
                  "9:16",
                  "auto"
                ]
              },
              "input_references": {
                "max": 1,
                "min": 0,
                "type": "range"
              },
              "n": {
                "max": 6,
                "min": 1,
                "type": "range"
              }
            },
            "material_types": [
              "text",
              "image"
            ],
            "optional_controls": [
              "aspect_ratio",
              "n",
              "input_references"
            ],
            "reference_material_rule": "Μόνο πραγματικές εικόνες αναφοράς του πελάτη· διέπονται από τις προϋποθέσεις του τελικού σημείου του παρόχου.",
            "required": [
              "model",
              "prompt"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "Το πραγματικό task_id που επιστράφηκε ή μια εγγραφή στη βιβλιοθήκη πολυμέσων",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "If an image generation or edit result requires a check, keep the original operation_id/X-Client-Request-ID and returned result information. Recover existing owned results through the media library using actual task_id or asset_id values. Do not resubmit the generation/edit request or construct a polling URL from operation_id."
          },
          "method": {
            "http": "POST",
            "path": "/v1/images/generations"
          },
          "method_aliases": [
            "/v1/images"
          ],
          "operation_modes": [
            "text_to_image",
            "reference_guided_image"
          ],
          "output": {
            "all_results": true,
            "family": "image",
            "format": "actual validated raster MIME",
            "result": "every actual owned URL or b64_json"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_basis": "actual physical units",
              "quoted_unit": "per image output"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_image_output",
                "billing_input": false,
                "estimate_only": true,
                "key": "image_output",
                "label": "image output",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "per image output",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "image_output"
              }
            ]
          },
          {
            "basis": "Αυτή η εκτίμηση δεν αποτελεί πρόσθετη χρέωση ούτε σταθερή τιμή για την ολοκληρωμένη παραγωγή.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Εκτιμώμενο κόστος δημιουργίας",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np={'model': 'recraft/recraft-v3', 'prompt': 'a red panda astronaut floating in space, studio lighting'}\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(\"No completed images; retain the full response\")\n    for index, item in enumerate(items):\n        encoded=item.get(\"b64_json\")\n        uri=item.get(\"url\", \"\")\n        if not encoded and uri.startswith(\"data:image/\"):\n            header, separator, encoded=uri.partition(\",\")\n            if not separator or \";base64\" not in header: raise SystemExit(\"Unsupported image data URI\")\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(\"https://api.ailoot.ai\",uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=\"https\" or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(\"Invalid returned image URL\")\n            owned=parsed.netloc==\"api.ailoot.ai\" and parsed.path.startswith(\"/v1/media/assets/\") and parsed.path.endswith(\"/content\")\n            args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",uri]\n            if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n            temporary=Path(f\"image-{index}.bin\")\n            subprocess.run(args+[\"-o\",str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(\"Image has neither bytes nor URL\")\n        if not raw: raise SystemExit(\"Empty image result\")\n        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\"\n        Path(f\"image-{index}.{ext}\").write_bytes(raw)\n    print(\"Every returned image saved; complete response metadata retained\")\nsave_images(json.loads(Path(\"result.json\").read_text())[\"data\"])\nPY_RESULT\n",
            "label": "curl · exact creation/save all outputs",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(\"No completed images; retain the full response\")\n    for index, item in enumerate(items):\n        encoded=item.get(\"b64_json\")\n        uri=item.get(\"url\", \"\")\n        if not encoded and uri.startswith(\"data:image/\"):\n            header, separator, encoded=uri.partition(\",\")\n            if not separator or \";base64\" not in header: raise SystemExit(\"Unsupported image data URI\")\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(\"https://api.ailoot.ai\",uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=\"https\" or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(\"Invalid returned image URL\")\n            owned=parsed.netloc==\"api.ailoot.ai\" and parsed.path.startswith(\"/v1/media/assets/\") and parsed.path.endswith(\"/content\")\n            args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",uri]\n            if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n            temporary=Path(f\"image-{index}.bin\")\n            subprocess.run(args+[\"-o\",str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(\"Image has neither bytes nor URL\")\n        if not raw: raise SystemExit(\"Empty image result\")\n        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\"\n        Path(f\"image-{index}.{ext}\").write_bytes(raw)\n    print(\"Every returned image saved; complete response metadata retained\")\n\nrequest={'model': 'recraft/recraft-v3', 'prompt': 'a red panda astronaut floating in space, studio lighting'}\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.images.generate(**request)\nPath(\"sdk-result.txt\").write_text(str(result),encoding=\"utf-8\")\nsave_images([{\"b64_json\":getattr(item,\"b64_json\",None),\"url\":getattr(item,\"url\",None)} for item in result.data])\n",
            "label": "Python SDK · exact payload/save all outputs",
            "language": "python"
          },
          {
            "code": "import OpenAI from \"openai\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nconst key=process.env.AILOOT_API_KEY;\nif(!key) throw new Error(\"Set your actual Ailoot API key\");\nconst client=new OpenAI({baseURL:\"https://api.ailoot.ai/v1\",apiKey:key,maxRetries:0});\nconst request={\"model\": \"recraft/recraft-v3\", \"prompt\": \"a red panda astronaut floating in space, studio lighting\"};\nconst result=await client.images.generate(request);\nwriteFileSync(\"sdk-result.json\",JSON.stringify(result,null,2));\nif(!result.data?.length) throw new Error(\"No completed images\");\nfor(let index=0;index<result.data.length;index++) {\n  const item=result.data[index];let encoded=item.b64_json,uri=item.url||\"\",raw;\n  if(!encoded && uri.startsWith(\"data:image/\")) {\n    const comma=uri.indexOf(\",\");if(comma<0 || !uri.slice(0,comma).includes(\";base64\")) throw new Error(\"Unsupported image data URI\");\n    encoded=uri.slice(comma+1);\n  }\n  if(encoded) {\n    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error(\"Invalid Base64\");\n    raw=Buffer.from(encoded,\"base64\");\n  } else if(uri) {\n    const u=new URL(uri,\"https://api.ailoot.ai\");\n    if(u.protocol!==\"https:\" || u.username || u.password) throw new Error(\"Invalid returned URL\");\n    const owned=u.origin===\"https://api.ailoot.ai\" && u.pathname.startsWith(\"/v1/media/assets/\") && u.pathname.endsWith(\"/content\");\n    const response=await fetch(u,{headers:owned?{Authorization:\"Bearer \"+key}:{},redirect:\"manual\"});\n    if(!response.ok) throw new Error(\"Image content download failed: \"+response.status);\n    raw=Buffer.from(await response.arrayBuffer());\n  } else throw new Error(\"Image has neither bytes nor URL\");\n  if(!raw.length) throw new Error(\"Empty image result\");\n  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\";\n  writeFileSync(`image-${index}.${ext}`,raw);\n}\nconsole.log(\"Every returned image saved; sdk-result.json retains complete metadata\");\n",
            "label": "Node SDK · exact payload/save all outputs",
            "language": "js"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "images",
        "hints": [
          "Use the exact model and documented input fields.",
          "Keep the complete response, every actual output and original returned IDs."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Картинки",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/images"
        ],
        "out": null,
        "output": [
          "image"
        ],
        "path": "/v1/images/generations",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_basis": "actual physical units",
              "quoted_unit": "per image output"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_image_output",
                "billing_input": false,
                "estimate_only": true,
                "key": "image_output",
                "label": "image output",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "per image output",
                "quantity": "1",
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "image_output"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.08",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.08",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "recraft/recraft-v3",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.08",
            "amount_unit": "usd_per_image_output",
            "billing_input": false,
            "estimate_only": true,
            "key": "image_output",
            "label": "image output",
            "native_amount_usd_per_unit": "0.08",
            "native_quantity": 1,
            "public_unit_label": "per image output",
            "quantity": "1",
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "image_output"
          },
          {
            "amount": "0.08",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.08",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "recraft/recraft-v3",
        "request_model_id": "recraft/recraft-v3",
        "route_label": "Ultra"
      }
    ],
    "name": "Recraft: Recraft V3",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.08,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.08,
      "varies": false
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "output_family": "raster",
          "per_actual_generated_image": true,
          "quality": "standard",
          "units_per_usd": 1000
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.08",
            "amount_unit": "usd_per_output_image",
            "conditions": {
              "output_family": "raster",
              "per_actual_generated_image": true,
              "quality": "standard",
              "units_per_usd": 1000
            },
            "key": "base",
            "label": "base",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "output_family": "raster",
          "per_actual_generated_image": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.08",
            "amount_unit": "usd_per_output_image",
            "conditions": {
              "output_family": "raster",
              "per_actual_generated_image": true
            },
            "key": "base",
            "label": "base",
            "profile_index": 1,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "identity_variant": "method output vector within recraft-v3 family; not automatic generic public_id assignment",
          "official_maker_model_id": "recraftv3_vector",
          "output_family": "vector",
          "per_actual_generated_image": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.16",
            "amount_unit": "usd_per_output_image",
            "conditions": {
              "identity_variant": "method output vector within recraft-v3 family; not automatic generic public_id assignment",
              "official_maker_model_id": "recraftv3_vector",
              "output_family": "vector",
              "per_actual_generated_image": true
            },
            "key": "base",
            "label": "base",
            "profile_index": 2,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "output_family": "raster",
          "per_actual_generated_image": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.08",
            "amount_unit": "usd_per_output_image",
            "conditions": {
              "output_family": "raster",
              "per_actual_generated_image": true
            },
            "key": "base",
            "label": "base",
            "profile_index": 3,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "identity_variant": "method output vector within recraft-v3 family; not automatic generic public_id assignment",
          "official_maker_model_id": "recraftv3_vector",
          "output_family": "vector",
          "per_actual_generated_image": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.16",
            "amount_unit": "usd_per_output_image",
            "conditions": {
              "identity_variant": "method output vector within recraft-v3 family; not automatic generic public_id assignment",
              "official_maker_model_id": "recraftv3_vector",
              "output_family": "vector",
              "per_actual_generated_image": true
            },
            "key": "base",
            "label": "base",
            "profile_index": 4,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "output_family": "raster",
          "per_actual_generated_image": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.08",
            "amount_unit": "usd_per_output_image",
            "conditions": {
              "output_family": "raster",
              "per_actual_generated_image": true
            },
            "key": "base",
            "label": "base",
            "profile_index": 5,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "identity_variant": "method output vector within recraft-v3 family; not automatic generic public_id assignment",
          "official_maker_model_id": "recraftv3_vector",
          "output_family": "vector",
          "per_actual_generated_image": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.16",
            "amount_unit": "usd_per_output_image",
            "conditions": {
              "identity_variant": "method output vector within recraft-v3 family; not automatic generic public_id assignment",
              "official_maker_model_id": "recraftv3_vector",
              "output_family": "vector",
              "per_actual_generated_image": true
            },
            "key": "base",
            "label": "base",
            "profile_index": 6,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "output_family": "raster",
          "per_actual_generated_image": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.08",
            "amount_unit": "usd_per_output_image",
            "conditions": {
              "output_family": "raster",
              "per_actual_generated_image": true
            },
            "key": "base",
            "label": "base",
            "profile_index": 7,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "identity_variant": "method output vector within recraft-v3 family; not automatic generic public_id assignment",
          "official_maker_model_id": "recraftv3_vector",
          "output_family": "vector",
          "per_actual_generated_image": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.16",
            "amount_unit": "usd_per_output_image",
            "conditions": {
              "identity_variant": "method output vector within recraft-v3 family; not automatic generic public_id assignment",
              "official_maker_model_id": "recraftv3_vector",
              "output_family": "vector",
              "per_actual_generated_image": true
            },
            "key": "base",
            "label": "base",
            "profile_index": 8,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "output_family": "raster",
          "per_actual_generated_image": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.08",
            "amount_unit": "usd_per_output_image",
            "conditions": {
              "output_family": "raster",
              "per_actual_generated_image": true
            },
            "key": "base",
            "label": "base",
            "profile_index": 9,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "identity_variant": "method output vector within recraft-v3 family; not automatic generic public_id assignment",
          "official_maker_model_id": "recraftv3_vector",
          "output_family": "vector",
          "per_actual_generated_image": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.16",
            "amount_unit": "usd_per_output_image",
            "conditions": {
              "identity_variant": "method output vector within recraft-v3 family; not automatic generic public_id assignment",
              "official_maker_model_id": "recraftv3_vector",
              "output_family": "vector",
              "per_actual_generated_image": true
            },
            "key": "base",
            "label": "base",
            "profile_index": 10,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_image"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "adds_to_per_image_base": true,
          "applies_only_where_exact_maker_method_accepts_style_references": true,
          "once_per_request_not_per_output": true,
          "only_when_generating_with_style_reference_creates_style": true
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.010",
            "amount_unit": "usd_per_request",
            "conditions": {
              "adds_to_per_image_base": true,
              "applies_only_where_exact_maker_method_accepts_style_references": true,
              "once_per_request_not_per_output": true,
              "only_when_generating_with_style_reference_creates_style": true
            },
            "key": "style_creation_surcharge",
            "label": "style creation surcharge",
            "profile_index": 11,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "request"
          }
        ]
      }
    ],
    "public_id": "recraft/recraft-v3",
    "short": "Το Recraft V3 δημιουργεί φωτογραφίες, εικονογραφήσεις και γραφιστικές διατάξεις με σύνθεση που λαμβάνει υπόψη το κείμενο και ελέγχους ύφους. Οι διακριτές παραλλαγές raster και SVG ταιριάζουν σε αφίσες, επώνυμα σύνολα εικόνων, εικονίδια και σχέδια όπου διατύπωση και οπτική δομή πρέπει να συνεργάζονται."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Το Recraft V3 δημιουργεί φωτογραφίες, εικονογραφήσεις και γραφιστικές διατάξεις με σύνθεση που λαμβάνει υπόψη το κείμενο και ελέγχους ύφους. Οι διακριτές παραλλαγές raster και SVG ταιριάζουν σε αφίσες, επώνυμα σύνολα εικόνων, εικονίδια και σχέδια όπου διατύπωση και οπτική δομή πρέπει να συνεργάζονται.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "b7eb3576afc9b82f80350ecf548693bfa9fb17480ad5a25c00bb13d559768697",
    "renderer_sha256": "3ed36f7af4f78822bafbd174fdcaed7b698a18a86efe254253d37f1b098a7566"
  },
  "sourceRevision": "66da630695a705b44e1a75ba988a770df01d225ba9fbfbc9cc61a076aaeab2ae"
}
