ByteDance Seed: Seedream 5.0 Flash
Seedream 5.0 Flash crée et retouche des images à partir de texte et de références visuelles, avec des changements guidés spatialement, du texte multilingue dans l’image et la décomposition en calques. ByteDance Seed positionne Flash pour une génération plus rapide, tout en le distinguant de l’édition Pro axée sur la qualité.
À 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.
Une édition de création d’images plus rapide
Seedream 5.0 Flash est le modèle de génération et de retouche d’images de ByteDance Seed pour les processus qui privilégient la vitesse de génération. Le guide Pro/Flash du fabricant décrit la création de texte à image et d’image à image avec une ou plusieurs références. Il distingue la génération plus rapide de Flash de la priorité à une meilleure qualité d’image de Pro, sans établir de délai de réponse fixe pour chaque brief.
Les fonctions communes distinctives sont la retouche interactive, la décomposition en calques et la génération multilingue native. La génération ordinaire renvoie une image terminée. Le processus Flash du fabricant ne prend en charge ni la génération séquentielle d’images liées, ni la recherche web, ni la sortie d’images en flux continu. Son optimisation de prompt utilise le mode standard ; la commande distincte d’optimisation rapide appartient à Pro plutôt qu’à Flash.
Créer à partir d’un brief et de références
Indiquez l’image souhaitée, le sujet principal, la composition et le traitement visuel, puis identifiez ce que chaque référence contrôle. Pour un visuel de produit, séparez la référence qui établit l’objet de celle qui fournit une palette ou une matière de surface. « Conservez la silhouette et l’angle de vue de l’objet de la première image ; utilisez la deuxième image seulement pour la palette discrète du fond » donne aux références des rôles distincts.
Le fabricant recommande des prompts concis, de 300 caractères chinois ou 600 mots anglais au maximum. C’est un conseil de préparation plutôt qu’une limite stricte annoncée d’entrée textuelle. Listez d’abord les exigences décisives, y compris le texte exact à afficher, le rapport de format souhaité et les détails à garder inchangés. Examinez l’image terminée au regard de cette liste au lieu de dépendre seulement de son apparence générale.
Retouche guidée spatialement
Flash peut utiliser des points, cadres de délimitation, flèches et marques libres pour identifier l’endroit d’une retouche. Fournissez l’image source avec une localisation et le changement. Pour un concept d’intérieur, marquez la chaise, demandez un remplacement de tissu et identifiez le sol, le mur, l’angle de caméra et les objets voisins à préserver. Si les marques servent seulement de guide, demandez explicitement leur suppression de l’image terminée.
Le guide de retouche par coordonnées du fabricant utilise les balises <point> et <bbox> avec des coordonnées normalisées de 0 à 999 par rapport à l’image d’entrée spécifiée. Un point contient x et y ; un cadre contient les coordonnées du coin supérieur gauche et du coin inférieur droit. Identifiez le numéro de l’image et l’objet cible, surtout lorsqu’un cadre comprend plusieurs sujets. Pour une retouche entre images, distinguez l’objet à prendre dans une référence et la zone de destination dans une autre.
Utilisez les dimensions propres à l’image affichée pour obtenir la position proportionnelle ; le zoom du canevas, son déplacement ou les coordonnées du navigateur ne sont pas les coordonnées normalisées de l’image. Décrivez les zones protégées ainsi que la zone retouchée. Comparez la perspective, l’éclairage et les détails environnants du résultat à la source originale.
Séparer une composition en calques modifiables
La décomposition en calques est un mode distinct qui prend exactement une image et renvoie une image de base plus jusqu’à 16 calques indépendants. Chaque calque est un PNG avec canal alpha. Un prompt peut nommer les éléments à séparer, comme le titre, le sujet principal et les décorations ; sans prompt de décomposition, le modèle identifie automatiquement les éléments principaux.
Les résultats comprennent les noms des calques, leurs descriptions, l’ordre d’empilement et les cadres de placement. Utilisez l’image de base avec l’indice d’empilement zéro, puis placez les autres calques par ordre croissant. Les cadres absolus décrivent le placement dans l’image de base de sortie ; les cadres normalisés décrivent le placement proportionnel sur un canevas différent. Conservez ces métadonnées de placement avec les fichiers image pour pouvoir reconstruire la composition originale avant de la réorganiser.
Pour une révision d’affiche, séparez l’illustration principale du titre et des décorations, puis examinez les contours et toute zone de fond restaurée. Un calque transparent peut être retouché comme entrée unique avec canal alpha et une sortie PNG transparente. L’option de fond transparent est limitée à ce processus de retouche d’image à entrée unique ; la génération ordinaire à partir de texte est une opération séparée.
Composition multilingue
Outre le chinois et l’anglais, le fabricant documente la prise en charge native des prompts et du texte dans l’image en russe, arabe, filipino, thaï, turc, coréen, malais, espagnol, portugais, indonésien, français, allemand, vietnamien et japonais. Fournissez le texte approuvé exact et le sens de lecture, et identifiez la zone de chaque bloc de texte. Vérifiez les accents, les caractères liés, les sauts de ligne et les petites étiquettes dans l’image finale.
Fichiers de référence et spécifications de sortie
La génération d’images accepte jusqu’à 10 références en JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC ou HEIF. Chacune peut atteindre 30 Mo, avec les deux côtés supérieurs à 14 pixels, 196 à 36’000’000 pixels au total et un rapport de format de 1:16 à 16:1. La décomposition en calques exige en revanche un JPEG ou PNG de 262’144 à 36’000’000 pixels, jusqu’à 30 Mo, dans la même plage de rapports.
La génération propose des paliers de sortie 1K, 1.5K et 2K, avec 2K par défaut, ou des dimensions explicites avec 921’600 à 4’624’220 pixels au total et des rapports de 1:16 à 16:1. Les deux contraintes s’appliquent aux dimensions personnalisées. La sortie en calques utilise 1K, 1.5K, 2K ou auto, avec auto par défaut ; la base et chaque calque conservent leurs rapports de format sources respectifs.
Les images terminées sont en JPEG ou PNG. Le format de l’image de base peut être sélectionné séparément, tandis que les calques décomposés restent des PNG avec canal alpha. La livraison peut utiliser des données d’image encodées ou des liens de téléchargement conservés pendant 24 heures. Enregistrez chaque image renvoyée et ses métadonnées pour le processus de design prévu. Examinez le texte, les détails retouchés et l’alignement des calques à la taille d’utilisation de la création.
Ailoot Ultra · Images POST /v1/images/generations bytedance-seed/seedream-5-0-flash
bytedance-seed/seedream-5-0-flash
bytedance-seed/seedream-5-0-flashPremiers pas
Créez une seule image finalisée à partir d’un descriptif écrit.
- Créer une image fixe de produit
- Explorer un concept visuel
- Illustrer une scène
- Entrées acceptées
- Texte
- Résultats
- Images
Disponible dans Ailoot · entrées et méthodes
Ailoot Ultra · Images POST /v1/images/generations
- Entrée
text- Sortie
image- Format de sortie
- Fichier image
- Nombre de sorties
- 1 sortie
| Champ | Type | Exigence | Valeurs et limites | Par défaut |
|---|---|---|---|---|
Champmodel | Typestring | ExigenceObligatoire | Valeurs et limites bytedance-seed/seedream-5-0-flash | Par défaut— |
Champprompt | Typestring | ExigenceObligatoire | Valeurs et limites Longueur minimale: 1 Conditions: Consigne UTF8 non vide. Aucune limite de caractères valable pour tous les modèles du fabricant n’est inventée. | Par défaut— |
Champn | Typeinteger | ExigenceFacultatif | Valeurs et limites 1 | Par défaut1 |
Champresponse_format | Typestring | ExigenceFacultatif | Valeurs et limites url, b64_json | Par défaut— |
Champstream | Typeboolean | ExigenceFacultatif | Valeurs et limites false | Par défautfalse |
Combinaisons d’éléments d’entrée
Texte vers image · Obligatoire : prompt
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 |
Paramètreoptional | Contratn, response_format, stream |
Paramètren | Contrat1 |
Paramètrestream | Contratfalse |
Paramètreresponse_format | Contraturl, b64_json |
Paramètrereference_images | Contratfalse |
Paramètreedit | Contratfalse |
Paramètreoutput_format_optional | Contrat |
Paramètreresolution_control | Contratnull |
Paramètreaspect_ratio_control | Contratnull |
Paramètreother_fields | Contratrejeté, sauf pour le routage interne exact du fournisseur fixé dans la déclaration |
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}
Générez une image à partir de la consigne.
Enregistrez chaque élément de données ; url/b64_json sont les encodages des résultats.
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 |
| Configurationimage en entrée | Barème tarifaire— | Quantité prévisionnelle— | Unité de facturationpar image en entrée | Coût Entrée · image en entrée · Estimation à des fins de comparaison uniquement $0 par image en entrée |
| 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.036 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.036 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
Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.
| Configuration | Conditions de facturation | Coût |
|---|---|---|
| ConfigurationImage en sortie | Conditions de facturationAucune variante tarifaire n’est déclarée. | Coût Sortie · Image en sortie $0.036 par image |
| ConfigurationImage en entrée | Conditions de facturationAucune variante tarifaire n’est déclarée. | Coût Entrée · Image en entrée $0 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
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=json.loads('{"model": "bytedance-seed/seedream-5-0-flash", "prompt": "A lighthouse on a cliff, watercolor", "n": 1, "response_format": "b64_json"}')
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': 'bytedance-seed/seedream-5-0-flash', 'prompt': 'A lighthouse on a cliff, watercolor', 'n': 1, 'response_format': 'b64_json'}
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": "bytedance-seed/seedream-5-0-flash", "prompt": "A lighthouse on a cliff, watercolor", "n": 1, "response_format": "b64_json"};
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.
Enregistrez chaque élément de données. Décodez chaque b64_json ou récupérez le contenu de chaque URL signée renvoyée. Choisissez l’extension du fichier à partir du type MIME et des octets réels.
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 bytedance-seed/seedream-5-0-flash
Alias des chemins de méthode
Utilisez les chemins de méthode indiqués ci-dessus.
ID d’appel associés
FAQ · ByteDance Seed: Seedream 5.0 Flash
- Quelles entrées et quels résultats sont disponibles ?
POST /v1/images/generations·bytedance-seed/seedream-5-0-flash:text→image- Quels champs la requête utilise-t-elle ?
POST /v1/images/generations·bytedance-seed/seedream-5-0-flash:model,prompt,n,response_format,stream