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/generationshappyhorse-1.1-t2v - Ailoot · Vídeo
POST /v1/videos/generationshappyhorse-t2v - Ailoot · Vídeo
POST /v1/videos/generationshappyhorse-t2v-latest
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-t2vhappyhorse-1.1-t2vhappyhorse-t2vhappyhorse-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 |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObrigatório | Valores e limites happyhorse-1.1-t2v | Predefinição— |
Campoprompt | Tipostring | RequisitoObrigatório | Valores e limites Comprimento mínimo: 1 | Predefinição— |
Campoduration | Tipointeger | RequisitoOpcional | Valores e limites Mínimo: 3 Máximo: 15 Unidade: segundos | Predefinição5 |
Camporesolution | Tipostring | RequisitoOpcional | Valores e limites 480P, 720P, 1080P | Predefinição720P |
Camporatio | Tipostring | 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 |
Campoimage_urls | Tipohttps_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âmetrocontent_type | Contratoapplication/json |
Parâmetrorequired | Contratomodel, prompt |
Parâmetromaterial_types | Contratotext |
Parâmetrooptional | Contratoduration, resolution, ratio |
Parâmetroduration_integer_range | Contrato3, 15 |
Parâmetrodefault_duration | Contrato5 |
Parâmetroresolution | Contrato480P, 720P, 1080P |
Parâmetrodefault_resolution | Contrato720P |
Parâmetroratio | Contrato16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 |
Parâmetroratio_must_omit | Contratofalse |
Parâmetroimage_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
POST /v1/videos/generations- 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 →
Exemplos de pedidos
Ailoot · Vídeo
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}/contentGET /v1/videos/generations/{request_id}/content
Verificar o estado da tarefa
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
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
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 |
|---|---|
Campoid | Tipostring |
Campoobject | Tipostring |
Campomodel | Tipostring |
Campostatus | Tipostring |
Campocontent_url | Tiposigned URL |
Campodata[] | Tiposigned URL |
Campousage | Tipoobject |
Camporesult_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. |
Respostaserver_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, happyhorse-t2v, happyhorse-t2v-latest
Aliases dos caminhos dos métodos
Use os caminhos dos métodos indicados acima.
IDs de chamada relacionados
Ailoot · Vídeo POST /v1/videos/generations happyhorse-t2v
happyhorse-t2vhappyhorse-1.1-t2vhappyhorse-t2vhappyhorse-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 |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObrigatório | Valores e limites happyhorse-t2v | Predefinição— |
Campoprompt | Tipostring | RequisitoObrigatório | Valores e limites Comprimento mínimo: 1 | Predefinição— |
Campoduration | Tipointeger | RequisitoOpcional | Valores e limites Mínimo: 3 Máximo: 15 Unidade: segundos | Predefinição5 |
Camporesolution | Tipostring | RequisitoOpcional | Valores e limites 480P, 720P, 1080P | Predefinição720P |
Camporatio | Tipostring | 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 |
Campoimage_urls | Tipohttps_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âmetromaterial_types | Contratotext |
Parâmetrorequired | Contratonull |
Parâmetrooptional_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
POST /v1/videos/generations- 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 →
Exemplos de pedidos
Ailoot · Vídeo
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}/contentGET /v1/videos/generations/{request_id}/content
Verificar o estado da tarefa
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
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
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 |
|---|---|
Campoid | Tipostring |
Campoobject | Tipostring |
Campomodel | Tipostring |
Campostatus | Tipostring |
Campocontent_url | Tiposigned URL |
Campodata[] | Tiposigned URL |
Campousage | Tipoobject |
Camporesult_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. |
Respostaserver_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, happyhorse-t2v, happyhorse-t2v-latest
Aliases dos caminhos dos métodos
Use os caminhos dos métodos indicados acima.
IDs de chamada relacionados
Ailoot · Vídeo POST /v1/videos/generations happyhorse-t2v-latest
happyhorse-t2v-latesthappyhorse-1.1-t2vhappyhorse-t2vhappyhorse-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 |
|---|---|---|---|---|
Campomodel | Tipostring | RequisitoObrigatório | Valores e limites happyhorse-t2v-latest | Predefinição— |
Campoprompt | Tipostring | RequisitoObrigatório | Valores e limites Comprimento mínimo: 1 | Predefinição— |
Campoduration | Tipointeger | RequisitoOpcional | Valores e limites Mínimo: 3 Máximo: 15 Unidade: segundos | Predefinição5 |
Camporesolution | Tipostring | RequisitoOpcional | Valores e limites 480P, 720P, 1080P | Predefinição720P |
Camporatio | Tipostring | 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 |
Campoimage_urls | Tipohttps_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âmetromaterial_types | Contratotext |
Parâmetrorequired | Contratonull |
Parâmetrooptional_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
POST /v1/videos/generations- 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 →
Exemplos de pedidos
Ailoot · Vídeo
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}/contentGET /v1/videos/generations/{request_id}/content
Verificar o estado da tarefa
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
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
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 |
|---|---|
Campoid | Tipostring |
Campoobject | Tipostring |
Campomodel | Tipostring |
Campostatus | Tipostring |
Campocontent_url | Tiposigned URL |
Campodata[] | Tiposigned URL |
Campousage | Tipoobject |
Camporesult_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. |
Respostaserver_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, happyhorse-t2v, happyhorse-t2v-latest
Aliases dos caminhos dos métodos
Use os caminhos dos métodos indicados acima.
IDs de chamada relacionados
FAQ · happyhorse-1.1-t2v
- Que entradas e resultados estão disponíveis?
POST /v1/videos/generations·happyhorse-1.1-t2v:text→videoPOST /v1/videos/generations·happyhorse-t2v:text→videoPOST /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_urlsPOST /v1/videos/generations·happyhorse-t2v:model,prompt,duration,resolution,ratio,image_urlsPOST /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:15POST /v1/videos/generations·happyhorse-t2v:duration.minimum:3;duration.maximum:15POST /v1/videos/generations·happyhorse-t2v-latest:duration.minimum:3;duration.maximum:15