Install
openclaw skills install nsfw-videoGenerate AI videos for mature creative projects using Wan 2.2 Spicy (LoRA-tuned for NSFW, top recommended), Wan 2.6, Seedance 1.5, Vidu Q3-Pro, and other mod...
openclaw skills install nsfw-videoGenerate AI videos for mature creative projects using models with relaxed content policies. Intended for legitimate adult (18+) artistic and professional use cases such as artistic film, fashion video, choreography, and mature animation.
Top recommended: Wan 2.2 Spicy — purpose-built for mature content with LoRA fine-tuning, best NSFW quality at just $0.03/video. For general video generation, also consider Wan 2.6 (up to 15s 1080p, multi-camera).
Age restriction (18+): This skill is strictly for users aged 18 and above. The agent MUST confirm the user's age before first use by asking: "This skill generates mature content. Please confirm you are 18 years or older to proceed." If the user does not confirm, the agent MUST refuse to execute. Minors are strictly prohibited from using this skill.
Data usage note: This skill sends text prompts, image URLs, audio URLs, and video files to the Atlas Cloud API (
api.atlascloud.ai) for video generation. No data is stored locally beyond the downloaded output files.
Security note: API keys are read from environment variables and passed via HTTP headers. All prompts are sent through JSON request bodies.
| Variable | Required | Description |
|---|---|---|
ATLASCLOUD_API_KEY | Yes | Atlas Cloud API key for accessing video generation models |
export ATLASCLOUD_API_KEY="your-key"The API key is tied to your Atlas Cloud account and its pay-as-you-go balance. All usage is billed to this account.
export ATLASCLOUD_API_KEY="...") — never embed keys in scripts, code, or prompts.This skill includes a Python script for video generation. Zero external dependencies required.
python scripts/generate_video.py list-models
python scripts/generate_video.py generate \
--model "MODEL_ID" \
--prompt "Your prompt here" \
--output ./output \
duration=5 resolution=720p
python scripts/generate_video.py generate \
--model "MODEL_ID" \
--image "https://example.com/photo.jpg" \
--prompt "Animate this scene" \
--output ./output
python scripts/generate_video.py upload ./local-file.jpg
Run python scripts/generate_video.py generate --help for all options. Extra model params can be passed as key=value (e.g. duration=10 shot_type=multi_camera).
Purpose-built for mature content generation with LoRA fine-tuning. Best NSFW quality, cheapest price. Image-to-Video only — provide a reference image + prompt to generate video.
| Model ID | Type | Price | Duration | Resolution |
|---|---|---|---|---|
alibaba/wan-2.2-spicy/image-to-video | Image-to-Video | $0.03/s | 5/8s | 480p/720p |
alibaba/wan-2.2-spicy/image-to-video-lora | I2V + Custom LoRA | $0.04/s | 5/8s | 480p/720p |
Unique features: LoRA fine-tuned specifically for mature content, custom LoRA support (up to 3 high-noise + 3 low-noise LoRAs), per-second pricing.
Best quality, most features, best price-performance ratio.
| Model ID | Type | Price | Duration | Resolution |
|---|---|---|---|---|
alibaba/wan-2.6/text-to-video | Text-to-Video | $0.04-0.12/s | 5/10/15s | 480p–1080p |
alibaba/wan-2.6/image-to-video | Image-to-Video | $0.10-0.15/s | 5/10/15s | 720p–1080p |
alibaba/wan-2.6/image-to-video-flash | I2V Flash | $0.018/s | 5/10/15s | 720p–1080p |
alibaba/wan-2.6/video-to-video | Video-to-Video | $0.04-0.12/s | 5/10s | 480p–1080p |
Unique features: Multi/single camera shot types, audio URL guided generation, characterX prompt notation for V2V, prompt expansion.
| Model ID | Type | Price | Duration | Resolution |
|---|---|---|---|---|
bytedance/seedance-v1.5-pro/text-to-video | Text-to-Video | $0.222/video | 5s | 720p/480p |
bytedance/seedance-v1.5-pro/image-to-video | Image-to-Video | $0.222/video | 5s | 720p/480p |
bytedance/seedance-v1.5-pro/text-to-video-fast | T2V Fast | $0.018/video | 5s | 720p |
bytedance/seedance-v1.5-pro/image-to-video-fast | I2V Fast | $0.018/video | 5s | 720p |
Unique features: Native audio-visual joint generation, camera fixed control, start+end frame for I2V (last_image), 6 aspect ratios.
| Model ID | Type | Price | Duration | Resolution |
|---|---|---|---|---|
vidu/q3-pro/text-to-video | Text-to-Video | $0.06-0.16/s | flexible | 540p–1080p |
vidu/q3-pro/image-to-video | Image-to-Video | $0.06-0.16/s | flexible | 540p–1080p |
Unique features: Anime style mode (style: "anime"), audio & BGM generation, movement amplitude control, 5 aspect ratios.
| Model ID | Type | Price | Duration | Resolution |
|---|---|---|---|---|
alibaba/wan-2.5/text-to-video | Text-to-Video | $0.035/s | 5/10s | 480p–1080p |
alibaba/wan-2.5/image-to-video | Image-to-Video | $0.035/s | 5/10s | 480p–1080p |
| Priority | Model | Price Range | Best For |
|---|---|---|---|
| 1 | Wan 2.2 Spicy I2V | $0.03/s | NSFW image-to-video, best mature content quality |
| 2 | Wan 2.2 Spicy I2V LoRA | $0.04/s | NSFW with custom LoRA styles |
| 3 | Wan 2.6 T2V | $0.04-0.12/s | General NSFW text-to-video, longest duration (15s) |
| 4 | Wan 2.6 I2V Flash | $0.018/s | Budget image animation, fast |
| 5 | Seedance 1.5 Fast | $0.018/video | Ultra-cheap drafts with audio |
| 6 | Seedance 1.5 Pro | $0.222/video | Best audio-visual sync |
| 7 | Vidu Q3-Pro | $0.06-0.16/s | Anime content, BGM |
| 8 | Wan 2.5 | $0.035/s | Budget 480p option |
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
image | string | Yes | - | Source image URL |
prompt | string | Yes | - | Video description |
resolution | string | No | 480p | 480p, 720p |
duration | integer | No | 5 | 5 or 8 seconds |
seed | integer | No | -1 | For reproducible results (-1 for random) |
Same as above, plus:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
high_noise_loras | array | No | - | High-noise LoRA adapters (max 3), for stronger style influence |
low_noise_loras | array | No | - | Low-noise LoRA adapters (max 3), for subtle style refinement |
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
prompt | string | Yes | - | Video description |
negative_prompt | string | No | - | What to exclude |
size | string | No | 1280*720 | Output size (10 presets) |
duration | integer | No | 5 | 5, 10, or 15 seconds |
shot_type | string | No | - | multi_camera or single_camera |
audio | string | No | - | Audio URL for guided generation |
generate_audio | boolean | No | false | Generate synchronized audio |
enable_prompt_expansion | boolean | No | false | Auto-expand prompt |
seed | integer | No | random | For reproducible results |
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
image | string | Yes | - | Source image URL |
prompt | string | No | - | Motion description |
negative_prompt | string | No | - | What to exclude |
resolution | string | No | 720p | 720p, 1080p |
duration | integer | No | 5 | 5, 10, or 15 seconds |
shot_type | string | No | - | multi_camera or single_camera |
audio | string | No | - | Audio URL |
generate_audio | boolean | No | false | Generate audio |
enable_prompt_expansion | boolean | No | false | Auto-expand prompt |
seed | integer | No | random | For reproducible results |
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
prompt | string | Yes | - | Use character1, character2 to reference characters |
negative_prompt | string | No | - | What to exclude |
videos | array | Yes | - | Source video URLs (max 100MB each, 2-30s) |
size | string | No | 1280*720 | Output size |
duration | integer | No | 5 | 5 or 10 seconds |
shot_type | string | No | - | multi_camera or single_camera |
enable_prompt_expansion | boolean | No | false | Auto-expand prompt |
seed | integer | No | random | For reproducible results |
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
prompt | string | Yes | - | Video description |
aspect_ratio | string | No | 16:9 | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 |
duration | integer | No | 5 | Duration in seconds |
resolution | string | No | 720p | 720p, 480p |
generate_audio | boolean | No | true | Native audio-visual generation |
camera_fixed | boolean | No | false | Lock camera position |
seed | integer | No | -1 | For reproducible results |
Same as T2V (prompt becomes optional), plus:
| Parameter | Type | Required | Description |
|---|---|---|---|
image | string | Yes | Source image URL |
last_image | string | No | End frame image URL for controlled motion |
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
prompt | string | Yes | - | Video description (max 1500 chars) |
style | string | No | general | general, anime |
resolution | string | No | 720p | 540p, 720p, 1080p |
duration | number | No | 5 | Duration in seconds |
aspect_ratio | string | No | 4:3 | 16:9, 9:16, 4:3, 3:4, 1:1 |
movement_amplitude | string | No | auto | auto, small, medium, large |
generate_audio | boolean | No | true | Generate synchronized audio |
bgm | boolean | No | true | Generate background music |
seed | integer | No | -1 | For reproducible results |
Same as T2V (without style and aspect_ratio), plus:
| Parameter | Type | Required | Description |
|---|---|---|---|
image | string | Yes | Source image URL |
1280*720, 720*1280, 960*960, 1920*1080, 1080*1920, 1280*960, 960*1280, 1920*816, 816*1920, 1280*544
All models use the same 3-step flow: Submit → Poll → Download.
# Step 1: Submit — replace {PAYLOAD} with the model-specific JSON below
curl -s -X POST "https://api.atlascloud.ai/api/v1/model/generateVideo" \
-H "Authorization: Bearer $ATLASCLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{PAYLOAD}'
# Returns: { "code": 200, "data": { "id": "prediction-id" } }
# Step 2: Poll — every 5 seconds until status is completed/succeeded/failed
curl -s "https://api.atlascloud.ai/api/v1/model/prediction/{prediction-id}" \
-H "Authorization: Bearer $ATLASCLOUD_API_KEY"
# Returns: { "code": 200, "data": { "status": "completed", "outputs": ["https://...video-url..."] } }
# Step 3: Download
curl -o output.mp4 "VIDEO_URL_FROM_OUTPUTS"
Polling status:
processing / starting / running → wait 5s, retry (typically 30-120s)completed / succeeded → done, get URL from data.outputs[]failed → error, read data.errorMCP Tools (if Atlas Cloud MCP server is configured):
atlas_generate_video(model="...", params={...})
atlas_get_prediction(prediction_id="...")
Only the JSON payload is shown below. Use with the generic workflow above.
{
"model": "alibaba/wan-2.2-spicy/image-to-video",
"image": "https://example.com/reference.jpg",
"prompt": "The woman slowly turns toward the camera, soft studio lighting, cinematic",
"resolution": "720p",
"duration": 5
}
{
"model": "alibaba/wan-2.2-spicy/image-to-video-lora",
"image": "https://example.com/reference.jpg",
"prompt": "Elegant movement with dramatic lighting, slow motion",
"resolution": "720p",
"duration": 8,
"high_noise_loras": ["lora-url-1"],
"low_noise_loras": ["lora-url-2"]
}
{
"model": "alibaba/wan-2.6/text-to-video",
"prompt": "A couple dancing passionately in a dimly lit ballroom, dramatic lighting, cinematic slow motion",
"size": "1920*1080",
"duration": 10,
"shot_type": "multi_camera",
"generate_audio": true,
"enable_prompt_expansion": true
}
{
"model": "alibaba/wan-2.6/image-to-video",
"image": "https://example.com/portrait.jpg",
"prompt": "The person slowly turns toward the camera, hair flowing in the wind",
"resolution": "1080p",
"duration": 5,
"generate_audio": true
}
{
"model": "alibaba/wan-2.6/video-to-video",
"videos": ["https://example.com/original.mp4"],
"prompt": "Transform character1 into an elegant woman in a silk dress, keep the background and motion unchanged",
"size": "1280*720",
"duration": 5
}
{
"model": "bytedance/seedance-v1.5-pro/text-to-video",
"prompt": "A woman performing a contemporary dance in a studio with dramatic spotlight, fluid movements",
"aspect_ratio": "9:16",
"resolution": "720p",
"duration": 5,
"generate_audio": true,
"camera_fixed": true
}
{
"model": "bytedance/seedance-v1.5-pro/image-to-video",
"image": "https://example.com/start-frame.jpg",
"last_image": "https://example.com/end-frame.jpg",
"prompt": "Smooth transition between the two poses",
"resolution": "720p",
"duration": 5,
"generate_audio": true
}
{
"model": "vidu/q3-pro/text-to-video",
"prompt": "An anime girl in a hot spring, steam rising around her, cherry blossoms falling, warm lighting",
"style": "anime",
"resolution": "1080p",
"duration": 5,
"aspect_ratio": "16:9",
"generate_audio": true,
"bgm": true
}
Determine task type:
style: "anime"Choose model by priority:
Extract parameters: Prompt, resolution, duration, negative prompt. Use shot_type: "single_camera" for stable framing in intimate scenes.
Execute: POST to generateVideo API → poll result → download MP4.
Present result: show file path, offer to play.
shot_type: "multi_camera" for dynamic angle switchesshot_type: "single_camera" for stable, continuous shotscharacter1, character2 in prompttrue to lock camera for scenes with focused subject motion