Source: https://ailoot.ai/models/pt-pt/happyhorse-1-1-t2v/
Canonical: https://ailoot.ai/models/pt-pt/happyhorse-1-1-t2v/
Language: pt-pt

# happyhorse-1.1-t2v

[Markdown](https://ailoot.ai/models/pt-pt/happyhorse-1-1-t2v/index.md) · [JSON](https://ailoot.ai/models/pt-pt/happyhorse-1-1-t2v/facts.json)

## [happyhorse-1.1-t2v](https://ailoot.ai/models/pt-pt/happyhorse-1-1-t2v/)

Modelo de criação de vídeos curtos com som a partir de uma descrição textual. Adequado a cenas em que o movimento, a composição e o estilo visual são definidos por palavras.

- [**Ailoot · Vídeo** `POST /v1/videos/generations` `happyhorse-1.1-t2v`](https://ailoot.ai/models/pt-pt/happyhorse-1-1-t2v/#method-0)
- [**Ailoot · Vídeo** `POST /v1/videos/generations` `happyhorse-t2v`](https://ailoot.ai/models/pt-pt/happyhorse-1-1-t2v/#method-1)
- [**Ailoot · Vídeo** `POST /v1/videos/generations` `happyhorse-t2v-latest`](https://ailoot.ai/models/pt-pt/happyhorse-1-1-t2v/#method-2)

Sobre o modelo

Esta descrição apresenta as capacidades do modelo. As entradas, saídas e opções disponíveis no Ailoot para o método selecionado estão indicadas abaixo.

HappyHorse-1.1-T2V é um modelo da Alibaba para criar cenas de vídeo curtas a partir de texto. A descrição define personagens, ações, ambiente e apresentação visual; este modo não exige uma imagem de origem. O modelo forma a sequência de vídeo e pode criar o som que a acompanha.

O fabricante destaca a compreensão do significado da cena, a encenação cinematográfica e a expressividade do movimento. O texto pode definir a atmosfera, as ações da personagem, o comportamento dos objetos e a dinâmica física. Isto permite construir uma cena em torno do que deve acontecer e orientá-la depois através da luz, do ângulo e do movimento da câmara.

#### Encenação por palavras

A instrução é obrigatória e aceita qualquer língua. Pode conter até 5000 caracteres não chineses ou 2500 caracteres chineses; a parte excedente é descartada. A ação, o ambiente e os detalhes visuais importantes devem ser descritos dentro desse volume. Esta abordagem dá ao modelo espaço para criar uma nova cena, em vez de lhe fornecer um primeiro fotograma pronto.

Neste modo, o texto é o principal material de orientação. A imagem concreta de uma personagem ou de um objeto pode ser descrita por palavras; a possibilidade de transmitir a sua aparência através de imagens separadas pertence a outro modo da família. O resultado depende de toda a instrução, pelo que a mesma semente aleatória inicial ajuda a obter variantes semelhantes, mas não garante uma repetição exata.

#### Vídeo e acompanhamento sonoro

No HappyHorse-1.1, a duração do vídeo é escolhida como um número inteiro entre 3 e 15 segundos. São suportadas as resoluções 480P, 720P e 1080P. O ficheiro final tem formato MP4 e uma frequência de 24 fotogramas por segundo. O modelo pode gerar som juntamente com a imagem, relacionando o acompanhamento sonoro com o que acontece na cena.

A forma do enquadramento pode ser definida antecipadamente. Estão disponíveis 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21 e 21:9, desde um enquadramento cinematográfico largo até um vídeo vertical alongado. A resolução, o formato e a duração determinam as dimensões do resultado; o conteúdo e o movimento são definidos pelo texto.

Esta variante destina-se a criar uma nova cena a partir de uma ideia verbal. É adequada para um episódio curto, uma ideia visual ou um vídeo de ambiente cuja encenação tenha de ser formulada em texto.

**Ailoot · Vídeo** `POST /v1/videos/generations` `happyhorse-1.1-t2v`

[`happyhorse-1.1-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-1.1-t2v&fmt=videos)

Alibaba /`happyhorse-1.1-t2v`

ID do modelo

- `happyhorse-1.1-t2v`
- `happyhorse-t2v`
- `happyhorse-t2v-latest`

### Introdução

Modelo de criação de vídeos curtos com som a partir de uma descrição textual. Adequado a cenas em que o movimento, a composição e o estilo visual são definidos por palavras.

Entradas aceites

Texto

Resultados

Vídeo

### Disponível no Ailoot · entradas e métodos

**Ailoot · Vídeo** `POST /v1/videos/generations`

Entrada

`text`

Saída

`video`

Formato de saída

mp4

| Campo | Tipo | Requisito | Valores e limites | Predefinição |
| --- | --- | --- | --- | --- |
| Campo`model` | Tipo`string` | RequisitoObrigatório | Valores e limites happyhorse-1.1-t2v | Predefinição— |
| Campo`prompt` | Tipo`string` | RequisitoObrigatório | Valores e limites Comprimento mínimo: 1 | Predefinição— |
| Campo`duration` | Tipo`integer` | RequisitoOpcional | Valores e limites Mínimo: 3 Máximo: 15 Unidade: segundos | Predefinição5 |
| Campo`resolution` | Tipo`string` | RequisitoOpcional | Valores e limites 480P, 720P, 1080P | Predefinição720P |
| Campo`ratio` | Tipo`string` | RequisitoOpcional | Valores e limites 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Predefinição16:9 |
| Campo`image_urls` | Tipo`https_url\|data_image_url[]` | RequisitoOpcional | Valores e limites Número mínimo de elementos: 0 Número máximo de elementos: 0 Número máximo de bytes descodificados: 20 971 520 Tipos MIME: image/jpeg, image/png, image/webp | Predefinição— |

Combinações de materiais de entrada

**Texto para vídeo** · Obrigatório: prompt

Parâmetros e ciclo de vida do método

| Parâmetro | Contrato |
| --- | --- |
| Parâmetro`content_type` | Contratoapplication/json |
| Parâmetro`required` | Contratomodel, prompt |
| Parâmetro`material_types` | Contratotext |
| Parâmetro`optional` | Contratoduration, resolution, ratio |
| Parâmetro`duration_integer_range` | Contrato3, 15 |
| Parâmetro`default_duration` | Contrato5 |
| Parâmetro`resolution` | Contrato480P, 720P, 1080P |
| Parâmetro`default_resolution` | Contrato720P |
| Parâmetro`ratio` | Contrato16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 |
| Parâmetro`ratio_must_omit` | Contratofalse |
| Parâmetro`image_urls` | Contrato{"max\_count":0} |

Ciclo de vida: `submit_once_poll_original`

`GET /v1/videos/{request_id}`

`GET /v1/videos/generations/{request_id}`

`GET /v1/videos/{request_id}/content`

`GET /v1/videos/generations/{request_id}/content`

As estruturas dos métodos e os ID são exatos; a capacidade do fornecedor é distinta da admissão dos pedidos.

### Tarifários

#### Tarifas dos métodos Ailoot

Saída

0,18 US$ *por segundo a 1080p*

Saída

0,07 US$ *por segundo a 480p*

Saída

0,14 US$ *por segundo a 720p*

O Ailoot reserva um montante estimado antes de um pedido. Após o resultado, liquida o custo final com base na utilização medida. No streaming, a liquidação usa o registo final de utilização. [Como funcionam a reserva e a liquidação →](https://ailoot.ai/docs/pt-pt/billing/reserve/)

### Exemplos de pedidos

#### Ailoot · Vídeo

Exemplo de cena

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 scene brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-1.1-t2v", "prompt": "", "duration": 5, "resolution": "720P", "ratio": "16:9"}')
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/videos/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 json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

### Receber e guardar os resultados

#### Ailoot · Vídeo

mp4

- `GET /v1/videos/{request_id}`
- `GET /v1/videos/generations/{request_id}`
- `GET /v1/videos/{request_id}/content`
- `GET /v1/videos/generations/{request_id}/content`

##### Verificar o estado da tarefa

GET estado

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
    for x in r.get("data",[]):print(x)
PY_STATUS
```

##### Guardar todos os recursos concluídos

GET todos os recursos concluídos

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
    if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
    u=urljoin("https://api.ailoot.ai",x)
    z=urlsplit(u)
    if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
    urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
  curl --fail-with-body --silent --show-error "$asset_url" \
    -H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
  index=$((index + 1))
done < asset-urls.txt
```

Outras leituras de conteúdo

GET conteúdo

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id/content" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
```

##### Guardar todos os resultados concluídos

Guarde cada vídeo concluído ou ficheiro devolvido; obtenha cada URL de recurso efetivamente devolvido.

Conserve todos os elementos de dados/índices de saída devolvidos. content\_url corresponde apenas ao primeiro; obtenha todos os caminhos de conteúdo/recursos reais. GET do conteúdo sem index não corresponde a todas as saídas.

##### Se for necessário verificar a resposta original

Consulte a tarefa original existente; nunca volte a enviar um pedido cujo envio tenha resultado desconhecido.

Campos da resposta

| Campo | Tipo |
| --- | --- |
| Campo`id` | Tipostring |
| Campo`object` | Tipostring |
| Campo`model` | Tipostring |
| Campo`status` | Tipostring |
| Campo`content_url` | Tiposigned URL |
| Campo`data[]` | Tiposigned URL |
| Campo`usage` | Tipoobject |
| Campo`result_pending_check` | Tipoboolean |

Erros e passos seguintes

| Resposta | Condição | Passo seguinte |
| --- | --- | --- |
| Resposta400 · `invalid_request_error` | CondiçãoCampos obrigatórios, representação do material ou valor do parâmetro inválidos | Passo seguinteCorrija os campos indicados antes de um novo pedido de criação. |
| Resposta409 · `video_not_ready` | CondiçãoO conteúdo do resultado original ainda não está disponível | Passo seguinteConsulte periodicamente o ID original devolvido e respeite Retry-After. |
| Resposta`server_error` | CondiçãoA resposta devolvida indica que a operação ou o resultado requer verificação | Passo seguinteGuarde o ID original da operação/tarefa devolvido, os cabeçalhos do pedido e a resposta; continue a consultar essa operação original através das consultas suportadas. Não volte a enviar o pedido de criação. |

### Aliases

#### Aliases do modelo

**Ailoot** [`happyhorse-1.1-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-1.1-t2v&fmt=videos), [`happyhorse-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v&fmt=videos), [`happyhorse-t2v-latest`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v-latest&fmt=videos)

#### Aliases dos caminhos dos métodos

Use os caminhos dos métodos indicados acima.

#### IDs de chamada relacionados

[`happyhorse-1.1-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-1.1-t2v&fmt=videos), [`happyhorse-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v&fmt=videos), [`happyhorse-t2v-latest`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v-latest&fmt=videos)

**Ailoot · Vídeo** `POST /v1/videos/generations` `happyhorse-t2v`

[`happyhorse-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v&fmt=videos)

Alibaba /`happyhorse-t2v`

ID do modelo

- `happyhorse-1.1-t2v`
- `happyhorse-t2v`
- `happyhorse-t2v-latest`

### Introdução

Modelo de criação de vídeos curtos com som a partir de uma descrição textual. Adequado a cenas em que o movimento, a composição e o estilo visual são definidos por palavras.

Entradas aceites

Texto

Resultados

Vídeo

### Disponível no Ailoot · entradas e métodos

**Ailoot · Vídeo** `POST /v1/videos/generations`

Entrada

`text`

Saída

`video`

Formato de saída

mp4

| Campo | Tipo | Requisito | Valores e limites | Predefinição |
| --- | --- | --- | --- | --- |
| Campo`model` | Tipo`string` | RequisitoObrigatório | Valores e limites happyhorse-t2v | Predefinição— |
| Campo`prompt` | Tipo`string` | RequisitoObrigatório | Valores e limites Comprimento mínimo: 1 | Predefinição— |
| Campo`duration` | Tipo`integer` | RequisitoOpcional | Valores e limites Mínimo: 3 Máximo: 15 Unidade: segundos | Predefinição5 |
| Campo`resolution` | Tipo`string` | RequisitoOpcional | Valores e limites 480P, 720P, 1080P | Predefinição720P |
| Campo`ratio` | Tipo`string` | RequisitoOpcional | Valores e limites 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Predefinição16:9 |
| Campo`image_urls` | Tipo`https_url\|data_image_url[]` | RequisitoOpcional | Valores e limites Número mínimo de elementos: 0 Número máximo de elementos: 0 Número máximo de bytes descodificados: 20 971 520 Tipos MIME: image/jpeg, image/png, image/webp | Predefinição— |

Combinações de materiais de entrada

**Texto para vídeo** · Obrigatório: prompt

Parâmetros e ciclo de vida do método

| Parâmetro | Contrato |
| --- | --- |
| Parâmetro`material_types` | Contratotext |
| Parâmetro`required` | Contratonull |
| Parâmetro`optional_controls` | Contratonull |

Ciclo de vida: `submit_once_poll_original`

`GET /v1/videos/{request_id}`

`GET /v1/videos/generations/{request_id}`

`GET /v1/videos/{request_id}/content`

`GET /v1/videos/generations/{request_id}/content`

As estruturas dos métodos e os ID são exatos; a capacidade do fornecedor é distinta da admissão dos pedidos.

### Tarifários

#### Tarifas dos métodos Ailoot

Saída

0,18 US$ *por segundo a 1080p*

Saída

0,07 US$ *por segundo a 480p*

Saída

0,14 US$ *por segundo a 720p*

O Ailoot reserva um montante estimado antes de um pedido. Após o resultado, liquida o custo final com base na utilização medida. No streaming, a liquidação usa o registo final de utilização. [Como funcionam a reserva e a liquidação →](https://ailoot.ai/docs/pt-pt/billing/reserve/)

### Exemplos de pedidos

#### Ailoot · Vídeo

Exemplo de cena

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 scene brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-t2v", "prompt": "", "duration": 5, "resolution": "720P", "ratio": "16:9"}')
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/videos/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 json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

### Receber e guardar os resultados

#### Ailoot · Vídeo

mp4

- `GET /v1/videos/{request_id}`
- `GET /v1/videos/generations/{request_id}`
- `GET /v1/videos/{request_id}/content`
- `GET /v1/videos/generations/{request_id}/content`

##### Verificar o estado da tarefa

GET estado

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
    for x in r.get("data",[]):print(x)
PY_STATUS
```

##### Guardar todos os recursos concluídos

GET todos os recursos concluídos

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
    if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
    u=urljoin("https://api.ailoot.ai",x)
    z=urlsplit(u)
    if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
    urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
  curl --fail-with-body --silent --show-error "$asset_url" \
    -H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
  index=$((index + 1))
done < asset-urls.txt
```

Outras leituras de conteúdo

GET conteúdo

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id/content" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
```

##### Guardar todos os resultados concluídos

Guarde cada vídeo concluído ou ficheiro devolvido; obtenha cada URL de recurso efetivamente devolvido.

Conserve todos os elementos de dados/índices de saída devolvidos. content\_url corresponde apenas ao primeiro; obtenha todos os caminhos de conteúdo/recursos reais. GET do conteúdo sem index não corresponde a todas as saídas.

##### Se for necessário verificar a resposta original

Consulte a tarefa original existente; nunca volte a enviar um pedido cujo envio tenha resultado desconhecido.

Campos da resposta

| Campo | Tipo |
| --- | --- |
| Campo`id` | Tipostring |
| Campo`object` | Tipostring |
| Campo`model` | Tipostring |
| Campo`status` | Tipostring |
| Campo`content_url` | Tiposigned URL |
| Campo`data[]` | Tiposigned URL |
| Campo`usage` | Tipoobject |
| Campo`result_pending_check` | Tipoboolean |

Erros e passos seguintes

| Resposta | Condição | Passo seguinte |
| --- | --- | --- |
| Resposta400 · `invalid_request_error` | CondiçãoCampos obrigatórios, representação do material ou valor do parâmetro inválidos | Passo seguinteCorrija os campos indicados antes de um novo pedido de criação. |
| Resposta409 · `video_not_ready` | CondiçãoO conteúdo do resultado original ainda não está disponível | Passo seguinteConsulte periodicamente o ID original devolvido e respeite Retry-After. |
| Resposta`server_error` | CondiçãoA resposta devolvida indica que a operação ou o resultado requer verificação | Passo seguinteGuarde o ID original da operação/tarefa devolvido, os cabeçalhos do pedido e a resposta; continue a consultar essa operação original através das consultas suportadas. Não volte a enviar o pedido de criação. |

### Aliases

#### Aliases do modelo

**Ailoot** [`happyhorse-1.1-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-1.1-t2v&fmt=videos), [`happyhorse-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v&fmt=videos), [`happyhorse-t2v-latest`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v-latest&fmt=videos)

#### Aliases dos caminhos dos métodos

Use os caminhos dos métodos indicados acima.

#### IDs de chamada relacionados

[`happyhorse-1.1-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-1.1-t2v&fmt=videos), [`happyhorse-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v&fmt=videos), [`happyhorse-t2v-latest`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v-latest&fmt=videos)

**Ailoot · Vídeo** `POST /v1/videos/generations` `happyhorse-t2v-latest`

[`happyhorse-t2v-latest`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v-latest&fmt=videos)

Alibaba /`happyhorse-t2v-latest`

ID do modelo

- `happyhorse-1.1-t2v`
- `happyhorse-t2v`
- `happyhorse-t2v-latest`

### Introdução

Modelo de criação de vídeos curtos com som a partir de uma descrição textual. Adequado a cenas em que o movimento, a composição e o estilo visual são definidos por palavras.

Entradas aceites

Texto

Resultados

Vídeo

### Disponível no Ailoot · entradas e métodos

**Ailoot · Vídeo** `POST /v1/videos/generations`

Entrada

`text`

Saída

`video`

Formato de saída

mp4

| Campo | Tipo | Requisito | Valores e limites | Predefinição |
| --- | --- | --- | --- | --- |
| Campo`model` | Tipo`string` | RequisitoObrigatório | Valores e limites happyhorse-t2v-latest | Predefinição— |
| Campo`prompt` | Tipo`string` | RequisitoObrigatório | Valores e limites Comprimento mínimo: 1 | Predefinição— |
| Campo`duration` | Tipo`integer` | RequisitoOpcional | Valores e limites Mínimo: 3 Máximo: 15 Unidade: segundos | Predefinição5 |
| Campo`resolution` | Tipo`string` | RequisitoOpcional | Valores e limites 480P, 720P, 1080P | Predefinição720P |
| Campo`ratio` | Tipo`string` | RequisitoOpcional | Valores e limites 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Predefinição16:9 |
| Campo`image_urls` | Tipo`https_url\|data_image_url[]` | RequisitoOpcional | Valores e limites Número mínimo de elementos: 0 Número máximo de elementos: 0 Número máximo de bytes descodificados: 20 971 520 Tipos MIME: image/jpeg, image/png, image/webp | Predefinição— |

Combinações de materiais de entrada

**Texto para vídeo** · Obrigatório: prompt

Parâmetros e ciclo de vida do método

| Parâmetro | Contrato |
| --- | --- |
| Parâmetro`material_types` | Contratotext |
| Parâmetro`required` | Contratonull |
| Parâmetro`optional_controls` | Contratonull |

Ciclo de vida: `submit_once_poll_original`

`GET /v1/videos/{request_id}`

`GET /v1/videos/generations/{request_id}`

`GET /v1/videos/{request_id}/content`

`GET /v1/videos/generations/{request_id}/content`

As estruturas dos métodos e os ID são exatos; a capacidade do fornecedor é distinta da admissão dos pedidos.

### Tarifários

#### Tarifas dos métodos Ailoot

Saída

0,18 US$ *por segundo a 1080p*

Saída

0,07 US$ *por segundo a 480p*

Saída

0,14 US$ *por segundo a 720p*

O Ailoot reserva um montante estimado antes de um pedido. Após o resultado, liquida o custo final com base na utilização medida. No streaming, a liquidação usa o registo final de utilização. [Como funcionam a reserva e a liquidação →](https://ailoot.ai/docs/pt-pt/billing/reserve/)

### Exemplos de pedidos

#### Ailoot · Vídeo

Exemplo de cena

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 scene brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-t2v-latest", "prompt": "", "duration": 5, "resolution": "720P", "ratio": "16:9"}')
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/videos/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 json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

### Receber e guardar os resultados

#### Ailoot · Vídeo

mp4

- `GET /v1/videos/{request_id}`
- `GET /v1/videos/generations/{request_id}`
- `GET /v1/videos/{request_id}/content`
- `GET /v1/videos/generations/{request_id}/content`

##### Verificar o estado da tarefa

GET estado

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
    for x in r.get("data",[]):print(x)
PY_STATUS
```

##### Guardar todos os recursos concluídos

GET todos os recursos concluídos

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
    if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
    u=urljoin("https://api.ailoot.ai",x)
    z=urlsplit(u)
    if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
    urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
  curl --fail-with-body --silent --show-error "$asset_url" \
    -H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
  index=$((index + 1))
done < asset-urls.txt
```

Outras leituras de conteúdo

GET conteúdo

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id/content" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
```

##### Guardar todos os resultados concluídos

Guarde cada vídeo concluído ou ficheiro devolvido; obtenha cada URL de recurso efetivamente devolvido.

Conserve todos os elementos de dados/índices de saída devolvidos. content\_url corresponde apenas ao primeiro; obtenha todos os caminhos de conteúdo/recursos reais. GET do conteúdo sem index não corresponde a todas as saídas.

##### Se for necessário verificar a resposta original

Consulte a tarefa original existente; nunca volte a enviar um pedido cujo envio tenha resultado desconhecido.

Campos da resposta

| Campo | Tipo |
| --- | --- |
| Campo`id` | Tipostring |
| Campo`object` | Tipostring |
| Campo`model` | Tipostring |
| Campo`status` | Tipostring |
| Campo`content_url` | Tiposigned URL |
| Campo`data[]` | Tiposigned URL |
| Campo`usage` | Tipoobject |
| Campo`result_pending_check` | Tipoboolean |

Erros e passos seguintes

| Resposta | Condição | Passo seguinte |
| --- | --- | --- |
| Resposta400 · `invalid_request_error` | CondiçãoCampos obrigatórios, representação do material ou valor do parâmetro inválidos | Passo seguinteCorrija os campos indicados antes de um novo pedido de criação. |
| Resposta409 · `video_not_ready` | CondiçãoO conteúdo do resultado original ainda não está disponível | Passo seguinteConsulte periodicamente o ID original devolvido e respeite Retry-After. |
| Resposta`server_error` | CondiçãoA resposta devolvida indica que a operação ou o resultado requer verificação | Passo seguinteGuarde o ID original da operação/tarefa devolvido, os cabeçalhos do pedido e a resposta; continue a consultar essa operação original através das consultas suportadas. Não volte a enviar o pedido de criação. |

### Aliases

#### Aliases do modelo

**Ailoot** [`happyhorse-1.1-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-1.1-t2v&fmt=videos), [`happyhorse-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v&fmt=videos), [`happyhorse-t2v-latest`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v-latest&fmt=videos)

#### Aliases dos caminhos dos métodos

Use os caminhos dos métodos indicados acima.

#### IDs de chamada relacionados

[`happyhorse-1.1-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-1.1-t2v&fmt=videos), [`happyhorse-t2v`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v&fmt=videos), [`happyhorse-t2v-latest`](https://ailoot.ai/models/pt-pt/#m=happyhorse-1.1-t2v&route=Core&caller=happyhorse-t2v-latest&fmt=videos)

FAQ · happyhorse-1.1-t2v

Que entradas e resultados estão disponíveis?

`POST /v1/videos/generations` · `happyhorse-1.1-t2v`: `text` → `video` `POST /v1/videos/generations` · `happyhorse-t2v`: `text` → `video` `POST /v1/videos/generations` · `happyhorse-t2v-latest`: `text` → `video`

Que campos utiliza o pedido?

`POST /v1/videos/generations` · `happyhorse-1.1-t2v`: `model`, `prompt`, `duration`, `resolution`, `ratio`, `image_urls` `POST /v1/videos/generations` · `happyhorse-t2v`: `model`, `prompt`, `duration`, `resolution`, `ratio`, `image_urls` `POST /v1/videos/generations` · `happyhorse-t2v-latest`: `model`, `prompt`, `duration`, `resolution`, `ratio`, `image_urls`

Que limites se aplicam?

`POST /v1/videos/generations` · `happyhorse-1.1-t2v`: `duration.minimum`: `3`; `duration.maximum`: `15` `POST /v1/videos/generations` · `happyhorse-t2v`: `duration.minimum`: `3`; `duration.maximum`: `15` `POST /v1/videos/generations` · `happyhorse-t2v-latest`: `duration.minimum`: `3`; `duration.maximum`: `15`

Ligue o Ailoot ao Claude Code, OpenCode, Hermes ou à sua aplicação.

## A empresa e a sua carteira de projetos

A empresa e a sua carteira de projetos: milhões de clientes; vendas mensais na ordem dos milhares de milhões.

## Compre tokens com desconto.

Desconto por subscrição para trabalho regular. Códigos promocionais — até 50% na compra de tokens.

Subscrição

Escolha um plano com desconto para os pedidos regulares.

Código promocional até 50%

Introduza o código na compra. O preço é recalculado conforme a campanha em vigor.

Custos no histórico

O modelo, os tokens e o montante são guardados para cada pedido.

[Escolher subscrição](https://ailoot.ai/docs/pt-pt/billing/subscriptions/) · [Ver preços dos modelos](https://ailoot.ai/models/pt-pt/)

## Ligue a API ao produto que vende.

SaaS, aplicações e bots — ao abrigo da oferta e do contrato de licença Ailoot. Para revenda, peça uma licença de revendedor.

Aplicação comercial

Integre geração de texto, imagens, vídeo e som nas funcionalidades pagas do seu serviço.

Licença de revendedor

Envie uma descrição do projeto e do modelo de acesso. Peça condições escritas de utilização e revenda.

Documentos no site

A oferta, o contrato de licença e a política de tratamento de dados estão disponíveis antes da ligação.

[Pedir licença de revendedor](mailto:support@ailoot.ai) · [Oferta e contrato de licença](https://ailoot.ai/legal/offer?lang=pt-pt)

## Ailoot · A empresa e a sua carteira de projetos





A Ailoot assenta numa experiência operacional consolidada, numa ampla base de clientes, num serviço estável e no acompanhamento contínuo dos KPI.





A empresa e a sua carteira de projetos: milhões de clientes; vendas mensais na ordem dos milhares de milhões.





A Ailoot aplica essa experiência operacional ao acesso por API a funcionalidades de IA nos produtos dos clientes, agentes, aplicações e automatizações.
