models

Recraft: Recraft V4

Markdown · JSON

Recraft: Recraft V4

Recraft V4 génère des images raster 1K en mettant l’accent sur 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 d’image à image séparé.

À 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 raster standard de la génération V4 de Recraft. Le fabricant souligne le jugement de design : une composition équilibrée, des relations de couleurs cohérentes et des détails servant l’intention visuelle. Il peut travailler l’illustration stylisée, les scènes photographiques et les concepts de design graphique. Utilisez-le lorsque le brief demande une image combinant des choix esthétiques et la précision du prompt, qu’il s’agisse d’explorer une ambiance à partir d’une courte direction ou de définir en détail une mise en page réfléchie.

Le code exact du modèle est recraftv4. Sa référence producteur indique une sortie raster 1K en WebP sans perte ou PNG. Une image carrée mesure 1024 × 1024 pixels, le 16:9 mesure 1344 × 768 et le 2:3 mesure 832 × 1280 ; les autres rapports pris en charge utilisent leurs propres dimensions. V4 Pro est l’édition raster 2K séparée, tandis que V4 Vector et Pro Vector renvoient du SVG modifiable. Choisissez la variante V4 exacte pour le livrable prévu plutôt que de combiner ces propriétés de sortie différentes.

Le guide du fabricant distingue les prompts interprétatifs brefs de la direction créative structurée. Une courte phrase peut laisser place à l’exploration de la forme, de l’ambiance et du cadrage. Un brief structuré peut nommer le sujet, le décor, la pose, la matière, les éléments secondaires, l’éclairage et la hiérarchie visuelle. Pour une illustration narrative, décrivez un cycliste traversant un petit pont, des formes simplifiées affirmées, des couleurs chaudes sourdes 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, les images en volume et les visuels photoréalistes. Le guide recommande de décrire la logique de dessin pour l’illustration et la matière, la lumière, la caméra et la profondeur pour une image d’apparence 3D. Cette dernière reste un visuel raster plutôt qu’un maillage modifiable. Pour un concept d’affiche ou d’emballage, indiquez les mots principaux, leur place et l’interaction entre image et typographie. Le fabricant souligne la lisibilité des textes courts ou de longueur moyenne ; examinez le texte et la disposition réels dans 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 correspondance souple ou précise. Choisissez une référence nette 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 donc la palette requise explicite et comparez-y le résultat. Pour la génération par références de style, utilisez une à dix images PNG, JPG ou WebP, sans dépasser 64 Mo au total et avec moins de 20 Mo chacune. Le côté le plus court de chaque référence doit mesurer au moins 256 pixels, son côté le plus long ne doit pas dépasser 4’096 pixels et sa résolution doit être de 16 mégapixels au maximum. Utilisez soit ces références, soit un style enregistré compatible, plutôt que les deux.

L’opération documentée d’image à 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 la ressource dans sa composition cible. V4 standard fournit une interprétation de design raster ciblée, avec une édition, un format et une taille de sortie précis. Pour l’image à image, fournissez un PNG, JPG, WebP ou SVG de moins de 20 Mo, de 16 mégapixels au maximum, avec les deux côtés compris entre 256 et 4’096 pixels.

Ailoot Ultra · Images POST /v1/images/generations recraft/recraft-v4

recraft/recraft-v4

Recraft /recraft/recraft-v4

Premiers pas

Recraft V4 génère des images raster 1K en mettant l’accent sur 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 d’image à image séparé.

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
ChampTypeExigenceValeurs et limitesPar défaut
ChampmodelTypestringExigenceObligatoireValeurs et limites
recraft/recraft-v4
Par défaut—
ChamppromptTypestringExigenceObligatoireValeurs et limites
Longueur minimale: 1
Par défaut—
ChampnTypeintegerExigenceFacultatifValeurs et limites
Minimum: 1
Maximum: 6
Par défaut—
Champaspect_ratioTypestringExigenceFacultatifValeurs et limites
1:1, 4:3, 3:4, 16:9, 9:16, auto
Par défaut—
Champinput_referencesTypearrayExigenceFacultatifValeurs 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ètreContrat
Paramètrecontent_typeContratapplication/json
ParamètrerequiredContratmodel, prompt
Paramètrematerial_typesContrattext, image
Paramètreoptional_controlsContratn, aspect_ratio, input_references
ParamètrenContrat{"minimum":1,"maximum":6}
Paramètrereference_imagesContrat{"minimum":0,"maximum":1,"source":"contenu réel fourni par le client"}
Paramètreprovider_specific_optionsContratUniquement les champs style/controls/text_layout de la liste d’autorisation exacte enregistrée pour ce point de terminaison ; aucune structure deviné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 utilisant uniquement une consigne conserve la structure officielle ImageGenerationRequest.

Conservez chaque image renvoyée et la réponse complète ; le nombre de résultats est le nombre réel, et non le nombre 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.

ConfigurationBarème tarifaireQuantité prévisionnelleUnité de facturationCoût
ConfigurationTarifs de base des jetonsBarème tarifaireTarif de baseQuantité 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
ConfigurationUltraBarème tarifaire—Quantité prévisionnelle—Unité de facturationpar image en sortieCoût
Sortie · image en sortie · Estimation à des fins de comparaison uniquement $0.08 par image en sortie
ConfigurationCoût estimé de la générationBarème tarifaire—Quantité prévisionnelleEstimation pour une générationUnité 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 de tarification des images

Prix par configuration

ConfigurationConditions de facturationCoût
ConfigurationImage en sortieConditions de facturationAucune variante tarifaire n’est déclarée.Coût
Sortie · Image en sortie $0.08 par image

Les mentions équivalentes décrivent le même montant facturé ; elles n’ajoutent pas de frais supplémentaires.

Exemples de requêtes

Ailoot Ultra · Images

curlPython SDKNode.js SDK
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}/content
  • GET /v1/media/assets
  • GET /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 effectivement renvoyées et enregistrez-les. Aucun lien ni identifiant 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
ChampType
ChampcreatedTypeinteger
Champdata[].urlTypestring
Champdata[].b64_jsonTypebase64 string
ChampusageTypeobject
Erreurs et étapes suivantes
RéponseConditionÉtape suivante
Réponse400 · invalid_request_errorConditionChamps 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_errorConditionLa 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

recraft/recraft-v4

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

Plus de détails

Connectez Ailoot à Claude Code, OpenCode, Hermes ou à votre application.

L’entreprise et son portefeuille de projets

L’entreprise et son portefeuille de projets : des millions de clients ; des ventes qui se chiffrent en milliards chaque mois.

Achetez des tokens à prix réduit.

Une remise d’abonnement pour le travail régulier. Des codes promo jusqu’à 50% sur l’achat de tokens.

Abonnement
Choisissez une offre à tarif réduit pour vos requêtes régulières.
Code promo jusqu’à 50%
Saisissez le code à l’achat. Le prix est recalculé selon la promotion en cours.
Dépenses dans l’historique
Modèle, tokens et montant sont enregistrés pour chaque requête.

Choisir un abonnement · Voir les prix des modèles

Connectez l’API au produit que vous vendez.

SaaS, applications et bots selon l’offre officielle et le contrat de licence Ailoot. Pour la revente, demandez une licence revendeur.

Application commerciale
Intégrez la génération de texte, d’images, de vidéo et de son aux fonctions payantes de votre service.
Licence revendeur
Envoyez la description du projet et le mode d’accès. Demandez des conditions écrites d’utilisation et de revente.
Documents sur le site
L’offre officielle, le contrat de licence et la politique de traitement des données sont accessibles avant connexion.

Demander une licence revendeur · Offre officielle et contrat de licence