Source: https://ailoot.ai/models/fr-ca/wan2-7-image/
Canonical: https://ailoot.ai/models/fr-ca/wan2-7-image/
Language: fr-ca

# wan2.7-image

[Markdown](https://ailoot.ai/models/fr-ca/wan2-7-image/index.md) · [JSON](https://ailoot.ai/models/fr-ca/wan2-7-image/facts.json)

## [wan2.7-image](https://ailoot.ai/models/fr-ca/wan2-7-image/)

Modèle de génération d’images à partir de texte pour préparer des variantes de design et des illustrations. Selon Alibaba, cette version vise une création d’images plus rapide.

- [**Ailoot · Génération d’images** `POST /v1/images/generations` `wan2.7-image`](https://ailoot.ai/models/fr-ca/wan2-7-image/#method-0)

À 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.

Wan2.7-Image crée des images à partir d’instructions textuelles. La fiche actuelle d’Ailoot propose précisément une entrée de texte et une image en sortie. Selon Alibaba, cette version vise à obtenir des variantes plus rapidement. La spécification du fabricant prévoit aussi l’édition, la combinaison de références et les modifications locales ; elles nécessitent une prise en charge distincte des images d’entrée, absente de la méthode actuelle de la fiche.

#### Modes décrits par Alibaba

Pour le mode avec références, Alibaba prévoit jusqu’à neuf images sources dans les instructions. Elles servent de repères pour l’apparence de l’objet, la composition et les détails. Le modèle peut réunir plusieurs matériaux dans une nouvelle scène ou modifier l’image source en conservant le sujet principal. L’édition ciblée utilise des zones explicitement délimitées : jusqu’à deux régions rectangulaires peuvent être désignées sur une image.

Dans la spécification d’Alibaba, le mode normal produit entre un et quatre résultats. Une série séquentielle permet de demander jusqu’à 12 images liées par une histoire ou par les traits communs des personnages. Il s’agit d’une limite supérieure : le modèle détermine lui-même le nombre d’images nécessaire et peut en renvoyer moins. Les instructions et les matériaux sources aident à maintenir un fil narratif commun.

Un mode de raisonnement est prévu pour la génération normale à partir de texte, sans références ni série séquentielle. Il analyse plus précisément une description complexe avant de créer l’image. Ce mode ne s’applique ni à l’édition à partir d’images ni aux séries séquentielles. Une palette de 3–10 couleurs peut être définie en dehors des séries séquentielles.

#### Entrée et résultat

Les modes du fabricant utilisant des images sources prennent en charge JPEG, JPG, PNG sans transparence, BMP et WEBP. Chaque côté peut mesurer entre 240 et 8000 pixels, le fichier peut peser jusqu’à 20 Mo et le rapport largeur/hauteur peut aller de 1:8 à 8:1.

Les instructions textuelles prennent en charge le chinois et l’anglais et sont limitées à 5000 caractères ; la partie excédentaire est ignorée. Cette version ne prévoit ni description négative ni extension supplémentaire des instructions.

La sortie est en PNG, avec une résolution jusqu’au niveau 2K. Cette désignation concerne la surface totale de pixels, et non une longueur maximale fixe par côté ; le format peut être choisi de 1:8 à 8:1. Lors d’une édition avec une résolution prédéfinie, le résultat conserve le rapport largeur/hauteur de la dernière référence. Une même graine aléatoire initiale aide à obtenir des variantes similaires, sans garantir une correspondance complète.

**Ailoot · Génération d’images** `POST /v1/images/generations` `wan2.7-image`

[`wan2.7-image`](https://ailoot.ai/models/fr-ca/#m=wan2.7-image&route=Core&caller=wan2.7-image&fmt=images)

Alibaba /`wan2.7-image`

### Pour commencer

Modèle de génération d’images à partir de texte pour préparer des variantes de design et des illustrations. Selon Alibaba, cette version vise une création d’images plus rapide.

Entrées acceptées

Texte

Résultats

Images

### Disponible dans Ailoot · entrées et méthodes

**Ailoot · Génération d’images** `POST /v1/images/generations`

Entrée

`text`

Sortie

`image`

Format de sortie

Fichier image

| Champ | Type | Exigence | Valeurs et limites | Par défaut |
| --- | --- | --- | --- | --- |
| Champ`model` | Type`string` | ExigenceObligatoire | Valeurs et limites wan2.7-image | Par défaut— |
| Champ`prompt` | Type`string` | ExigenceObligatoire | Valeurs et limites Longueur minimale: 1 | Par défaut— |
| Champ`n` | Type`integer` | ExigenceFacultatif | Valeurs et limites Minimum: 1 | Par défaut1 |
| Champ`response_format` | Type`string` | ExigenceFacultatif | Valeurs et limites url, b64\_json | Par défaut— |
| Champ`stream` | Type`boolean` | ExigenceFacultatif | Valeurs et limites | Par défautfalse |
| Champ`size` | Type`string` | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
| Champ`partial_images` | Type`integer` | ExigenceFacultatif | Valeurs et limites Selon le modèle | Par défaut— |
| Champ`images[].image_url` | Type`string` | ExigenceNon pris en charge | Valeurs et limites Nombre maximal d’octets décodés: 20 971 520 Types MIME: image/png, image/jpeg Nombre maximal d’images par tableau: 9 Conditions: Une URL réelle par objet images\[\]. Le nombre d’éléments du tableau est distinct de cette valeur terminale de type chaîne. S’applique lorsque: Uniquement JSON images/edits; JSON images/generations n’analyse pas les références images. | Par défaut— |
| Champ`image` | Type`file` | ExigenceFacultatif | Valeurs et limites Nombre maximal d’octets décodés: 20 971 520 Types MIME: image/png, image/jpeg S’applique lorsque: génération multipart/form-data | Par défaut— |
| Champ`image[]` | Type`file[]` | ExigenceFacultatif | Valeurs et limites Nombre maximal d’éléments: 9 Nombre maximal d’octets décodés: 20 971 520 Types MIME: image/png, image/jpeg S’applique lorsque: génération multipart/form-data | Par défaut— |

Combinaisons d’éléments d’entrée

**Texte vers image** · Obligatoire : prompt

**reference\_images\_generation** · Obligatoire : prompt

Paramètres et cycle de vie de la méthode

| Paramètre | Contrat |
| --- | --- |
| Paramètre`material_types` | Contrattext |
| Paramètre`required` | Contratmodel, prompt |
| Paramètre`optional_controls` | Contratnull |
| Paramètre`content_type` | Contratapplication/json |

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}`

Les structures des méthodes et les ID sont exacts ; la capacité du fournisseur est distincte de l’admission des requêtes.

### Tarifs

#### Tarifs des méthodes Ailoot

Sortie

0,03 USD *par image 1K*

Sortie

0,03 USD *par image 2K*

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 →](https://ailoot.ai/docs/fr-ca/billing/reserve/)

#### 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.

wan2.7-image

#### Prix par configuration

| Configuration | Conditions de facturation | Coût |
| --- | --- | --- |
| Configurationwan2.7-image · Configuration par défaut | Conditions de facturationConfiguration par défaut | Coût Entrée · Entrée **0,00 USD** par appel Sortie · Sortie **0,06 USD** par appel |

### Exemples de requêtes

#### Ailoot · Génération d’images

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "wan2.7-image", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
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
```

```python
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")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'wan2.7-image', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
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])
```

```js
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": "wan2.7-image", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
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 · Génération d’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.

Enregistrez chaque élément de données. Décodez chaque b64\_json ou récupérez 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 |
| --- | --- |
| Champ`created` | Typeinteger |
| Champ`data[].url` | Typestring |
| Champ`data[].b64_json` | Typebase64 string |
| Champ`usage` | Typeobject |

Erreurs et étapes suivantes

| Réponse | Condition | Étape suivante |
| --- | --- | --- |
| Réponse400 · `invalid_request_error` | ConditionChamps obligatoires, représentation des éléments fournis ou valeur de paramètre invalides | Étape suivanteCorrigez les champs indiqués avant une nouvelle requête de création. |
| Réponse`server_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** [`wan2.7-image`](https://ailoot.ai/models/fr-ca/#m=wan2.7-image&route=Core&caller=wan2.7-image&fmt=images)

#### Alias des chemins de méthode

Utilisez les chemins de méthode indiqués ci-dessus.

#### ID d’appel associés

[`wan2.7-image`](https://ailoot.ai/models/fr-ca/#m=wan2.7-image&route=Core&caller=wan2.7-image&fmt=images)

FAQ · wan2.7-image

Quelles entrées et quels résultats sont disponibles ?

`POST /v1/images/generations` · `wan2.7-image`: `text` → `image`

Quels champs la requête utilise-t-elle ?

`POST /v1/images/generations` · `wan2.7-image`: `model`, `prompt`, `n`, `response_format`, `stream`, `image`, `image[]`

Quelles limites s’appliquent ?

`POST /v1/images/generations` · `wan2.7-image`: `n.minimum`: `1`

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](https://ailoot.ai/docs/fr-ca/billing/subscriptions/) · [Voir les prix des modèles](https://ailoot.ai/models/fr-ca/)

## 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](mailto:support@ailoot.ai) · [Offre officielle et contrat de licence](https://ailoot.ai/legal/offer?lang=fr-ca)

## Ailoot · L’entreprise et son portefeuille de projets





Ailoot s’appuie sur une expérience opérationnelle éprouvée, une large clientèle, un service stable et un suivi continu des KPI.





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





Ailoot met cette expérience opérationnelle au service de l’accès API aux fonctions d’IA dans les produits des clients, leurs agents, applications et automatisations.
