Wan2.6の包括的なサンプルコードとAPIリソースにアクセスして、統合プロセスを効率化しましょう。詳細なドキュメントでは段階的なガイダンスを提供し、プロジェクトでWan2.6の潜在能力を最大限に活用できるよう支援します。
cURL Code Example
response=$(curl -sS --fail-with-body "https://api.cometapi.com/v1/videos" \
-H "Authorization: Bearer $COMETAPI_KEY" \
-F model=wan2.6 \
-F prompt='A red kite glides over a quiet mountain valley at sunrise.' \
-F seconds=5 \
-F size=1280x720) || exit 1
video_id=$(printf '%s' "$response" | sed -n 's/.*"id"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p')
if [ -z "$video_id" ]; then
printf 'Missing video ID: %s\n' "$response" >&2
exit 1
fi
printf 'Video ID: %s\n' "$video_id"
polls=0
while [ "$polls" -lt 54 ]; do
status_response=$(curl -sS --fail-with-body "https://api.cometapi.com/v1/videos/${video_id}" \
-H "Authorization: Bearer $COMETAPI_KEY") || exit 1
progress=$(printf '%s' "$status_response" | sed -n 's/.*"progress"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p')
status=$(printf '%s' "$status_response" | sed -n 's/.*"status"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p')
printf 'Progress: %s, Status: %s\n' "${progress:-0%}" "${status:-unknown}"
case "$status" in
FAILURE|failure|failed|error|cancelled|canceled) exit 1 ;;
completed|succeeded|success) break ;;
esac
[ "$progress" = "100%" ] && break
polls=$((polls + 1))
sleep 10
done
if [ "$polls" -ge 54 ]; then
echo "Video generation did not complete within 9 minutes" >&2
exit 1
fi
mkdir -p output
output_path="output/${video_id}.mp4"
curl -sS --fail-with-body "https://api.cometapi.com/v1/videos/${video_id}/content" \
-H "Authorization: Bearer $COMETAPI_KEY" \
-o "$output_path"
printf 'Saved: %s (%s bytes)\n' "$output_path" "$(wc -c < "$output_path")"
Python Code Example
import os
import time
from pathlib import Path
import requests
# Get your API key from https://www.cometapi.com/console/token, and paste it here
API_KEY = os.environ.get("COMETAPI_KEY") or "<YOUR_COMETAPI_KEY>"
BASE_URL = "https://api.cometapi.com".rstrip("/")
response = requests.post(
f"{BASE_URL}/v1/videos",
headers={"Authorization": f"Bearer {API_KEY}"},
files={
"model": (None, "wan2.6"),
"prompt": (None, "A red kite glides over a quiet mountain valley at sunrise."),
"seconds": (None, "5"),
"size": (None, "1280x720"),
},
timeout=120,
)
response.raise_for_status()
video_id = response.json()["id"]
print(f"Video ID: {video_id}")
deadline = time.monotonic() + 540
while time.monotonic() < deadline:
response = requests.get(
f"{BASE_URL}/v1/videos/{video_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=120,
)
response.raise_for_status()
result = response.json()
data = result.get("data") or result
progress = data.get("progress", result.get("progress", "0%"))
status = str(data.get("status", result.get("status", "unknown")))
print(f"Progress: {progress}, Status: {status}")
if status.lower() in {"failure", "failed", "error", "cancelled", "canceled"}:
raise RuntimeError(f"Video generation failed: {result}")
if progress == "100%" or status.lower() in {"completed", "succeeded", "success"}:
break
time.sleep(10)
else:
raise TimeoutError("Video generation did not complete within 9 minutes")
response = requests.get(
f"{BASE_URL}/v1/videos/{video_id}/content",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=120,
)
response.raise_for_status()
output_path = Path("output") / f"{video_id}.mp4"
output_path.parent.mkdir(parents=True, exist_ok=True)
output_path.write_bytes(response.content)
print(f"Saved: {output_path} ({output_path.stat().st_size} bytes)")
JavaScript Code Example
import { mkdir, writeFile } from "node:fs/promises";
// Get your API key from https://www.cometapi.com/console/token, and paste it here
const apiKey = process.env["COMETAPI_KEY"] || "<YOUR_COMETAPI_KEY>";
const baseUrl = "https://api.cometapi.com".replace(/\/$/, "");
const form = new FormData();
form.append("model", "wan2.6");
form.append("prompt", "A red kite glides over a quiet mountain valley at sunrise.");
form.append("seconds", "5");
form.append("size", "1280x720");
let response = await fetch(`${baseUrl}/v1/videos`, {
method: "POST",
headers: { Authorization: `Bearer ${apiKey}` },
body: form,
});
if (!response.ok) throw new Error(await response.text());
const { id: videoId } = await response.json();
console.log(`Video ID: ${videoId}`);
const deadline = Date.now() + 540_000;
let completed = false;
while (Date.now() < deadline) {
response = await fetch(`${baseUrl}/v1/videos/${videoId}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
if (!response.ok) throw new Error(await response.text());
const result = await response.json();
const data = result.data || result;
const progress = data.progress || result.progress || "0%";
const status = String(data.status || result.status || "unknown");
console.log(`Progress: ${progress}, Status: ${status}`);
if (["failure", "failed", "error", "cancelled", "canceled"].includes(status.toLowerCase())) {
throw new Error(`Video generation failed: ${JSON.stringify(result)}`);
}
if (progress === "100%" || ["completed", "succeeded", "success"].includes(status.toLowerCase())) {
completed = true;
break;
}
await new Promise((resolve) => setTimeout(resolve, 10_000));
}
if (!completed) throw new Error("Video generation did not complete within 9 minutes");
response = await fetch(`${baseUrl}/v1/videos/${videoId}/content`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
if (!response.ok) throw new Error(await response.text());
const video = Buffer.from(await response.arrayBuffer());
await mkdir("output", { recursive: true });
const outputPath = `output/${videoId}.mp4`;
await writeFile(outputPath, video);
console.log(`Saved: ${outputPath} (${video.length} bytes)`);