> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xhuoapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Instruções de Integração da API de Vídeos Midjourney

> Midjourney generation 集成指南 - XHuoAPI

Este documento apresentará uma descrição da integração da API de Vídeos Midjourney, que pode gerar vídeos oficiais do Midjourney através da entrada de parâmetros personalizados.

## Processo de Solicitação

Para usar a API, você precisa primeiro acessar a página correspondente da [API de Vídeos Midjourney](https://api.xhuoapi.ai/documents/midjourney-videos) para solicitar o serviço correspondente. Após entrar na página, clique no botão "Acquire", conforme mostrado na imagem:

![](https://cdn.xhuoapi.ai/q6ytrc.png)

Se você ainda não estiver logado ou registrado, será redirecionado automaticamente para a página de login, convidando-o a se registrar e fazer login. Após o registro e login, você será redirecionado de volta para a página atual.

Na primeira solicitação, haverá um crédito gratuito disponível, permitindo o uso gratuito da API.

## Uso Básico

Primeiro, entenda a forma básica de uso, que consiste em inserir a palavra-chave `prompt`, a ação `action`, e um array de imagens de referência para o primeiro e último quadro `image_url`, para obter o resultado processado. Primeiro, é necessário passar um campo `action`, cujo valor é `generate`. Ele contém duas ações principais: gerar vídeo (`generate`) e estender vídeo (`extend`), conforme descrito abaixo:

<p>
  <img src="https://cdn.xhuoapi.ai/pi72m9.png" width="500" className="m-auto" />
</p>

Podemos ver que configuramos os Headers da Requisição, incluindo:

* `accept`: o formato de resposta desejado, aqui preenchido como `application/json`, ou seja, formato JSON.
* `authorization`: a chave para chamar a API, que pode ser selecionada diretamente após a solicitação.

Além disso, configuramos o Corpo da Requisição, incluindo:

* `image_url`: o link da imagem de referência para o primeiro quadro do vídeo gerado.
* `end_image_url`: opcional, especifica a imagem de referência para o último quadro do vídeo gerado.
* `video_id`: necessário especificar o ID do vídeo ao estender o vídeo.
* `video_index`: necessário especificar qual vídeo do `video_id` ao estender, o índice começa em 0, o padrão é 0.
* `action`: a ação da tarefa de geração de vídeo, que inclui duas ações: gerar vídeo (`generate`) e estender vídeo (`extend`).
* `prompt`: a palavra-chave.
* `mode`: o modo de velocidade de geração de vídeo, padrão é rápido.
* `resolution`: a clareza do vídeo, padrão é 720p.
* `loop`: se deve gerar um vídeo em loop, padrão é falso.
* `callback_url`: a URL para a qual os resultados devem ser retornados.

Após a seleção, você pode notar que o código correspondente também foi gerado à direita, conforme mostrado na imagem:

<p>
  <img src="https://cdn.xhuoapi.ai/y0cw0p.png" width="500" className="m-auto" />
</p>

Clique no botão "Try" para realizar o teste, como mostrado na imagem acima, e você obterá o seguinte resultado:

```json theme={null}
{
  "image_url": "https://storage.fonedis.cc/upload_1751816808164156352.png",
  "image_width": 560,
  "image_height": 688,
  "progress": 100,
  "video_id": "1751816807896311",
  "video_urls": [
    "https://storage.fonedis.cc//video/1c67c36c-8177-4f19-ad72-1dc1567265a6/0_0.mp4",
    "https://storage.fonedis.cc//video/1c67c36c-8177-4f19-ad72-1dc1567265a6/0_1.mp4",
    "https://storage.fonedis.cc//video/1c67c36c-8177-4f19-ad72-1dc1567265a6/0_2.mp4",
    "https://storage.fonedis.cc//video/1c67c36c-8177-4f19-ad72-1dc1567265a6/0_3.mp4"
  ],
  "task_id": "037955e0-deee-4050-baa8-1416300d67e2",
  "success": true
}
```

O resultado retornado contém vários campos, descritos a seguir:

* `success`: o status da tarefa de geração de vídeo.
* `task_id`: o ID da tarefa de geração de vídeo.
* `image_url`: a imagem de capa da tarefa de geração de vídeo.
* `image_width`: a largura da imagem de capa da tarefa de geração de vídeo.
* `image_height`: a altura da imagem de capa da tarefa de geração de vídeo.
* `video_id`: o ID do vídeo da tarefa de geração de vídeo.
* `video_urls`: um array de links do vídeo da tarefa de geração de vídeo.

Podemos ver que obtivemos informações satisfatórias sobre o vídeo, e tudo o que precisamos fazer é acessar o link do vídeo gerado em `video_urls` para obter o vídeo do Midjourney.

Além disso, se você quiser gerar o código de integração correspondente, pode copiá-lo diretamente, como o código CURL abaixo:

```shell theme={null}
curl -X POST 'https://api.xhuoapi.ai/v1/midjourney/videos' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "action": "generate",
  "prompt": "A cat sitting on a table",
  "image_url": "https://cdn.xhuoapi.ai/jgo1cw.jpg"
}'
```

## Função de Extensão de Vídeo

Se você deseja continuar gerando um vídeo Kling já criado, pode definir o parâmetro `action` como `extend` e inserir o ID do vídeo que precisa ser continuado. O ID do vídeo pode ser obtido conforme o uso básico.

Neste momento, podemos ver que o ID do vídeo mencionado anteriormente é:

```
"video_id": "1751816807896311"
```

> Nota: o `video_id` aqui é o ID do vídeo gerado. Se você não souber como gerar um vídeo, pode consultar o uso básico acima para gerar um vídeo.

Em seguida, precisamos preencher a próxima etapa com a palavra-chave que precisamos para personalizar a geração do vídeo, podendo especificar o seguinte conteúdo:

* `video_index`: selecione o índice do vídeo a ser estendido, esse índice é do `video_urls` gerado anteriormente, começando em 0, o valor padrão é 0.
* `video_id`: o ID do vídeo especificado para a extensão.
* `action`: a ação de extensão do vídeo, que é `extend`.
* `prompt`: a palavra-chave.

Um exemplo de preenchimento é mostrado abaixo:

<p>
  <img src="https://cdn.xhuoapi.ai/855hnj.png" width="500" className="m-auto" />
</p>

Após o preenchimento, o código gerado automaticamente é o seguinte:

<p>
  <img src="https://cdn.xhuoapi.ai/p58w39.png" width="500" className="m-auto" />
</p>

Código correspondente em Python:

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/midjourney/videos"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "action": "extend",
    "prompt": "A cat sitting on a table",
    "video_id": "1751816807896311",
    "video_index": 1
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Clique em executar e você verá um resultado, conforme abaixo:

```json theme={null}
{
    "image_url": "https://storage.fonedis.cc/upload_1751817471047011172.png",
    "image_width": 560,
    "image_height": 688,
    "progress": 100,
    "video_id": "1751818094559027",
    "video_urls": [
        "https://storage.fonedis.cc//video/a4bd2f43-b925-462d-9725-8aef98403133/0_0.mp4",
        "https://storage.fonedis.cc//video/a4bd2f43-b925-462d-9725-8aef98403133/0_1.mp4",
        "https://storage.fonedis.cc//video/a4bd2f43-b925-462d-9725-8aef98403133/0_2.mp4",
        "https://storage.fonedis.cc//video/a4bd2f43-b925-462d-9725-8aef98403133/0_3.mp4"
    ],
    "task_id": "da3bdcd0-9c21-4b40-877a-2c36e5f479e5",
    "success": true
}
```

Pode-se ver que o conteúdo do resultado é consistente com o anterior, o que também realiza a função de extensão de vídeo.

## Callback Assíncrono

Como o tempo de geração da API Midjourney Videos é relativamente longo, cerca de 1-2 minutos, se a API não responder por um longo período, a solicitação HTTP manterá a conexão, resultando em consumo adicional de recursos do sistema. Portanto, esta API também oferece suporte a callbacks assíncronos.

O fluxo geral é: quando o cliente inicia a solicitação, deve especificar um campo `callback_url` adicional. Após o cliente fazer a solicitação à API, a API retornará imediatamente um resultado, contendo um campo de informação `task_id`, que representa o ID da tarefa atual. Quando a tarefa for concluída, o resultado do vídeo gerado será enviado para o `callback_url` especificado pelo cliente no formato POST JSON, que também incluirá o campo `task_id`, permitindo que o resultado da tarefa seja associado pelo ID.

Abaixo, vamos entender como operar isso através de um exemplo.

Primeiro, o callback Webhook é um serviço que pode receber solicitações HTTP, e os desenvolvedores devem substituí-lo pela URL do servidor HTTP que construíram. Aqui, para facilitar a demonstração, usamos um site de exemplo de Webhook público [https://webhook.site/](https://webhook.site/), ao abrir este site, você obterá uma URL de Webhook, como mostrado na imagem:

<p>
  <img src="https://cdn.xhuoapi.ai/lali6d.png" width="500" className="m-auto" />
</p>

Copie esta URL e você pode usá-la como Webhook, o exemplo aqui é `https://webhook.site/556e6971-b41f-4fa8-9151-6e91acd0399f`.

Em seguida, podemos definir o campo `callback_url` para a URL do Webhook acima, enquanto preenchemos os parâmetros correspondentes, conforme mostrado na imagem:

<p>
  <img src="https://cdn.xhuoapi.ai/vk0l0a.png" width="500" className="m-auto" />
</p>

Ao clicar em executar, você pode notar que receberá imediatamente um resultado, como abaixo:

```
{
  "task_id": "b726a27a-f379-4d91-b569-cfe4b7b299ee"
}
```

Após alguns instantes, podemos observar o resultado do vídeo gerado em `https://webhook.site/556e6971-b41f-4fa8-9151-6e91acd0399f`, como mostrado na imagem:

<p>
  <img src="https://cdn.xhuoapi.ai/7hcuw8.png" width="500" className="m-auto" />
</p>

O conteúdo é o seguinte:

```json theme={null}
{
  "image_url": "https://storage.fonedis.cc/upload_1751818513244368774.png",
  "image_width": 560,
  "image_height": 688,
  "progress": 100,
  "video_id": "1751818512924054",
  "video_urls": [
    "https://storage.fonedis.cc//video/9ff3783e-bcf6-4f11-b738-09aa52318e6e/0_0.mp4",
    "https://storage.fonedis.cc//video/9ff3783e-bcf6-4f11-b738-09aa52318e6e/0_1.mp4",
    "https://storage.fonedis.cc//video/9ff3783e-bcf6-4f11-b738-09aa52318e6e/0_2.mp4",
    "https://storage.fonedis.cc//video/9ff3783e-bcf6-4f11-b738-09aa52318e6e/0_3.mp4"
  ],
  "task_id": "b726a27a-f379-4d91-b569-cfe4b7b299ee",
  "success": true
}
```

Pode-se ver que o resultado contém um campo `task_id`, e os outros campos são semelhantes aos anteriores, permitindo que a tarefa seja associada através deste campo.

## Tratamento de Erros

Ao chamar a API, se ocorrer um erro, a API retornará o código de erro e a informação correspondente. Por exemplo:

* `400 token_mismatched`: Solicitação inválida, possivelmente devido a parâmetros ausentes ou inválidos.
* `400 api_not_implemented`: Solicitação inválida, possivelmente devido a parâmetros ausentes ou inválidos.
* `401 invalid_token`: Não autorizado, token de autorização inválido ou ausente.
* `429 too_many_requests`: Muitas solicitações, você excedeu o limite de taxa.
* `500 api_error`: Erro interno do servidor, algo deu errado no servidor.

### Exemplo de Resposta de Erro

```json theme={null}
{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "fetch failed"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}
```

## Conclusão

Através deste documento, você já entendeu como usar a API Midjourney Videos para gerar vídeos através da entrada de palavras-chave e imagens de referência. Esperamos que este documento possa ajudá-lo a integrar e usar melhor esta API. Se tiver alguma dúvida, entre em contato com nossa equipe de suporte técnico.
