Source: https://ailoot.ai/models/da/wan2-7-image-pro/
Canonical: https://ailoot.ai/models/da/wan2-7-image-pro/
Language: da

# wan2.7-image-pro

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

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

Model til at skabe billeder ud fra en tekstinstruktion. Producenten beskriver styring af farvepaletten og opløsning op til 4K ved almindelig tekstbaseret generering.

- [**Ailoot · Billeder** `POST /v1/images/generations` `wan2.7-image-pro`](https://ailoot.ai/models/da/wan2-7-image-pro/#method-0)
- [**Ailoot · Billeder** `POST /v1/images/generations` `wan-image`](https://ailoot.ai/models/da/wan2-7-image-pro/#method-1)
- [**Ailoot · Billeder** `POST /v1/images/generations` `wan-image-latest`](https://ailoot.ai/models/da/wan2-7-image-pro/#method-2)

Om modellen

Denne beskrivelse dækker modellens funktioner. Tilgængelige input, output og indstillinger i Ailoot står nedenfor for den valgte metode.

Wan2.7-Image-Pro er en model fra Alibaba til at skabe billeder ud fra tekst. Det aktuelle Ailoot-kort offentliggør tekst som input og billeder som resultat. Producenten beskriver også redigering, kombination af referencer og lokale ændringer; disse arbejdsmåder kræver særskilt understøttelse af inputbilleder og findes ikke i kortets aktuelle metode.

I producentens referencetilstand kan op til ni udgangsbilleder sendes, og det kan beskrives, hvilke elementer fra hvert billede der skal bruges. Ved redigering bevarer modellen hovedobjektet, ændrer valgte detaljer eller samler en ny komposition fra flere materialer. For mere præcis styring kan op til to rektangulære områder markeres i ét inputbillede.

#### Palet og kompleks instruktion

Uden for sekventielle serier kan en palet med 3–10 farver angives. Ræsonnementstilstanden er beregnet til almindelig tekstbaseret generering uden referencer og sekventielle serier: modellen analyserer først scenebeskrivelsen.

I Alibabas specifikation omfatter almindeligt output fra ét til fire billeder. I en fortællende serie kan en øvre grænse på op til 12 sættes; modellen vælger det faktiske antal efter opgaven. Serien kan bruge tekst og referencer til fælles karaktertræk og sammenhængende udvikling af historien. Palet og ræsonnement anvendes ikke i denne tilstand.

#### Opløsningen afhænger af tilstanden

4K understøttes ved almindelig tekstbaseret generering uden referencer og sekventielle serier. Billedredigering og sekventielle serier er begrænset til 2K. Betegnelserne angiver pixelarealet, ikke samme længde på hver side. Billedformatet kan vælges fra 1:8 til 8:1; ved redigering med en forudindstillet opløsning følger billedformatet den sidste reference. Resultaterne gemmes i PNG.

Til arbejdsmåder med inputbilleder accepterer Alibaba JPEG, JPG, PNG uden gennemsigtighed, BMP og WEBP. Grænserne er 20 MB pr. fil, fra 240 til 8000 pixels på hver side og et billedformat fra 1:8 til 8:1. Tekstinstruktionen understøtter kinesisk og engelsk; maksimum er 5000 tegn, og den overskydende del kasseres. Negativ beskrivelse og udvidelse af instruktionen tilbydes ikke i denne version. Tilfældighedsseedet hjælper med at bevare lighed mellem varianter, men sikrer ikke en nøjagtig gentagelse.

**Ailoot · Billeder** `POST /v1/images/generations` `wan2.7-image-pro`

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

Alibaba /`wan2.7-image-pro`

Model-ID

- `wan2.7-image-pro`
- `wan-image`
- `wan-image-latest`

### Start

Model til at skabe billeder ud fra en tekstinstruktion. Producenten beskriver styring af farvepaletten og opløsning op til 4K ved almindelig tekstbaseret generering.

Accepterede input

Tekst

Resultater

Billeder

### Tilgængelig i Ailoot · input og metoder

**Ailoot · Billeder** `POST /v1/images/generations`

Inputtyper

`text`

Outputtyper

`image`

Outputformat

Billedfil

| Felt | Type | Krav | Værdier og grænser | Standard |
| --- | --- | --- | --- | --- |
| Felt`model` | Type`string` | KravPåkrævet | Værdier og grænser wan2.7-image-pro | Standard— |
| Felt`prompt` | Type`string` | KravPåkrævet | Værdier og grænser Minimumslængde: 1 | Standard— |
| Felt`n` | Type`integer` | KravValgfrit | Værdier og grænser Minimum: 1 | Standard1 |
| Felt`response_format` | Type`string` | KravValgfrit | Værdier og grænser url, b64\_json | Standard— |
| Felt`stream` | Type`boolean` | KravValgfrit | Værdier og grænser | Standardfalse |
| Felt`size` | Type`string` | KravValgfrit | Værdier og grænser Afhænger af modellen | Standard— |
| Felt`partial_images` | Type`integer` | KravValgfrit | Værdier og grænser Afhænger af modellen | Standard— |
| Felt`images[].image_url` | Type`string` | KravIkke understøttet | Værdier og grænser Maksimalt antal afkodede bytes: 20.971.520 MIME-typer: image/png, image/jpeg Maksimalt antal billeder pr. array: 9 Betingelser: Én faktisk URL pr. images\[\]-objekt. Antallet i arrayet er noget andet end denne strengværdi på bladniveau. Gælder når: Kun JSON images/edits; JSON images/generations fortolker ikke images-referencer. | Standard— |
| Felt`image` | Type`file` | KravValgfrit | Værdier og grænser Maksimalt antal afkodede bytes: 20.971.520 MIME-typer: image/png, image/jpeg Gælder når: generering med multipart/form-data | Standard— |
| Felt`image[]` | Type`file[]` | KravValgfrit | Værdier og grænser Maksimalt antal elementer: 9 Maksimalt antal afkodede bytes: 20.971.520 MIME-typer: image/png, image/jpeg Gælder når: generering med multipart/form-data | Standard— |

Kombinationer af inputmaterialer

**Tekst til billede** · Påkrævet: prompt

**reference\_images\_generation** · Påkrævet: prompt

Metodeparametre og livscyklus

| Parameter | Kontrakt |
| --- | --- |
| Parameter`material_types` | Kontrakttext |
| Parameter`required` | Kontraktmodel, prompt |
| Parameter`optional_controls` | Kontraktnull |
| Parameter`content_type` | Kontraktapplication/json |

Livscyklus: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · det faktisk returnerede task\_id eller posten i mediebiblioteket

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse.

### Priser

#### Ailoot-metodetakster

Output

0,075 US$ *pr. 1K-billede*

Output

0,075 US$ *pr. 2K-billede*

Ailoot reserverer et estimeret beløb før en anmodning. Efter resultatet afregnes det endelige beløb ud fra det målte forbrug. Ved streaming bruges den endelige forbrugsregistrering til afregningen. [Sådan fungerer reservation og afregning →](https://ailoot.ai/docs/da/billing/reserve/)

#### Detaljer om referencetariffen

Referenceplaner på modelniveau ændrer ikke metodevalg, prisoverslag eller opkrævninger. Ved den aktive afregning anvendes taksterne for den valgte Ailoot-metode.

wan2.7-image-pro

#### Priser efter konfiguration

| Konfiguration | Afregningsbetingelser | Beløb |
| --- | --- | --- |
| Konfigurationwan2.7-image-pro · Standardkonfiguration | AfregningsbetingelserStandardkonfiguration | Beløb Input · Input **0,00 US$** pr. kald Output · Output **0,16 US$** pr. kald |

### Eksempelanmodninger

#### Ailoot · Billeder

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-pro", "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-pro', '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-pro", "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");
```

### Hent og gem resultater

#### Ailoot · Billeder

Hent hvert returneret billede, eller gem dets Base64-indhold

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

##### Behold alle færdige resultater

Gem hvert færdigt billede; hent hver returneret URL eller afkod dets Base64-indhold.

Gem hvert dataelement. Afkod hver b64\_json, eller hent hver returneret signeret URL. Vælg filtypenavnet ud fra den faktiske MIME-type eller de faktiske bytes.

##### Hvis det oprindelige svar skal kontrolleres

Hvis resultatet af en billedgenerering eller -redigering skal kontrolleres, skal du gemme det oprindelige operation\_id/X-Client-Request-ID og de returnerede resultatoplysninger. Hent eksisterende resultater, som du ejer, via mediebiblioteket med de faktiske task\_id- eller asset\_id-værdier. Send ikke anmodningen om generering/redigering igen, og opbyg ikke en polling-URL ud fra operation\_id.

Svarfelter

| Felt | Type |
| --- | --- |
| Felt`created` | Typeinteger |
| Felt`data[].url` | Typestring |
| Felt`data[].b64_json` | Typebase64 string |
| Felt`usage` | Typeobject |

Fejl og næste trin

| Svar | Betingelse | Næste trin |
| --- | --- | --- |
| Svar400 · `invalid_request_error` | BetingelseUgyldige obligatoriske felter, materialerepræsentation eller parameterværdi | Næste trinRet de angivne felter før en ny oprettelsesanmodning. |
| Svar`server_error` | BetingelseDet returnerede svar angiver, at operationen eller resultatet skal kontrolleres | Næste trinGem det oprindeligt returnerede operations-/opgave-ID, anmodningens headere og svaret; fortsæt med de understøttede læseanmodninger for den oprindelige operation. Send ikke oprettelsesanmodningen igen. |

### Aliaser

#### Modelaliaser

**Ailoot** [`wan2.7-image-pro`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images), [`wan-image`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images), [`wan-image-latest`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

#### Aliaser for metodestier

Brug metodestierne vist ovenfor.

#### Relaterede kalder-ID’er

[`wan2.7-image-pro`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images), [`wan-image`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images), [`wan-image-latest`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

**Ailoot · Billeder** `POST /v1/images/generations` `wan-image`

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

Alibaba /`wan-image`

Model-ID

- `wan2.7-image-pro`
- `wan-image`
- `wan-image-latest`

### Start

Model til at skabe billeder ud fra en tekstinstruktion. Producenten beskriver styring af farvepaletten og opløsning op til 4K ved almindelig tekstbaseret generering.

Accepterede input

Tekst

Resultater

Billeder

### Tilgængelig i Ailoot · input og metoder

**Ailoot · Billeder** `POST /v1/images/generations`

Inputtyper

`text`

Outputtyper

`image`

Outputformat

Billedfil

| Felt | Type | Krav | Værdier og grænser | Standard |
| --- | --- | --- | --- | --- |
| Felt`model` | Type`string` | KravPåkrævet | Værdier og grænser wan-image | Standard— |
| Felt`prompt` | Type`string` | KravPåkrævet | Værdier og grænser Minimumslængde: 1 | Standard— |
| Felt`n` | Type`integer` | KravValgfrit | Værdier og grænser Minimum: 1 | Standard1 |
| Felt`response_format` | Type`string` | KravValgfrit | Værdier og grænser url, b64\_json | Standard— |
| Felt`stream` | Type`boolean` | KravValgfrit | Værdier og grænser | Standardfalse |
| Felt`size` | Type`string` | KravValgfrit | Værdier og grænser Afhænger af modellen | Standard— |
| Felt`partial_images` | Type`integer` | KravValgfrit | Værdier og grænser Afhænger af modellen | Standard— |
| Felt`images[].image_url` | Type`string` | KravIkke understøttet | Værdier og grænser Maksimalt antal afkodede bytes: 20.971.520 MIME-typer: image/png, image/jpeg Maksimalt antal billeder pr. array: 9 Betingelser: Én faktisk URL pr. images\[\]-objekt. Antallet i arrayet er noget andet end denne strengværdi på bladniveau. Gælder når: Kun JSON images/edits; JSON images/generations fortolker ikke images-referencer. | Standard— |
| Felt`image` | Type`file` | KravValgfrit | Værdier og grænser Maksimalt antal afkodede bytes: 20.971.520 MIME-typer: image/png, image/jpeg Gælder når: generering med multipart/form-data | Standard— |
| Felt`image[]` | Type`file[]` | KravValgfrit | Værdier og grænser Maksimalt antal elementer: 9 Maksimalt antal afkodede bytes: 20.971.520 MIME-typer: image/png, image/jpeg Gælder når: generering med multipart/form-data | Standard— |

Kombinationer af inputmaterialer

**Tekst til billede** · Påkrævet: prompt

**reference\_images\_generation** · Påkrævet: prompt

Metodeparametre og livscyklus

| Parameter | Kontrakt |
| --- | --- |
| Parameter`material_types` | Kontrakttext |
| Parameter`required` | Kontraktmodel, prompt |
| Parameter`optional_controls` | Kontraktnull |
| Parameter`content_type` | Kontraktapplication/json |

Livscyklus: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · det faktisk returnerede task\_id eller posten i mediebiblioteket

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse.

### Priser

#### Ailoot-metodetakster

Output

0,075 US$ *pr. 1K-billede*

Output

0,075 US$ *pr. 2K-billede*

Ailoot reserverer et estimeret beløb før en anmodning. Efter resultatet afregnes det endelige beløb ud fra det målte forbrug. Ved streaming bruges den endelige forbrugsregistrering til afregningen. [Sådan fungerer reservation og afregning →](https://ailoot.ai/docs/da/billing/reserve/)

#### Detaljer om referencetariffen

Referenceplaner på modelniveau ændrer ikke metodevalg, prisoverslag eller opkrævninger. Ved den aktive afregning anvendes taksterne for den valgte Ailoot-metode.

wan2.7-image-pro

#### Priser efter konfiguration

| Konfiguration | Afregningsbetingelser | Beløb |
| --- | --- | --- |
| Konfigurationwan2.7-image-pro · Standardkonfiguration | AfregningsbetingelserStandardkonfiguration | Beløb Input · Input **0,00 US$** pr. kald Output · Output **0,16 US$** pr. kald |

### Eksempelanmodninger

#### Ailoot · Billeder

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": "wan-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': 'wan-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": "wan-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");
```

### Hent og gem resultater

#### Ailoot · Billeder

Hent hvert returneret billede, eller gem dets Base64-indhold

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

##### Behold alle færdige resultater

Gem hvert færdigt billede; hent hver returneret URL eller afkod dets Base64-indhold.

Gem hvert dataelement. Afkod hver b64\_json, eller hent hver returneret signeret URL. Vælg filtypenavnet ud fra den faktiske MIME-type eller de faktiske bytes.

##### Hvis det oprindelige svar skal kontrolleres

Hvis resultatet af en billedgenerering eller -redigering skal kontrolleres, skal du gemme det oprindelige operation\_id/X-Client-Request-ID og de returnerede resultatoplysninger. Hent eksisterende resultater, som du ejer, via mediebiblioteket med de faktiske task\_id- eller asset\_id-værdier. Send ikke anmodningen om generering/redigering igen, og opbyg ikke en polling-URL ud fra operation\_id.

Svarfelter

| Felt | Type |
| --- | --- |
| Felt`created` | Typeinteger |
| Felt`data[].url` | Typestring |
| Felt`data[].b64_json` | Typebase64 string |
| Felt`usage` | Typeobject |

Fejl og næste trin

| Svar | Betingelse | Næste trin |
| --- | --- | --- |
| Svar400 · `invalid_request_error` | BetingelseUgyldige obligatoriske felter, materialerepræsentation eller parameterværdi | Næste trinRet de angivne felter før en ny oprettelsesanmodning. |
| Svar`server_error` | BetingelseDet returnerede svar angiver, at operationen eller resultatet skal kontrolleres | Næste trinGem det oprindeligt returnerede operations-/opgave-ID, anmodningens headere og svaret; fortsæt med de understøttede læseanmodninger for den oprindelige operation. Send ikke oprettelsesanmodningen igen. |

### Aliaser

#### Modelaliaser

**Ailoot** [`wan2.7-image-pro`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images), [`wan-image`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images), [`wan-image-latest`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

#### Aliaser for metodestier

Brug metodestierne vist ovenfor.

#### Relaterede kalder-ID’er

[`wan2.7-image-pro`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images), [`wan-image`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images), [`wan-image-latest`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

**Ailoot · Billeder** `POST /v1/images/generations` `wan-image-latest`

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

Alibaba /`wan-image-latest`

Model-ID

- `wan2.7-image-pro`
- `wan-image`
- `wan-image-latest`

### Start

Model til at skabe billeder ud fra en tekstinstruktion. Producenten beskriver styring af farvepaletten og opløsning op til 4K ved almindelig tekstbaseret generering.

Accepterede input

Tekst

Resultater

Billeder

### Tilgængelig i Ailoot · input og metoder

**Ailoot · Billeder** `POST /v1/images/generations`

Inputtyper

`text`

Outputtyper

`image`

Outputformat

Billedfil

| Felt | Type | Krav | Værdier og grænser | Standard |
| --- | --- | --- | --- | --- |
| Felt`model` | Type`string` | KravPåkrævet | Værdier og grænser wan-image-latest | Standard— |
| Felt`prompt` | Type`string` | KravPåkrævet | Værdier og grænser Minimumslængde: 1 | Standard— |
| Felt`n` | Type`integer` | KravValgfrit | Værdier og grænser Minimum: 1 | Standard1 |
| Felt`response_format` | Type`string` | KravValgfrit | Værdier og grænser url, b64\_json | Standard— |
| Felt`stream` | Type`boolean` | KravValgfrit | Værdier og grænser | Standardfalse |
| Felt`size` | Type`string` | KravValgfrit | Værdier og grænser Afhænger af modellen | Standard— |
| Felt`partial_images` | Type`integer` | KravValgfrit | Værdier og grænser Afhænger af modellen | Standard— |
| Felt`images[].image_url` | Type`string` | KravIkke understøttet | Værdier og grænser Maksimalt antal afkodede bytes: 20.971.520 MIME-typer: image/png, image/jpeg Maksimalt antal billeder pr. array: 9 Betingelser: Én faktisk URL pr. images\[\]-objekt. Antallet i arrayet er noget andet end denne strengværdi på bladniveau. Gælder når: Kun JSON images/edits; JSON images/generations fortolker ikke images-referencer. | Standard— |
| Felt`image` | Type`file` | KravValgfrit | Værdier og grænser Maksimalt antal afkodede bytes: 20.971.520 MIME-typer: image/png, image/jpeg Gælder når: generering med multipart/form-data | Standard— |
| Felt`image[]` | Type`file[]` | KravValgfrit | Værdier og grænser Maksimalt antal elementer: 9 Maksimalt antal afkodede bytes: 20.971.520 MIME-typer: image/png, image/jpeg Gælder når: generering med multipart/form-data | Standard— |

Kombinationer af inputmaterialer

**Tekst til billede** · Påkrævet: prompt

**reference\_images\_generation** · Påkrævet: prompt

Metodeparametre og livscyklus

| Parameter | Kontrakt |
| --- | --- |
| Parameter`material_types` | Kontrakttext |
| Parameter`required` | Kontraktmodel, prompt |
| Parameter`optional_controls` | Kontraktnull |
| Parameter`content_type` | Kontraktapplication/json |

Livscyklus: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · det faktisk returnerede task\_id eller posten i mediebiblioteket

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse.

### Priser

#### Ailoot-metodetakster

Output

0,075 US$ *pr. 1K-billede*

Output

0,075 US$ *pr. 2K-billede*

Ailoot reserverer et estimeret beløb før en anmodning. Efter resultatet afregnes det endelige beløb ud fra det målte forbrug. Ved streaming bruges den endelige forbrugsregistrering til afregningen. [Sådan fungerer reservation og afregning →](https://ailoot.ai/docs/da/billing/reserve/)

#### Detaljer om referencetariffen

Referenceplaner på modelniveau ændrer ikke metodevalg, prisoverslag eller opkrævninger. Ved den aktive afregning anvendes taksterne for den valgte Ailoot-metode.

wan2.7-image-pro

#### Priser efter konfiguration

| Konfiguration | Afregningsbetingelser | Beløb |
| --- | --- | --- |
| Konfigurationwan2.7-image-pro · Standardkonfiguration | AfregningsbetingelserStandardkonfiguration | Beløb Input · Input **0,00 US$** pr. kald Output · Output **0,16 US$** pr. kald |

### Eksempelanmodninger

#### Ailoot · Billeder

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": "wan-image-latest", "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': 'wan-image-latest', '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": "wan-image-latest", "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");
```

### Hent og gem resultater

#### Ailoot · Billeder

Hent hvert returneret billede, eller gem dets Base64-indhold

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

##### Behold alle færdige resultater

Gem hvert færdigt billede; hent hver returneret URL eller afkod dets Base64-indhold.

Gem hvert dataelement. Afkod hver b64\_json, eller hent hver returneret signeret URL. Vælg filtypenavnet ud fra den faktiske MIME-type eller de faktiske bytes.

##### Hvis det oprindelige svar skal kontrolleres

Hvis resultatet af en billedgenerering eller -redigering skal kontrolleres, skal du gemme det oprindelige operation\_id/X-Client-Request-ID og de returnerede resultatoplysninger. Hent eksisterende resultater, som du ejer, via mediebiblioteket med de faktiske task\_id- eller asset\_id-værdier. Send ikke anmodningen om generering/redigering igen, og opbyg ikke en polling-URL ud fra operation\_id.

Svarfelter

| Felt | Type |
| --- | --- |
| Felt`created` | Typeinteger |
| Felt`data[].url` | Typestring |
| Felt`data[].b64_json` | Typebase64 string |
| Felt`usage` | Typeobject |

Fejl og næste trin

| Svar | Betingelse | Næste trin |
| --- | --- | --- |
| Svar400 · `invalid_request_error` | BetingelseUgyldige obligatoriske felter, materialerepræsentation eller parameterværdi | Næste trinRet de angivne felter før en ny oprettelsesanmodning. |
| Svar`server_error` | BetingelseDet returnerede svar angiver, at operationen eller resultatet skal kontrolleres | Næste trinGem det oprindeligt returnerede operations-/opgave-ID, anmodningens headere og svaret; fortsæt med de understøttede læseanmodninger for den oprindelige operation. Send ikke oprettelsesanmodningen igen. |

### Aliaser

#### Modelaliaser

**Ailoot** [`wan2.7-image-pro`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images), [`wan-image`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images), [`wan-image-latest`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

#### Aliaser for metodestier

Brug metodestierne vist ovenfor.

#### Relaterede kalder-ID’er

[`wan2.7-image-pro`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan2.7-image-pro&fmt=images), [`wan-image`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan-image&fmt=images), [`wan-image-latest`](https://ailoot.ai/models/da/#m=wan2.7-image-pro&route=Core&caller=wan-image-latest&fmt=images)

FAQ · wan2.7-image-pro

Hvilke input og resultater er tilgængelige?

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

Hvilke felter bruger anmodningen?

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

Hvilke grænser gælder?

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

Tilslut Ailoot til Claude Code, OpenCode, Hermes eller din egen applikation.

## Virksomheden og dens projektportefølje

Virksomheden og dens projektportefølje: millioner af kunder; månedligt salg for milliarder.

## Køb tokens med rabat.

Abonnementsrabat til regelmæssigt arbejde. Rabatkoder giver op til 50% på tokenkøb.

Abonnement

Vælg et abonnement med rabat til dine regelmæssige anmodninger.

Rabatkode på op til 50%

Indtast koden ved købet. Prisen genberegnes efter den aktuelle kampagne.

Udgifter i historikken

Model, tokens og beløb gemmes for hver anmodning.

[Vælg abonnement](https://ailoot.ai/docs/da/billing/subscriptions/) · [Se modelpriser](https://ailoot.ai/models/da/)

## Tilslut API’et til produktet, du sælger.

SaaS, apps og bots efter Ailoots tilbudsvilkår og licensaftale. Anmod om en forhandlerlicens til videresalg.

Kommerciel applikation

Byg generering af tekst, billeder, video og lyd ind i tjenestens betalte funktioner.

Licens til forhandlere

Send projektbeskrivelse og adgangsmodel. Bed om skriftlige vilkår for anvendelse og videresalg.

Dokumenter på websitet

Tilbudsvilkår, licensaftale og politik for behandling af data kan læses før tilslutning.

[Anmod om forhandlerlicens](mailto:support@ailoot.ai) · [Tilbudsvilkår og licensaftale](https://ailoot.ai/legal/offer?lang=da)

## Ailoot · Virksomheden og dens projektportefølje





Ailoot bygger på solid driftserfaring, en stor kundebase, stabil service og løbende kontrol af KPI.





Virksomheden og dens projektportefølje: millioner af kunder; månedligt salg for milliarder.





Ailoot bruger denne driftserfaring til API-adgang til AI-funktioner i kundernes produkter, agenter, applikationer og automatiseringer.
