@acedatacloud/skills 2026.727.0 → 2026.727.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/dreamina-video/SKILL.md +125 -0
- package/skills/face-transform/SKILL.md +21 -3
- package/skills/fish-audio/SKILL.md +3 -1
- package/skills/gpt-image-2/SKILL.md +8 -3
- package/skills/grok-video/SKILL.md +123 -0
- package/skills/sora-video/SKILL.md +13 -6
- package/skills/turnstile/SKILL.md +111 -0
- package/skills/veo-video/SKILL.md +4 -95
- package/skills/webextrator/SKILL.md +3 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acedatacloud/skills",
|
|
3
|
-
"version": "2026.727.
|
|
3
|
+
"version": "2026.727.2",
|
|
4
4
|
"description": "Agent Skills for AceDataCloud AI services — music, image, video generation, LLM chat, web search. Compatible with Claude Code, GitHub Copilot, Gemini CLI, OpenAI Codex, and 30+ AI coding agents.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-skills",
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dreamina-video
|
|
3
|
+
description: Generate talking-photo digital human videos with Dreamina (ByteDance OmniHuman) via AceDataCloud API. Use when animating a portrait image with a driving audio track to produce a lip-synced video where the person speaks. Supports mask-based multi-person targeting and async task polling.
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: acedatacloud
|
|
7
|
+
version: "1.0"
|
|
8
|
+
compatibility: Requires ACEDATACLOUD_API_TOKEN in .env file (see _shared/authentication.md).
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Dreamina Talking-Photo Video Generation
|
|
12
|
+
|
|
13
|
+
Generate audio-driven digital human videos through AceDataCloud's Dreamina API (powered by ByteDance OmniHuman 1.5). Provide a portrait image and driving audio to produce a lip-synced talking-photo video.
|
|
14
|
+
|
|
15
|
+
> **Setup:** See [authentication](../_shared/authentication.md) for token setup.
|
|
16
|
+
|
|
17
|
+
## Quick Start
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
curl -X POST https://api.acedata.cloud/dreamina/videos \
|
|
21
|
+
-H "Authorization: ******" \
|
|
22
|
+
-H "Content-Type: application/json" \
|
|
23
|
+
-d '{
|
|
24
|
+
"image_url": "https://example.com/portrait.jpg",
|
|
25
|
+
"audio_url": "https://example.com/voiceover.mp3",
|
|
26
|
+
"async": true
|
|
27
|
+
}'
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The response contains a `task_id`. Poll for the result:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
curl -X POST https://api.acedata.cloud/dreamina/tasks \
|
|
34
|
+
-H "Authorization: ******" \
|
|
35
|
+
-H "Content-Type: application/json" \
|
|
36
|
+
-d '{"action": "retrieve", "id": "<task_id>"}'
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
> **Async:** See [async task polling](../_shared/async-tasks.md). Poll `POST /dreamina/tasks` until `response.data.status` equals `"done"`.
|
|
40
|
+
|
|
41
|
+
## Model
|
|
42
|
+
|
|
43
|
+
| Model | Description |
|
|
44
|
+
|-------|-------------|
|
|
45
|
+
| `omnihuman-1.5` | ByteDance OmniHuman 1.5 — audio-driven lip-sync digital human (default and only available model) |
|
|
46
|
+
|
|
47
|
+
## Workflow
|
|
48
|
+
|
|
49
|
+
### Basic Talking-Photo
|
|
50
|
+
|
|
51
|
+
Generate a video where a portrait person speaks a given audio track.
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
POST /dreamina/videos
|
|
55
|
+
{
|
|
56
|
+
"model": "omnihuman-1.5",
|
|
57
|
+
"image_url": "https://example.com/portrait.jpg",
|
|
58
|
+
"audio_url": "https://example.com/speech.mp3",
|
|
59
|
+
"prompt": "Natural expression, steady head movement, warm tone",
|
|
60
|
+
"async": true
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Multi-Person Mask
|
|
65
|
+
|
|
66
|
+
To target a specific person in a group image, provide `mask_url` array with subject mask URLs.
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
POST /dreamina/videos
|
|
70
|
+
{
|
|
71
|
+
"image_url": "https://example.com/group-photo.jpg",
|
|
72
|
+
"audio_url": "https://example.com/speech.wav",
|
|
73
|
+
"mask_url": ["https://example.com/person-mask.png"],
|
|
74
|
+
"async": true
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Parameters
|
|
79
|
+
|
|
80
|
+
| Parameter | Required | Values | Description |
|
|
81
|
+
|-----------|----------|--------|-------------|
|
|
82
|
+
| `image_url` | ✓ | URL | Portrait image URL (public, clear frontal face works best) |
|
|
83
|
+
| `audio_url` | ✓ | URL | Driving audio URL (mp3/wav, publicly reachable, keep under 60s) |
|
|
84
|
+
| `model` | | `"omnihuman-1.5"` | Model to use (default: `omnihuman-1.5`) |
|
|
85
|
+
| `prompt` | | string | Steers expression, emotion, stability, and style |
|
|
86
|
+
| `mask_url` | | array of URLs | Subject mask URLs to target a specific person in a multi-person image |
|
|
87
|
+
| `callback_url` | | URL | Webhook for result delivery |
|
|
88
|
+
| `async` | | boolean | Return task ID immediately for polling |
|
|
89
|
+
|
|
90
|
+
## Task Queries
|
|
91
|
+
|
|
92
|
+
Retrieve one task:
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
POST /dreamina/tasks
|
|
96
|
+
{"action": "retrieve", "id": "<task_id>"}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
You can also query by `trace_id`:
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
POST /dreamina/tasks
|
|
103
|
+
{"action": "retrieve", "trace_id": "<trace_id>"}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Retrieve several tasks:
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
POST /dreamina/tasks
|
|
110
|
+
{"action": "retrieve_batch", "ids": ["<id1>", "<id2>"]}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
A completed response contains `response.data.video_url` when `response.data.status` is `"done"`.
|
|
114
|
+
|
|
115
|
+
## Gotchas
|
|
116
|
+
|
|
117
|
+
- Both `image_url` and `audio_url` are **required**
|
|
118
|
+
- The portrait should be a clear, well-lit, front-facing image with the face unobstructed
|
|
119
|
+
- Audio must be publicly reachable; keep it under 60s (≤30s recommended for 1080p quality)
|
|
120
|
+
- Use `async: true` or `callback_url` for longer jobs — synchronous mode may time out
|
|
121
|
+
- `mask_url` is only needed for multi-person images when you want to target one specific person
|
|
122
|
+
- Check `response.data.status` when polling — the terminal state is `"done"`
|
|
123
|
+
- Billed by output video duration
|
|
124
|
+
|
|
125
|
+
> **MCP:** See [MCP servers](../_shared/mcp-servers.md) for tool-use integration.
|
|
@@ -61,19 +61,25 @@ POST /face/beautify
|
|
|
61
61
|
|
|
62
62
|
### 3. Age Transformation
|
|
63
63
|
|
|
64
|
+
`age_infos` is required — one entry per face, each carrying the target `age`.
|
|
65
|
+
|
|
64
66
|
```json
|
|
65
67
|
POST /face/change-age
|
|
66
68
|
{
|
|
67
|
-
"image_url": "https://example.com/portrait.jpg"
|
|
69
|
+
"image_url": "https://example.com/portrait.jpg",
|
|
70
|
+
"age_infos": [{ "age": 60 }]
|
|
68
71
|
}
|
|
69
72
|
```
|
|
70
73
|
|
|
71
74
|
### 4. Gender Swap
|
|
72
75
|
|
|
76
|
+
`gender_infos` is required. `gender` is `0` to turn a male face female, `1` for the reverse.
|
|
77
|
+
|
|
73
78
|
```json
|
|
74
79
|
POST /face/change-gender
|
|
75
80
|
{
|
|
76
|
-
"image_url": "https://example.com/portrait.jpg"
|
|
81
|
+
"image_url": "https://example.com/portrait.jpg",
|
|
82
|
+
"gender_infos": [{ "gender": 1 }]
|
|
77
83
|
}
|
|
78
84
|
```
|
|
79
85
|
|
|
@@ -113,7 +119,19 @@ POST /face/detect-live
|
|
|
113
119
|
|
|
114
120
|
| Parameter | Required | Description |
|
|
115
121
|
|-----------|----------|-------------|
|
|
116
|
-
| `image_url` | Yes (
|
|
122
|
+
| `image_url` | Yes (all except `/face/swap`) | Source face image URL |
|
|
123
|
+
|
|
124
|
+
### `/face/change-age`
|
|
125
|
+
|
|
126
|
+
| Parameter | Required | Description |
|
|
127
|
+
|-----------|----------|-------------|
|
|
128
|
+
| `age_infos` | Yes | Array of `{ "age": <number> }`, one per face. Omitting it returns `400 age_infos is required` |
|
|
129
|
+
|
|
130
|
+
### `/face/change-gender`
|
|
131
|
+
|
|
132
|
+
| Parameter | Required | Description |
|
|
133
|
+
|-----------|----------|-------------|
|
|
134
|
+
| `gender_infos` | Yes | Array of `{ "gender": 0\|1 }` — `0` male→female, `1` female→male. Each entry also accepts an optional `face_rect` |
|
|
117
135
|
|
|
118
136
|
### `/face/swap`
|
|
119
137
|
|
|
@@ -36,6 +36,8 @@ Synchronous responses return a direct audio URL:
|
|
|
36
36
|
|----------|---------|
|
|
37
37
|
| `POST /fish/tts` | Text-to-speech generation |
|
|
38
38
|
| `GET /fish/model` | Browse/search public Fish reference voices |
|
|
39
|
+
| `GET /fish/model/{id}` | Fetch one reference voice by ID |
|
|
40
|
+
| `POST /fish/model` | Clone a voice — create a reference model from an audio URL |
|
|
39
41
|
| `POST /fish/tasks` | Poll async TTS jobs when `async: true` |
|
|
40
42
|
|
|
41
43
|
## Workflows
|
|
@@ -115,4 +117,4 @@ Headers:
|
|
|
115
117
|
- Choose the Fish engine with the **`model` request header**, not a JSON `model` field.
|
|
116
118
|
- Use `reference_id` from `GET /fish/model` — not `voice_id`.
|
|
117
119
|
- Synchronous requests return `audio_url` directly; async jobs should be polled via `/fish/tasks`.
|
|
118
|
-
-
|
|
120
|
+
- Voice cloning is `POST /fish/model`. `voices` must be a **single** HTTP(S) audio URL string — not an array, and not a file upload. It returns the `_id` you then pass to `/fish/tts` as `reference_id`.
|
|
@@ -50,9 +50,11 @@ Response (both endpoints): `{"data":[{"url":"https://...png"}]}` → download `d
|
|
|
50
50
|
|---|---|
|
|
51
51
|
| 16:9 | `1792x1024` (HD), `2048x1152`, `3840x2160` (4K) |
|
|
52
52
|
| 9:16 | `1024x1792`, `1152x2048`, `2160x3840` |
|
|
53
|
-
| 1:1 | `1024x1024`, `2048x2048`, `
|
|
53
|
+
| 1:1 | `1024x1024`, `2048x2048`, `2880x2880` (4K) |
|
|
54
54
|
|
|
55
|
-
(Omit `size` or use `"auto"` to let the model pick.
|
|
55
|
+
(Omit `size` or use `"auto"` to let the model pick. Custom sizes must have both sides a
|
|
56
|
+
multiple of 16, each side ≤ 3840, total pixels between 655,360 and 8,294,400, and an aspect
|
|
57
|
+
ratio ≤ 3:1 — otherwise 400.)
|
|
56
58
|
|
|
57
59
|
## Tips
|
|
58
60
|
|
|
@@ -61,4 +63,7 @@ Response (both endpoints): `{"data":[{"url":"https://...png"}]}` → download `d
|
|
|
61
63
|
- For **character/scene consistency** across video beats, generate one hero image, then
|
|
62
64
|
`edits` it per beat instead of regenerating from scratch.
|
|
63
65
|
- Text in images renders legibly — good for titles/labels you don't want to overlay in HTML.
|
|
64
|
-
-
|
|
66
|
+
- `n` accepts **1–10** and you are billed **per image returned**, not per request — `n: 4`
|
|
67
|
+
costs 4×. (`response_format: "b64_json"` still requires `n: 1`.)
|
|
68
|
+
- Both endpoints are synchronous by default. For long 4K jobs pass `callback_url` (optionally
|
|
69
|
+
with `async: true`) and poll `POST /openai/tasks` with `{"id": "<task_id>"}`.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grok-video
|
|
3
|
+
description: Generate AI videos with Grok (xAI) via AceDataCloud API. Use when creating videos from text prompts or animating images using Grok's video generation models. Supports text-to-video and image-to-video with configurable resolution and aspect ratio.
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: acedatacloud
|
|
7
|
+
version: "1.0"
|
|
8
|
+
compatibility: Requires ACEDATACLOUD_API_TOKEN in .env file (see _shared/authentication.md).
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Grok Video Generation
|
|
12
|
+
|
|
13
|
+
Generate AI videos through AceDataCloud's Grok (xAI) API.
|
|
14
|
+
|
|
15
|
+
> **Setup:** See [authentication](../_shared/authentication.md) for token setup.
|
|
16
|
+
|
|
17
|
+
## Quick Start
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
curl -X POST https://api.acedata.cloud/grok/videos \
|
|
21
|
+
-H "Authorization: ******" \
|
|
22
|
+
-H "Content-Type: application/json" \
|
|
23
|
+
-d '{"prompt": "a futuristic city at night with flying cars and neon lights", "model": "grok-imagine-video-1.5-fast:reverse", "callback_url": "https://api.acedata.cloud/health"}'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
> **Async:** See [async task polling](../_shared/async-tasks.md). Poll via `POST /grok/tasks` with `{"id": "..."}`.
|
|
27
|
+
|
|
28
|
+
## Models
|
|
29
|
+
|
|
30
|
+
| Model | Resolution | Default | Notes |
|
|
31
|
+
|-------|-----------|---------|-------|
|
|
32
|
+
| `grok-imagine-video-1.5-fast:reverse` | up to 1080p | ✓ | Best value. 6–30s, billed by duration tier |
|
|
33
|
+
| `grok-imagine-video:reverse` | up to 1080p | | Better value. 1–15s, billed per output second |
|
|
34
|
+
| `grok-imagine-video:official` | up to 1080p | | Higher quality. 1–15s, billed per output second |
|
|
35
|
+
| `grok-imagine-video-1.5:official` | up to 1080p | | Higher quality, **image-to-video only** (`image_url` required) |
|
|
36
|
+
| `grok-imagine-video` | up to 720p | | Base model, text-to-video only |
|
|
37
|
+
| `grok-imagine-video-1.5-preview` | up to 720p | | 1.5 preview (grok-video.json surface) |
|
|
38
|
+
|
|
39
|
+
## Workflows
|
|
40
|
+
|
|
41
|
+
### 1. Text-to-Video
|
|
42
|
+
|
|
43
|
+
Generate a video from a text description.
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
POST /grok/videos
|
|
47
|
+
{
|
|
48
|
+
"prompt": "a majestic eagle soaring over snow-capped mountains at dawn",
|
|
49
|
+
"model": "grok-imagine-video-1.5-fast:reverse",
|
|
50
|
+
"resolution": "720p",
|
|
51
|
+
"aspect_ratio": "16:9",
|
|
52
|
+
"duration": 6
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 2. Image-to-Video
|
|
57
|
+
|
|
58
|
+
Animate a still image into motion. Provide the image URL via `image_url`.
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
POST /grok/videos
|
|
62
|
+
{
|
|
63
|
+
"prompt": "the eagle lifts off and flies into the sunset",
|
|
64
|
+
"image_url": "https://example.com/eagle.jpg",
|
|
65
|
+
"model": "grok-imagine-video:official",
|
|
66
|
+
"resolution": "720p",
|
|
67
|
+
"aspect_ratio": "16:9"
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 3. Multi-Reference Generation
|
|
72
|
+
|
|
73
|
+
Supply up to several reference images via `reference_image_urls` for style or subject consistency.
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
POST /grok/videos
|
|
77
|
+
{
|
|
78
|
+
"prompt": "the character walks through a cyberpunk alley",
|
|
79
|
+
"reference_image_urls": [
|
|
80
|
+
"https://example.com/character.jpg",
|
|
81
|
+
"https://example.com/style.jpg"
|
|
82
|
+
],
|
|
83
|
+
"model": "grok-imagine-video-1.5-fast:reverse",
|
|
84
|
+
"resolution": "1080p"
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Parameters
|
|
89
|
+
|
|
90
|
+
| Parameter | Values | Description |
|
|
91
|
+
|-----------|--------|-------------|
|
|
92
|
+
| `prompt` | string | Text description of the desired video |
|
|
93
|
+
| `model` | see Models table | Model to use (default: `grok-imagine-video-1.5-fast:reverse`) |
|
|
94
|
+
| `image_url` | URL | Single reference image for image-to-video |
|
|
95
|
+
| `reference_image_urls` | array of URLs | Multiple reference images for style/subject guidance |
|
|
96
|
+
| `aspect_ratio` | `"1:1"`, `"16:9"`, `"9:16"`, `"4:3"`, `"3:4"`, `"3:2"`, `"2:3"` | Output aspect ratio |
|
|
97
|
+
| `resolution` | `"480p"`, `"720p"`, `"1080p"` | Output resolution (default: `480p`; `1080p` only for `:reverse`/`:official` models) |
|
|
98
|
+
| `duration` | integer | Duration in seconds (default: 6) |
|
|
99
|
+
| `callback_url` | URL | Webhook URL for async delivery |
|
|
100
|
+
| `async` | boolean | Return a task ID immediately for polling |
|
|
101
|
+
|
|
102
|
+
## Task Queries
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
POST /grok/tasks
|
|
106
|
+
{"id": "<task_id>", "action": "retrieve"}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Batch retrieval:
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
POST /grok/tasks
|
|
113
|
+
{"ids": ["<id1>", "<id2>"], "action": "retrieve_batch"}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Gotchas
|
|
117
|
+
|
|
118
|
+
- `1080p` resolution is only supported by `:reverse` and `:official` model variants
|
|
119
|
+
- `image_url` provides a single driving image; `reference_image_urls` provides multiple style/subject references
|
|
120
|
+
- Set `callback_url` to get the task ID immediately without blocking on completion
|
|
121
|
+
- Poll `POST /grok/tasks` with `{"id": "..."}` until a final video URL appears in the response
|
|
122
|
+
|
|
123
|
+
> **MCP:** See [MCP servers](../_shared/mcp-servers.md) for tool-use integration.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sora-video
|
|
3
|
-
description:
|
|
3
|
+
description: UNAVAILABLE — the Sora endpoints now return 404 and the service is unpublished; use veo-video, kling-video or seedance-video instead. Historical reference for AceDataCloud's OpenAI Sora API. Was used when creating videos from text prompts, generating videos from reference images, or using character references from existing videos. Supports text-to-video, image-to-video, and character-driven generation with multiple models and resolutions.
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: acedatacloud
|
|
@@ -10,6 +10,13 @@ compatibility: Requires ACEDATACLOUD_API_TOKEN in .env file (see _shared/authent
|
|
|
10
10
|
|
|
11
11
|
# Sora Video Generation
|
|
12
12
|
|
|
13
|
+
> [!WARNING]
|
|
14
|
+
> **This service is currently unavailable.** `/sora/videos` and `/sora/tasks` return
|
|
15
|
+
> `404 no Route matched with those values`, and the Sora service is no longer published
|
|
16
|
+
> in the API catalog. The reference below is kept for historical accuracy only — do not
|
|
17
|
+
> build against it. For video generation use [veo-video](../veo-video/SKILL.md),
|
|
18
|
+
> [kling-video](../kling-video/SKILL.md) or [seedance-video](../seedance-video/SKILL.md).
|
|
19
|
+
|
|
13
20
|
Generate AI videos through AceDataCloud's OpenAI Sora API.
|
|
14
21
|
|
|
15
22
|
> **Setup:** See [authentication](../_shared/authentication.md) for token setup.
|
|
@@ -81,10 +88,10 @@ POST /sora/videos
|
|
|
81
88
|
| Parameter | Values | Description |
|
|
82
89
|
|-----------|--------|-------------|
|
|
83
90
|
| `model` | `"sora-2"`, `"sora-2-pro"` | Model to use (required) |
|
|
84
|
-
| `size` | `"small"`, `"large"` | Video resolution |
|
|
85
|
-
| `duration` | `10`, `15`, `25` | Duration in seconds (25 only with sora-2-pro) |
|
|
86
|
-
| `orientation` | `"landscape"` (16:9), `"portrait"` (9:16)
|
|
87
|
-
| `version` | `"1.0"` | API version
|
|
91
|
+
| `size` | `"small"`, `"large"`, `"720x1280"`, `"1280x720"`, `"1024x1792"`, `"1792x1024"` | Video resolution |
|
|
92
|
+
| `duration` | `4`, `8`, `10`, `12`, `15`, `25` | Duration in seconds (25 only with sora-2-pro; version 2.0 supports 4/8/12) |
|
|
93
|
+
| `orientation` | `"landscape"` (16:9), `"portrait"` (9:16) | Video orientation — version 1.0 only |
|
|
94
|
+
| `version` | `"1.0"` (default), `"2.0"` | API version. `1.0` enables duration up to 25s, `orientation`, character references and image inputs; `2.0` uses pixel `size` values and drops `orientation` |
|
|
88
95
|
|
|
89
96
|
## Gotchas
|
|
90
97
|
|
|
@@ -94,4 +101,4 @@ POST /sora/videos
|
|
|
94
101
|
- `orientation` sets the aspect ratio — use `"portrait"` for mobile-first content
|
|
95
102
|
- Task states use `"succeeded"` (not "completed") — check for this value when polling
|
|
96
103
|
|
|
97
|
-
> **MCP:**
|
|
104
|
+
> **MCP:** the hosted endpoint `https://sora.mcp.acedata.cloud/mcp` currently returns 503, in line with the service being unavailable. See [all MCP servers](../_shared/mcp-servers.md)
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: turnstile
|
|
3
|
+
description: Solve Cloudflare Turnstile CAPTCHAs via AceDataCloud API. Use when you need to bypass or solve a Cloudflare Turnstile challenge by providing the site key and page URL to get back a valid token. Supports synchronous and asynchronous modes.
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: acedatacloud
|
|
7
|
+
version: "1.0"
|
|
8
|
+
compatibility: Requires ACEDATACLOUD_API_TOKEN in .env file (see _shared/authentication.md).
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Cloudflare Turnstile CAPTCHA Solver
|
|
12
|
+
|
|
13
|
+
Solve Cloudflare Turnstile CAPTCHA challenges through AceDataCloud's captcha API. Submit the site key and target URL to receive a valid `cf-turnstile-response` token.
|
|
14
|
+
|
|
15
|
+
> **Setup:** See [authentication](../_shared/authentication.md) for token setup.
|
|
16
|
+
|
|
17
|
+
## Quick Start
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
curl -X POST https://api.acedata.cloud/captcha/token/turnstile \
|
|
21
|
+
-H "Authorization: ******" \
|
|
22
|
+
-H "Content-Type: application/json" \
|
|
23
|
+
-d '{
|
|
24
|
+
"website_key": "0x4AAAAAAADnPIDROrmt1Wwj",
|
|
25
|
+
"website_url": "https://react-turnstile.vercel.app"
|
|
26
|
+
}'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
A successful synchronous response:
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"token": "0.mNQ2f9uP6mQ0y3H5Q8bqO7iM...",
|
|
34
|
+
"started_at": "2026-07-24T09:34:13+00:00",
|
|
35
|
+
"finished_at": "2026-07-24T09:34:25+00:00",
|
|
36
|
+
"elapsed": 12.4
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Use the returned `token` as the `cf-turnstile-response` value when submitting forms to the target site. The token is single-use with a ~120s validity — use it within 60s.
|
|
41
|
+
|
|
42
|
+
## How to Find `website_key`
|
|
43
|
+
|
|
44
|
+
1. Open the target page in a browser and press F12 to open DevTools
|
|
45
|
+
2. In the Elements panel, search for `cf-turnstile`
|
|
46
|
+
3. Find the container element — the `data-sitekey` attribute value is the `website_key`
|
|
47
|
+
|
|
48
|
+
## Parameters
|
|
49
|
+
|
|
50
|
+
| Parameter | Required | Description |
|
|
51
|
+
|-----------|----------|-------------|
|
|
52
|
+
| `website_key` | ✓ | The Turnstile site key (`data-sitekey`) from the target page |
|
|
53
|
+
| `website_url` | ✓ | The full URL of the page containing the Turnstile widget |
|
|
54
|
+
| `action` | | Custom `action` value — only needed when the target page sets a custom action |
|
|
55
|
+
| `cdata` | | Custom `cData` value — only needed when the target page sets a custom cData |
|
|
56
|
+
| `async` | | When `true`, return immediately with a `task_id`; poll `POST /captcha/tasks` to retrieve the token |
|
|
57
|
+
|
|
58
|
+
## Response Fields
|
|
59
|
+
|
|
60
|
+
| Field | Description |
|
|
61
|
+
|-------|-------------|
|
|
62
|
+
| `token` | The solved Turnstile token to submit as `cf-turnstile-response` |
|
|
63
|
+
| `started_at` | ISO-8601 timestamp when solving began |
|
|
64
|
+
| `finished_at` | ISO-8601 timestamp when solving completed |
|
|
65
|
+
| `elapsed` | Total solving time in seconds |
|
|
66
|
+
|
|
67
|
+
## Async Mode
|
|
68
|
+
|
|
69
|
+
Pass `async: true` to return a `task_id` immediately instead of blocking:
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
POST /captcha/token/turnstile
|
|
73
|
+
{
|
|
74
|
+
"website_key": "0x4AAAAAAADnPIDROrmt1Wwj",
|
|
75
|
+
"website_url": "https://react-turnstile.vercel.app",
|
|
76
|
+
"async": true
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Then poll `POST /captcha/tasks` with the returned `task_id`:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
POST /captcha/tasks
|
|
84
|
+
{"id": "<task_id>"}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
> **Async:** See [async task polling](../_shared/async-tasks.md) for the full polling contract.
|
|
88
|
+
|
|
89
|
+
## Using the Token
|
|
90
|
+
|
|
91
|
+
Submit the token to the target site as `cf-turnstile-response`:
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
import requests
|
|
95
|
+
|
|
96
|
+
token = "0.mNQ2f9uP6mQ0y3H5Q8bqO7iM..."
|
|
97
|
+
response = requests.post(
|
|
98
|
+
"https://react-turnstile.vercel.app",
|
|
99
|
+
data={"cf-turnstile-response": token}
|
|
100
|
+
)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Gotchas
|
|
104
|
+
|
|
105
|
+
- Both `website_key` and `website_url` are **required**
|
|
106
|
+
- The token is single-use and valid for ~120s — use within 60s for best results
|
|
107
|
+
- `action` and `cdata` are optional and only required when the target site explicitly uses them
|
|
108
|
+
- You are billed only when a token is successfully solved
|
|
109
|
+
- Synchronous mode blocks until the token is ready (typically 10–30s); use `async: true` for non-blocking operation
|
|
110
|
+
|
|
111
|
+
> **MCP:** See [MCP servers](../_shared/mcp-servers.md) for tool-use integration.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: veo-video
|
|
3
|
-
description: Generate AI videos with Google Veo via AceDataCloud API. Use when creating videos from text descriptions, animating still images into video,
|
|
3
|
+
description: Generate AI videos with Google Veo via AceDataCloud API. Use when creating videos from text descriptions, animating still images into video, blending reference images into video, or upscaling existing videos to 1080p. Supports Veo 3 and Veo 3.1 models including fast and ingredient variants.
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: acedatacloud
|
|
@@ -37,7 +37,6 @@ curl -X POST https://api.acedata.cloud/veo/tasks \
|
|
|
37
37
|
|
|
38
38
|
| Model | Audio | Best For |
|
|
39
39
|
|-------|-------|----------|
|
|
40
|
-
| `veo2-fast` | No | Fast, cost-effective generation (default) |
|
|
41
40
|
| `veo3` | Yes (native) | Full audiovisual generation |
|
|
42
41
|
| `veo3-fast` | Yes (native) | Faster audiovisual generation |
|
|
43
42
|
| `veo31` | Yes (native) | Veo 3.1, highest quality |
|
|
@@ -68,7 +67,7 @@ POST /veo/videos
|
|
|
68
67
|
"action": "image2video",
|
|
69
68
|
"prompt": "the scene gently comes to life with wind and subtle motion",
|
|
70
69
|
"image_urls": ["https://example.com/landscape.jpg"],
|
|
71
|
-
"model": "
|
|
70
|
+
"model": "veo31-fast",
|
|
72
71
|
"aspect_ratio": "16:9"
|
|
73
72
|
}
|
|
74
73
|
```
|
|
@@ -107,105 +106,16 @@ POST /veo/videos
|
|
|
107
106
|
| Parameter | Values | Description |
|
|
108
107
|
|-----------|--------|-------------|
|
|
109
108
|
| `action` | `"text2video"`, `"image2video"`, `"ingredients2video"`, `"get1080p"` | Generation mode |
|
|
110
|
-
| `model` | see Models table | Model to use
|
|
109
|
+
| `model` | see Models table | Model to use |
|
|
111
110
|
| `resolution` | `"4k"`, `"1080p"`, `"gif"` | Output resolution (default: 720p) |
|
|
112
111
|
| `aspect_ratio` | `"16:9"`, `"9:16"` | Aspect ratio — only valid for `image2video` |
|
|
113
112
|
| `image_urls` | array of strings | Reference image URLs — for `image2video` (up to 2) or `ingredients2video` (up to 3) |
|
|
114
113
|
| `video_id` | string | Video to upscale — only for `get1080p` |
|
|
115
114
|
| `translation` | `true` / `false` | Auto-translate prompt to English (default: false) |
|
|
116
115
|
|
|
117
|
-
## Post-Generation Endpoints
|
|
118
|
-
|
|
119
|
-
After generating a video, use these endpoints to further process it:
|
|
120
|
-
|
|
121
|
-
### Upsample (`POST /veo/upsample`)
|
|
122
|
-
|
|
123
|
-
Upscale a generated video to 1080p, 4K, or convert to GIF.
|
|
124
|
-
|
|
125
|
-
```json
|
|
126
|
-
POST /veo/upsample
|
|
127
|
-
{
|
|
128
|
-
"video_id": "your-video-id",
|
|
129
|
-
"action": "4k"
|
|
130
|
-
}
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
| Parameter | Values | Description |
|
|
134
|
-
|-----------|--------|-------------|
|
|
135
|
-
| `video_id` | string | Task ID from `/veo/videos`, `/veo/extend`, `/veo/reshoot`, or `/veo/objects` |
|
|
136
|
-
| `action` | `"1080p"`, `"4k"`, `"gif"` | Upsample target |
|
|
137
|
-
|
|
138
|
-
### Extend (`POST /veo/extend`)
|
|
139
|
-
|
|
140
|
-
Continue an existing video — AI auto-generates the next segment.
|
|
141
|
-
|
|
142
|
-
```json
|
|
143
|
-
POST /veo/extend
|
|
144
|
-
{
|
|
145
|
-
"video_id": "your-video-id",
|
|
146
|
-
"model": "veo31-fast",
|
|
147
|
-
"prompt": "the camera slowly zooms out"
|
|
148
|
-
}
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
| Parameter | Values | Description |
|
|
152
|
-
|-----------|--------|-------------|
|
|
153
|
-
| `video_id` | string | Task ID from `/veo/videos` or a prior `/veo/extend` |
|
|
154
|
-
| `model` | `"veo31-fast"`, `"veo31"` | Only Veo 3.1 series is supported |
|
|
155
|
-
| `prompt` | string | Optional: guides the extended segment |
|
|
156
|
-
|
|
157
|
-
### Reshoot (`POST /veo/reshoot`)
|
|
158
|
-
|
|
159
|
-
Re-render a video keeping the same content but applying new camera motion.
|
|
160
|
-
|
|
161
|
-
```json
|
|
162
|
-
POST /veo/reshoot
|
|
163
|
-
{
|
|
164
|
-
"video_id": "your-video-id",
|
|
165
|
-
"motion_type": "LEFT_TO_RIGHT"
|
|
166
|
-
}
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
| Parameter | Values | Description |
|
|
170
|
-
|-----------|--------|-------------|
|
|
171
|
-
| `video_id` | string | Task ID from `/veo/videos` (cannot use `/veo/extend` output) |
|
|
172
|
-
| `motion_type` | see table below | Camera motion to apply |
|
|
173
|
-
|
|
174
|
-
**`motion_type` values:**
|
|
175
|
-
`STATIONARY`, `STATIONARY_UP`, `STATIONARY_DOWN`, `STATIONARY_LEFT`, `STATIONARY_RIGHT`, `STATIONARY_DOLLY_IN_ZOOM_OUT`, `STATIONARY_DOLLY_OUT_ZOOM_IN`, `UP`, `DOWN`, `LEFT_TO_RIGHT`, `RIGHT_TO_LEFT`, `FORWARD`, `BACKWARD`, `DOLLY_IN_ZOOM_OUT`, `DOLLY_OUT_ZOOM_IN`
|
|
176
|
-
|
|
177
|
-
### Objects (`POST /veo/objects`)
|
|
178
|
-
|
|
179
|
-
Insert or remove objects in a video using mask-based inpainting.
|
|
180
|
-
|
|
181
|
-
```json
|
|
182
|
-
POST /veo/objects
|
|
183
|
-
{
|
|
184
|
-
"video_id": "your-video-id",
|
|
185
|
-
"action": "insert",
|
|
186
|
-
"prompt": "add a flying bird"
|
|
187
|
-
}
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
```json
|
|
191
|
-
POST /veo/objects
|
|
192
|
-
{
|
|
193
|
-
"video_id": "your-video-id",
|
|
194
|
-
"action": "remove",
|
|
195
|
-
"image_mask": "https://example.com/mask.jpg"
|
|
196
|
-
}
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
| Parameter | Values | Description |
|
|
200
|
-
|-----------|--------|-------------|
|
|
201
|
-
| `video_id` | string | Task ID (cannot use `/veo/extend` output) |
|
|
202
|
-
| `action` | `"insert"`, `"remove"` | Operation type |
|
|
203
|
-
| `prompt` | string | Required for `insert`; optional for `remove` |
|
|
204
|
-
| `image_mask` | string | URL or base64 JPEG — white pixels = target region. Required for `remove`; optional for `insert` |
|
|
205
|
-
|
|
206
116
|
## Gotchas
|
|
207
117
|
|
|
208
|
-
- Veo 3 and 3.1 models generate **native audio**
|
|
118
|
+
- Veo 3 and 3.1 models generate **native audio**
|
|
209
119
|
- The `get1080p` action uses `video_id` (from a prior generation), not a URL
|
|
210
120
|
- `aspect_ratio` is **only valid** for the `image2video` action
|
|
211
121
|
- `image_urls` accepts an array — up to 2 images for `image2video`, up to 3 for `ingredients2video`
|
|
@@ -214,6 +124,5 @@ POST /veo/objects
|
|
|
214
124
|
- `translation: true` auto-translates Chinese or other non-English prompts before sending to Veo
|
|
215
125
|
- Task polling uses `id` (not `task_id`) in the `/veo/tasks` request body
|
|
216
126
|
- Task states use `"succeeded"` (not "completed") — check for this value when polling
|
|
217
|
-
- `/veo/extend` output **cannot** be used as input for `/veo/reshoot` or `/veo/objects`
|
|
218
127
|
|
|
219
128
|
> **MCP:** `pip install mcp-veo` | Hosted: `https://veo.mcp.acedata.cloud/mcp` | See [all MCP servers](../_shared/mcp-servers.md)
|
|
@@ -106,9 +106,10 @@ POST /webextrator/tasks
|
|
|
106
106
|
| `wait_for_selector` | No | CSS selector to wait for before ready |
|
|
107
107
|
| `block_resources` | No | Drop `image`/`font`/`media`/`stylesheet`/`xhr`/`fetch` |
|
|
108
108
|
| `headers` | No | Extra request headers for the target site |
|
|
109
|
+
| `user_agent` | No | Override the browser User-Agent |
|
|
109
110
|
| `cookies` | No | Cookies to install before navigation |
|
|
110
|
-
| `
|
|
111
|
-
| `callback_url` | No | Posted the final envelope when
|
|
111
|
+
| `async` | No | `true` submits without blocking; poll `/webextrator/tasks` for the result |
|
|
112
|
+
| `callback_url` | No | Posted the final envelope when running asynchronously |
|
|
112
113
|
| `bypass_cache` | No | Skip the Redis result cache for this request |
|
|
113
114
|
| `cache_ttl_seconds` | No | Override cache TTL; `0` disables caching |
|
|
114
115
|
|