---
title: "画像・動画・音声の生成 API"
description: "同じ API キーで画像を生成し、動画ジョブを送信・ポーリングし、音声を合成・文字起こしできます。リクエスト項目、結果、エラーを解説します。"
source: https://lazu.ai/docs/ja/endpoints/media
updated: 2026-10-02
---

# 画像・動画・音声

画像と動画はキーで[モデルカタログ](https://lazu.ai/docs/ja/models/catalog)を取得し、対象エンドポイント、パラメータと例を確認します。音声モデルは下記の手順で選択してください。利用可否はモデルとデプロイに依存し、一つのモデルが全メディアに対応するとは限りません。例には Python 3 と `requests`（`python -m pip install requests`）が必要です。`LAZU_API_KEY` と下記モデル変数を設定してください。

## 画像を生成する

`LAZU_IMAGE_MODEL` に `/v1/images/generations` 対応モデルを設定します。返り値は `data[].url` または `data[].b64_json` の場合があるため実際の形式を処理してください。サイズ、品質、形式はモデルに依存します。生成 URL が恒久的とは限りません。

```python
import os
import requests

origin = os.environ.get("LAZU_API_ORIGIN", "https://api.lazu.ai").rstrip("/")
response = requests.post(origin + "/v1/images/generations",
    headers={"Authorization": "Bearer " + os.environ["LAZU_API_KEY"]},
    json={"model": os.environ["LAZU_IMAGE_MODEL"], "prompt": "A blue ceramic cup"},
    timeout=180)
response.raise_for_status()
print(response.json()["data"])
```

## 動画を送信してポーリングする

`LAZU_VIDEO_MODEL` に `/v1/videos` 対応モデルを設定します。受付成功時は HTTP 202 とジョブ ID が返ります。同じキーで同じジョブを取得してください。`pending` と `running` は未完了、`succeeded` は成果物情報、`failed` はエラーを示します。ローカル待機のタイムアウトはジョブのキャンセルや失敗ではありません。ID を保存して取得を再開し、待機終了だけを理由に有料ジョブを再作成しないでください。

```python
import os
import time
import requests

origin = os.environ.get("LAZU_API_ORIGIN", "https://api.lazu.ai").rstrip("/")
headers = {"Authorization": "Bearer " + os.environ["LAZU_API_KEY"]}
response = requests.post(origin + "/v1/videos", headers=headers,
    json={"model": os.environ["LAZU_VIDEO_MODEL"], "prompt": "Ocean waves at sunrise"},
    timeout=180)
response.raise_for_status()
job_id = response.json()["id"]
print("Save job ID:", job_id, flush=True)
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
    response = requests.get(origin + "/v1/videos/" + job_id,
                            headers=headers, timeout=30)
    if response.status_code in (429, 503):
        retry_after = response.headers.get("Retry-After", "5")
        delay = float(retry_after) if retry_after.isdecimal() else 5
        if delay >= deadline - time.monotonic():
            print("Still waiting; resume GET for job:", job_id)
            break
        time.sleep(max(1, delay))
        continue
    response.raise_for_status()
    job = response.json()
    if job["status"] == "succeeded":
        print(job.get("artifact", {}))
        break
    if job["status"] == "failed":
        raise RuntimeError(job.get("error", {"message": "Video failed"}))
    time.sleep(5)
else:
    print("Still waiting; resume GET for job:", job_id)
# A local timeout does not cancel the remote job. Keep job_id for later GETs.
```

## 音声の生成と文字起こし

`LAZU_AUDIO_MODEL` に音声生成モデル、`LAZU_VOICE` に対応する声を設定します。`/v1/audio/speech` は JSON ではなく音声バイナリを返します。文字起こしは別の対応モデルを選び、`/v1/audio/transcriptions` にローカル音声ファイルを multipart で送信します。両者は別の機能です。

現在のカタログには音声生成・文字起こしのエンドポイント型がなく、音声モダリティだけでは判別できません。デプロイ管理者または Lazu サポートから確認済みのモデル ID、エンドポイント、対応する声を取得し、現在の API キーでアクセスできることを確認してください。`LAZU_TRANSCRIPTION_MODEL` に確認済みの文字起こしモデル、`LAZU_AUDIO_FILE` にローカル音声ファイルのパスを設定します。

```python
import os
from pathlib import Path
import requests

origin = os.environ.get("LAZU_API_ORIGIN", "https://api.lazu.ai").rstrip("/")
headers = {"Authorization": "Bearer " + os.environ["LAZU_API_KEY"]}
response = requests.post(origin + "/v1/audio/speech", headers=headers,
    json={"model": os.environ["LAZU_AUDIO_MODEL"], "input": "Hello from Lazu",
          "voice": os.environ["LAZU_VOICE"], "response_format": "mp3"}, timeout=180)
response.raise_for_status()
Path("speech.mp3").write_bytes(response.content)
```

```python
import os
import requests

origin = os.environ.get("LAZU_API_ORIGIN", "https://api.lazu.ai").rstrip("/")
with open(os.environ["LAZU_AUDIO_FILE"], "rb") as audio:
    response = requests.post(origin + "/v1/audio/transcriptions",
        headers={"Authorization": "Bearer " + os.environ["LAZU_API_KEY"]},
        data={"model": os.environ["LAZU_TRANSCRIPTION_MODEL"]},
        files={"file": audio}, timeout=180)
response.raise_for_status()
print(response.json())
```

## エラーと成果物

失敗時はリクエストまたはジョブ ID とエラーコードを保存します。送信がタイムアウトし ID がない場合、再送前に動画一覧（`GET /v1/videos`）やサポートで確認してください。成功したジョブは `artifact.url` を使用し、`artifact.file_id` のみの場合は [Files API](https://lazu.ai/docs/ja/endpoints/files) で取得します。請求は[料金説明](https://lazu.ai/docs/ja/billing)で照合してください。

[API Explorer](https://lazu.ai/docs/ja/api-reference)
