Recraft: Recraft V4
Recraft V4 génère des images matricielles 1K en privilégiant la composition, les relations de couleurs et une direction créative détaillée. Il couvre l’illustration, les scènes photoréalistes et les concepts de design graphique, avec des entrées de style facultatives et un processus distinct image-vers-image.
À propos du modèle
Cette description présente les capacités du modèle. Les entrées, sorties et options disponibles dans Ailoot pour la méthode sélectionnée figurent ci-dessous.
Recraft V4 est le modèle matriciel standard de la génération V4 de Recraft. Le fabricant privilégie le jugement de design : composition équilibrée, relations de couleurs cohérentes et détails soutenant l’intention visuelle. Il peut traiter l’illustration stylisée, les scènes photographiques et les concepts de design graphique. Utilisez-le lorsque le brief demande une image associant choix esthétiques et fidélité au prompt, que ce soit pour explorer une ambiance à partir d’une courte direction ou préciser une mise en page intentionnelle en détail.
Le code exact du modèle est recraftv4. Sa référence producteur indique une sortie matricielle 1K en WebP sans perte ou PNG. Une image carrée fait 1024 × 1024 pixels, le 16:9 fait 1344 × 768 et le 2:3 fait 832 × 1280 ; les autres rapports pris en charge ont leurs propres dimensions. V4 Pro est l’édition matricielle 2K distincte, tandis que V4 Vector et Pro Vector renvoient du SVG modifiable. Sélectionnez la variante V4 exacte pour le livrable prévu au lieu de combiner ces différentes propriétés de sortie.
Le guide du fabricant distingue les prompts brefs ouverts à l’interprétation de la direction créative structurée. Une courte phrase peut laisser la place à l’exploration de la forme, de l’ambiance et du cadrage. Un brief structuré peut nommer le sujet, le décor, la pose, le matériau, les éléments secondaires, la lumière et la hiérarchie visuelle. Pour une illustration narrative, décrivez un cycliste traversant un petit pont, des formes simplifiées et affirmées, des couleurs chaudes douces et un mouvement clair de gauche à droite. Ces décisions de contenu et de composition sont plus exploitables qu’une longue liste d’adjectifs de style sans rapport.
La gamme de V4 comprend l’illustration, l’imagerie en volume et les visuels photoréalistes. Le guide recommande de décrire la logique du dessin pour l’illustration, et le matériau, la lumière, la caméra et la profondeur pour une image d’aspect 3D. Cette dernière reste un visuel matriciel plutôt qu’un maillage modifiable. Pour une affiche ou un concept d’emballage, précisez les mots prioritaires, leur emplacement et l’interaction entre image et typographie. Le fabricant souligne la lisibilité des textes courts et moyens ; examinez le texte et l’agencement réels de l’image renvoyée avant de l’utiliser.
La génération prend en charge des prompts jusqu’à 10 000 caractères, une graine aléatoire, une à six sorties, des couleurs préférées et une couleur de fond souhaitée. Des styles personnalisés compatibles et des images de référence facultatifs peuvent guider le traitement visuel par une correspondance flexible ou précise. Choisissez une référence propre ou un ensemble appartenant au même univers visuel, puis laissez le prompt décrire le nouveau sujet et la scène. La correspondance des couleurs entre référence et sortie n’est pas garantie : gardez la palette requise explicite et comparez-y le résultat. Pour une génération avec style de référence, utilisez une à dix images PNG, JPG ou WebP, au plus 64 Mo au total et moins de 20 Mo chacune. Chaque référence doit avoir un côté court d’au moins 256 pixels, un côté long d’au plus 4 096 pixels et une résolution d’au plus 16 mégapixels. Utilisez soit ces références, soit un style enregistré compatible, plutôt que les deux.
L’opération documentée image-vers-image combine une image existante et un prompt, avec une force de 0 à 1 déterminant l’éloignement de la nouvelle sortie par rapport à la source. Elle n’accepte pas les commandes de style V4 dans cette opération. La référence actuelle de génération exclut aussi les noms de styles prédéfinis, negative_prompt, text_layout, artistic_level et no_text. Préparez une description positive du résultat souhaité et évaluez le visuel dans sa composition cible. V4 standard fournit une interprétation matricielle ciblée du design, avec une édition, un format et une taille de sortie précis. Pour image-vers-image, fournissez un PNG, JPG, WebP ou SVG de moins de 20 Mo, au plus 16 mégapixels, avec les deux côtés entre 256 et 4 096 pixels.
Ailoot Ultra · Images POST /v1/images/generations recraft/recraft-v4
recraft/recraft-v4Premiers pas
Recraft V4 génère des images matricielles 1K en privilégiant la composition, les relations de couleurs et une direction créative détaillée. Il couvre l’illustration, les scènes photoréalistes et les concepts de design graphique, avec des entrées de style facultatives et un processus distinct image-vers-image.
- Entrées acceptées
- Texte · Images
- Résultats
- Images
Disponible dans Ailoot · entrées et méthodes
Ailoot Ultra · Images POST /v1/images/generations
- Entrée
text,image- Sortie
image- Format de sortie
- Fichier image
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites recraft/recraft-v4 | Par défaut— |
Champprompt | Typestring | ExigenceObligatoire | Valeurs et limites Longueur minimale: 1 | Par défaut— |
Champn | Typeinteger | ExigenceFacultatif | Valeurs et limites Minimum: 1 Maximum: 6 | Par défaut— |
Champaspect_ratio | Typestring | ExigenceFacultatif | Valeurs et limites 1:1, 4:3, 3:4, 16:9, 9:16, auto | Par défaut— |
Champinput_references | Typearray | ExigenceFacultatif | Valeurs et limites Nombre minimal d’éléments: 0 Nombre maximal d’éléments: 1 | Par défaut— |
Combinaisons d’éléments d’entrée
Texte vers image · Obligatoire : prompt
reference_guided_image · Obligatoire : prompt, actual image reference
Paramètres et cycle de vie de la méthode
| Paramètre | Contrat |
|---|---|
Paramètrecontent_type | Contratapplication/json |
Paramètrerequired | Contratmodel, prompt |
Paramètrematerial_types | Contrattext, image |
Paramètreoptional_controls | Contratn, aspect_ratio, input_references |
Paramètren | Contrat{"minimum":1,"maximum":6} |
Paramètrereference_images | Contrat{"minimum":0,"maximum":1,"source":"contenu réel fourni par le client"} |
Paramètreprovider_specific_options | ContratUniquement style/controls/text_layout dans la liste exacte d’autorisation du point de terminaison enregistrée ; aucune structure supposée. |
Alias de méthode : /v1/images
Cycle de vie : synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · task_id effectivement renvoyé ou enregistrement de la bibliothèque multimédia
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
L’exemple avec uniquement une consigne conserve la structure officielle ImageGenerationRequest.
Conservez chaque image renvoyée et la réponse complète ; la quantité de sortie est la quantité réelle, et non n demandé.
Tarifs
Calcul du coût final
Les tarifs affichés servent à estimer le coût avant la génération. Le montant final est calculé à partir du coût enregistré pour la génération d’origine. La durée mesurée du résultat et les quantités prévisionnelles ne constituent pas la quantité finale facturable.
Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.
- Mode rapide
- Non précisé Lorsque le mode rapide est sélectionné
- Mode Flex
- Non précisé Lorsque le mode flex est sélectionné
- Effort de raisonnement maximal
- Non précisé Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)
Tarifs estimés à des fins de comparaison
Prix par configuration
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Barème tarifaire | Quantité prévisionnelle | Unité de facturation | Coût |
|---|---|---|---|---|
| ConfigurationTarifs de base des jetons | Barème tarifaireTarif de base | Quantité prévisionnelle— | Unité de facturation— | Coût Entrée · Tokens en entrée · Estimation à des fins de comparaison uniquement — / 1K tokens Sortie · Tokens en sortie · Estimation à des fins de comparaison uniquement — / 1K tokens Entrée · Lecture du cache · Estimation à des fins de comparaison uniquement — / 1K tokens Entrée · Écriture dans le cache · Estimation à des fins de comparaison uniquement — / 1K tokens Entrée · Écriture dans le cache, 1 h · Estimation à des fins de comparaison uniquement — / 1K tokens |
| ConfigurationUltra | Barème tarifaire— | Quantité prévisionnelle— | Unité de facturationpar image en sortie | Coût Sortie · image en sortie · Estimation à des fins de comparaison uniquement $0.08 par image en sortie |
| ConfigurationCoût estimé de la génération | Barème tarifaire— | Quantité prévisionnelleEstimation pour une génération | Unité de facturation— | Coût Sortie · Coût estimé de génération · Estimation à des fins de comparaison uniquement $0.08 estimation avant génération Cette estimation ne constitue ni des frais supplémentaires ni un tarif fixe pour la génération terminée. |
Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. Fonctionnement de la réservation et du débit →
Détails du tarif de référence
Les barèmes de référence du modèle ne modifient ni la sélection de méthode, ni les devis, ni les coûts. Les frais actifs utilisent les tarifs de la méthode Ailoot sélectionnée.
Configurations tarifaires des images
Prix par configuration
| Configuration | Conditions de facturation | Coût |
|---|---|---|
| ConfigurationImage de sortie | Conditions de facturationAucune variante tarifaire n’est déclarée. | Coût Sortie · Image de sortie $0.08 par image Les entrées équivalentes décrivent la même facturation ; elles n’ajoutent pas de frais supplémentaires. |
Exemples de requêtes
Ailoot Ultra · Images
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'recraft/recraft-v4', 'prompt': 'a red panda astronaut floating in space, studio lighting'}
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
request={'model': 'recraft/recraft-v4', 'prompt': 'a red panda astronaut floating in space, studio lighting'}
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "recraft/recraft-v4", "prompt": "a red panda astronaut floating in space, studio lighting"};
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
if(!encoded && uri.startsWith("data:image/")) {
const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
encoded=uri.slice(comma+1);
}
if(encoded) {
if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
raw=Buffer.from(encoded,"base64");
} else if(uri) {
const u=new URL(uri,"https://api.ailoot.ai");
if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
if(!response.ok) throw new Error("Image content download failed: "+response.status);
raw=Buffer.from(await response.arrayBuffer());
} else throw new Error("Image has neither bytes nor URL");
if(!raw.length) throw new Error("Empty image result");
const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
Recevoir et enregistrer les résultats
Ailoot Ultra · Images
Téléchargez chaque image renvoyée ou enregistrez son contenu Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Conserver tous les résultats terminés
Enregistrez chaque image terminée ; récupérez chaque URL renvoyée ou décodez son contenu Base64.
Conservez chaque élément de données et la consommation complète ; prenez possession de toutes les images réellement renvoyées et enregistrez-les. Aucune URL ni aucun ID inventé.
Si la réponse d’origine doit être vérifiée
Si le résultat d’une génération ou d’une retouche d’image nécessite une vérification, conservez l’operation_id/X-Client-Request-ID d’origine et les informations renvoyées sur le résultat. Récupérez les résultats existants qui vous appartiennent via la bibliothèque multimédia, à l’aide des valeurs task_id ou asset_id réelles. Ne soumettez pas à nouveau la requête de génération/retouche et ne construisez pas d’URL d’interrogation du statut à partir d’operation_id.
Champs de la réponse
| Champ | Type |
|---|---|
Champcreated | Typeinteger |
Champdata[].url | Typestring |
Champdata[].b64_json | Typebase64 string |
Champusage | Typeobject |
Erreurs et étapes suivantes
| Réponse | Condition | Étape suivante |
|---|---|---|
Réponse400 · invalid_request_error | ConditionChamps obligatoires, représentation des contenus ou valeur de paramètre non valides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
Réponseserver_error | ConditionLa réponse renvoyée indique que l’opération ou le résultat nécessite une vérification | Étape suivanteConservez l’identifiant d’opération/de tâche initialement renvoyé, les en-têtes de la requête et la réponse ; poursuivez les lectures prises en charge de cette opération d’origine. Ne soumettez pas à nouveau la requête de création. |
Alias
Alias du modèle
Ailoot Ultra recraft/recraft-v4
Alias des chemins de méthode
/v1/images
ID d’appel associés
FAQ · Recraft: Recraft V4
- Quelles entrées et quels résultats sont disponibles ?
POST /v1/images/generations·recraft/recraft-v4:text,image→image- Quels champs la requête utilise-t-elle ?
POST /v1/images/generations·recraft/recraft-v4:model,prompt,n,aspect_ratio,input_references- Quelles limites s’appliquent ?
POST /v1/images/generations·recraft/recraft-v4:n.minimum:1;n.maximum:6