Back to skills
SkillHub ClubAnalyze Data & AIFull StackData / AI

nft-art-generation

Generate NFT artwork using each::sense AI. Create PFP collections, generative art, 1/1 pieces, pixel art, 3D renders, animated NFTs, and trait-based characters for Web3 projects.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
3,075
Hot score
99
Updated
March 20, 2026
Overall rating
C4.0
Composite score
4.0
Best-practice grade
C65.6

Install command

npx @skill-hub/cli install openclaw-skills-nft-art-generation

Repository

openclaw/skills

Skill path: skills/eftalyurtseven/nft-art-generation

Generate NFT artwork using each::sense AI. Create PFP collections, generative art, 1/1 pieces, pixel art, 3D renders, animated NFTs, and trait-based characters for Web3 projects.

Open repository

Best for

Primary workflow: Analyze Data & AI.

Technical facets: Full Stack, Data / AI.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: openclaw.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install nft-art-generation into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/openclaw/skills before adding nft-art-generation to shared team environments
  • Use nft-art-generation for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: nft-art-generation
description: Generate NFT artwork using each::sense AI. Create PFP collections, generative art, 1/1 pieces, pixel art, 3D renders, animated NFTs, and trait-based characters for Web3 projects.
metadata:
  author: eachlabs
  version: "1.0"
---

# NFT Art Generation

Generate stunning NFT artwork using each::sense. This skill creates images and videos optimized for NFT collections, marketplaces, and Web3 projects.

## Features

- **PFP Collections**: 10K style profile picture collections with consistent traits
- **Generative Art**: Algorithm-inspired abstract and geometric pieces
- **1/1 Unique Artwork**: High-quality single edition masterpieces
- **Pixel Art**: Retro-style pixelated NFT artwork
- **3D NFTs**: Rendered 3D characters and objects
- **Animated NFTs**: GIF and video NFTs with motion
- **AI Art Collections**: Distinctive AI-generated art series
- **Trait-Based Characters**: Characters with combinable attributes

## Quick Start

```bash
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create a PFP NFT of an ape character with cyberpunk style, neon colors, wearing futuristic sunglasses and a hoodie, dark background",
    "mode": "max"
  }'
```

## NFT Art Formats & Sizes

| Type | Aspect Ratio | Recommended Size | Use Case |
|------|--------------|------------------|----------|
| PFP Collection | 1:1 | 1024x1024 or 2048x2048 | Profile pictures, avatars |
| Generative Art | 1:1 | 2048x2048 or 4096x4096 | Art pieces, gallery display |
| 1/1 Artwork | Various | 2048x2048+ | High-value single editions |
| Pixel Art | 1:1 | 32x32 to 512x512 | Retro collections |
| 3D Render | 1:1 or 4:3 | 2048x2048 | 3D character NFTs |
| Animated GIF | 1:1 | 1024x1024 | Motion NFTs |
| Video NFT | 1:1 or 16:9 | 1080x1080 or 1920x1080 | Premium animated pieces |

## Use Case Examples

### 1. PFP Collection Style (10K Style)

```bash
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create a 1:1 PFP NFT in the style of a 10K collection. An anthropomorphic fox character with purple fur, wearing a gold chain necklace and a backwards cap. Solid gradient background from teal to purple. Clean digital art style, bold outlines, vibrant colors.",
    "mode": "max"
  }'
```

### 2. Generative Art Piece

```bash
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create a generative art piece inspired by algorithmic patterns. Abstract flowing lines and geometric shapes, inspired by Tyler Hobbs and Dmitri Cherniak. Use a limited color palette of deep blues, whites, and gold accents. Mathematical precision with organic flow. 1:1 aspect ratio.",
    "mode": "max"
  }'
```

### 3. 1/1 Unique Artwork

```bash
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create a high-quality 1/1 NFT artwork. A surreal dreamscape with a floating island in a cosmic void, ancient ruins overgrown with bioluminescent plants, multiple moons in the sky, ethereal atmosphere. Ultra detailed, cinematic lighting, museum-quality digital painting.",
    "mode": "max"
  }'
```

### 4. Pixel Art NFT

```bash
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create a pixel art NFT character. A retro-style warrior knight with glowing sword, 32x32 pixel style scaled up cleanly. Limited color palette, nostalgic 8-bit aesthetic, solid color background. CryptoPunks meets fantasy RPG vibe.",
    "mode": "max"
  }'
```

### 5. 3D NFT Artwork

```bash
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create a 3D rendered NFT character. A stylized robot head with chrome finish, glowing LED eyes, intricate mechanical details, floating in a dark studio environment with dramatic rim lighting. Octane render quality, subsurface scattering, 1:1 aspect ratio.",
    "mode": "max"
  }'
```

### 6. Animated NFT (GIF/Video)

```bash
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create an animated NFT, 3-5 seconds loop. A mystical crystal orb with swirling energy inside, particles floating around it, pulsing glow effect. Seamless loop, hypnotic motion, dark background with subtle ambient particles. 1:1 square format.",
    "mode": "max"
  }'
```

### 7. AI Art Collection

```bash
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create an AI art piece for a collection exploring digital consciousness. Abstract portrait merging human and digital elements, data streams flowing through a face, glitch art effects, neural network visualization overlay. Vaporwave color palette with pink, cyan, and purple. Unique artistic interpretation.",
    "mode": "max"
  }'
```

### 8. Trait-Based Character Generation

```bash
# First character with base traits
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create a trait-based NFT character for a collection. Base: Cat humanoid. Traits: Background=Sunset Orange, Fur=Calico pattern, Eyes=Laser red, Accessory=Pirate eyepatch, Clothing=Leather jacket, Headwear=None. Consistent flat illustration style suitable for a 10K PFP collection.",
    "session_id": "nft-collection-cats-001"
  }'

# Second character variation (same session for consistency)
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create another character with different traits. Same style as before. Traits: Background=Deep Space, Fur=White, Eyes=Diamond blue, Accessory=Monocle, Clothing=Tuxedo, Headwear=Top hat. Maintain the exact same art style.",
    "session_id": "nft-collection-cats-001"
  }'
```

### 9. Abstract Generative Art

```bash
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create an abstract generative art NFT. Inspired by Art Blocks aesthetic - recursive geometric patterns, flow fields, mathematical beauty. Colors emerge from chaos into order. Black background with vibrant color accents in orange, pink, and electric blue. Crisp vector-like precision. 1:1 format.",
    "mode": "max"
  }'
```

### 10. Cyberpunk/Futuristic NFT

```bash
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create a cyberpunk NFT artwork. A futuristic street samurai character with cybernetic augmentations, neon-lit visor, holographic HUD elements, rain-soaked environment reflected on surfaces. Blade Runner meets anime aesthetic. Neon pink and cyan color scheme, dark atmospheric mood. Premium collectible quality.",
    "mode": "max"
  }'
```

## Best Practices

### Collection Consistency
- **Art Style**: Maintain consistent style across collection pieces
- **Color Palette**: Define and stick to a cohesive palette
- **Trait System**: Plan traits with clear categories (background, body, accessories, etc.)
- **Resolution**: Use consistent resolution across all pieces
- **Session ID**: Use same session_id for related pieces to maintain consistency

### Technical Quality
- **High Resolution**: Generate at 2048x2048+ for quality display
- **Clean Edges**: Request clean outlines for PFP collections
- **Proper Format**: Use PNG for static, MP4/GIF for animated
- **Marketplace Ready**: Ensure output meets OpenSea, Foundation, etc. requirements

### NFT-Specific Considerations
- **Rarity Planning**: Design rare traits distinctively
- **Scalability**: Ensure art looks good at small sizes (profile thumbnails)
- **Uniqueness**: Each piece should be visually distinct
- **Metadata Ready**: Generate with clear trait descriptions

## Prompt Tips for NFT Art

When creating NFT artwork, include these details in your prompt:

1. **Collection Type**: PFP, generative, 1/1, pixel art, etc.
2. **Art Style**: Describe the visual style (flat, 3D, pixel, painterly)
3. **Subject**: What is the main subject (character, abstract, landscape)
4. **Traits/Attributes**: List specific features if trait-based
5. **Color Palette**: Specify colors or mood
6. **Background**: Solid color, gradient, or detailed
7. **Quality Level**: Mention if premium/museum quality needed

### Example Prompt Structure

```
"Create a [collection type] NFT.
[Subject description] with [traits/attributes].
Style: [art style].
Colors: [color palette].
Background: [background description].
[Additional quality/format requirements]"
```

## Mode Selection

Ask your users before generating:

**"Do you want fast & cheap, or high quality?"**

| Mode | Best For | Speed | Quality |
|------|----------|-------|---------|
| `max` | Final collection pieces, 1/1 artwork, premium drops | Slower | Highest |
| `eco` | Concept exploration, trait testing, draft iterations | Faster | Good |

## Multi-Turn Collection Development

Use `session_id` to develop collections iteratively:

```bash
# Establish collection style
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create a base character for my NFT collection. A stylized bear with streetwear fashion, bold flat colors, minimalist background.",
    "session_id": "bear-nft-project"
  }'

# Request trait variation
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create the same bear character but with different accessories - add sunglasses and a gold chain. Keep the exact same art style.",
    "session_id": "bear-nft-project"
  }'

# Request rare variant
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create a rare legendary variant - same bear but with cosmic/galaxy fur pattern, glowing eyes, and a crown. This is the 1/1 rare for the collection.",
    "session_id": "bear-nft-project"
  }'
```

## Batch Generation for Collections

Generate multiple variations efficiently:

```bash
# Variation 1 - Common trait
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create PFP NFT: Robot character, silver body, blue LED eyes, plain gray background, minimal style",
    "mode": "eco"
  }'

# Variation 2 - Uncommon trait
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create PFP NFT: Robot character, gold body, green LED eyes, gradient purple background, minimal style",
    "mode": "eco"
  }'

# Variation 3 - Rare trait
curl -X POST https://sense.eachlabs.run/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -H "Accept: text/event-stream" \
  -d '{
    "message": "Create PFP NFT: Robot character, holographic rainbow body, laser red eyes, cosmic space background, minimal style",
    "mode": "eco"
  }'
```

## Error Handling

| Error | Cause | Solution |
|-------|-------|----------|
| `Failed to create prediction: HTTP 422` | Insufficient balance | Top up at eachlabs.ai |
| Content policy violation | Prohibited content | Adjust prompt to comply with content policies |
| Timeout | Complex generation | Set client timeout to minimum 10 minutes |
| Style inconsistency | New session | Use same `session_id` for collection pieces |

## Related Skills

- `each-sense` - Core API documentation
- `product-photo-generation` - Product imagery
- `meta-ad-creative-generation` - Social media creatives


---

## Skill Companion Files

> Additional files collected from the skill directory layout.

### _meta.json

```json
{
  "owner": "eftalyurtseven",
  "slug": "nft-art-generation",
  "displayName": "Nft Art Generation",
  "latest": {
    "version": "1.0.0",
    "publishedAt": 1772584182235,
    "commit": "https://github.com/openclaw/skills/commit/281aad402e149c5f5842053dc52b32b2ce7880c0"
  },
  "history": []
}

```

### references/SSE-EVENTS.md

```markdown
# SSE Event Reference

Detailed documentation for all Server-Sent Events (SSE) returned by the each::sense `/chat` endpoint.

## Event Format

Each event follows this format:
```
data: {"type": "event_type", ...fields}\n\n
```

Stream ends with:
```
data: [DONE]\n\n
```

---

## Event Types

### thinking_delta

Claude's reasoning as it streams in real-time. Use this to show users what the AI is thinking.

```json
{
  "type": "thinking_delta",
  "content": "Let me find the best model for portrait generation..."
}
```

| Field | Type | Description |
|-------|------|-------------|
| `content` | string | Incremental thinking text |

---

### status

Current operation being executed. Shows tool usage and parameters.

```json
{
  "type": "status",
  "message": "Searching for image generation models...",
  "tool_name": "search_models",
  "parameters": {"use_case": "text to image portrait"}
}
```

| Field | Type | Description |
|-------|------|-------------|
| `message` | string | Human-readable status message |
| `tool_name` | string | Internal tool being used |
| `parameters` | object | Tool parameters (optional) |

---

### text_response

Text content from the AI (explanations, answers, plans).

```json
{
  "type": "text_response",
  "content": "I'll create a stunning portrait for you with cinematic lighting and a warm mood."
}
```

| Field | Type | Description |
|-------|------|-------------|
| `content` | string | Text response content |

---

### generation_response

Generated media URL (image or video). This is the primary output event.

```json
{
  "type": "generation_response",
  "url": "https://storage.eachlabs.ai/outputs/abc123.png",
  "generations": ["https://storage.eachlabs.ai/outputs/abc123.png"],
  "total": 1,
  "tool_name": "execute_model",
  "model": "nano-banana-pro"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `url` | string | Primary output URL |
| `generations` | array | All generated URLs |
| `total` | number | Total number of generations |
| `tool_name` | string | Tool that generated output |
| `model` | string | Model used for generation |

---

### clarification_needed

AI needs more information to proceed. Present options to the user.

```json
{
  "type": "clarification_needed",
  "question": "What type of edit would you like to make to this image?",
  "options": [
    "Remove the background",
    "Apply a style transfer",
    "Upscale to higher resolution",
    "Add or modify elements"
  ],
  "context": "I can see you've uploaded an image, but I need to understand what changes you'd like."
}
```

| Field | Type | Description |
|-------|------|-------------|
| `question` | string | The question to ask the user |
| `options` | array | Suggested options (can be displayed as buttons) |
| `context` | string | Additional context about the clarification |

**Handling:** Display the question and options to the user. Send their response in a follow-up request with the same `session_id`.

---

### web_search_query

Web search being executed.

```json
{
  "type": "web_search_query",
  "query": "best AI video generation models 2024",
  "recency": "month"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `query` | string | Search query |
| `recency` | string | Time filter (day, week, month, year) |

---

### web_search_citations

Citations from web search results.

```json
{
  "type": "web_search_citations",
  "citations": [
    "https://example.com/ai-video-comparison",
    "https://techblog.com/veo3-review"
  ],
  "count": 2
}
```

| Field | Type | Description |
|-------|------|-------------|
| `citations` | array | URLs of sources cited |
| `count` | number | Number of citations |

---

### workflow_created

New workflow was created for complex multi-step generation.

```json
{
  "type": "workflow_created",
  "workflow_id": "wf_abc123",
  "version_id": "v1",
  "input_schema": {
    "properties": {
      "character_description": {
        "type": "text",
        "required": true,
        "default_value": ""
      }
    }
  },
  "steps_count": 5
}
```

| Field | Type | Description |
|-------|------|-------------|
| `workflow_id` | string | Unique workflow identifier |
| `version_id` | string | Workflow version |
| `input_schema` | object | Schema for workflow inputs |
| `steps_count` | number | Number of steps in workflow |

---

### workflow_fetched

Existing workflow was loaded (when `workflow_id` is provided in request).

```json
{
  "type": "workflow_fetched",
  "workflow_name": "Product Video Generator",
  "existing_steps": 3,
  "existing_definition": {...}
}
```

| Field | Type | Description |
|-------|------|-------------|
| `workflow_name` | string | Name of the workflow |
| `existing_steps` | number | Number of existing steps |
| `existing_definition` | object | Current workflow definition |

---

### workflow_built

Workflow definition was constructed.

```json
{
  "type": "workflow_built",
  "steps_count": 4,
  "definition": {
    "version": "v1",
    "input_schema": {...},
    "steps": [...]
  }
}
```

| Field | Type | Description |
|-------|------|-------------|
| `steps_count` | number | Number of steps |
| `definition` | object | Full workflow definition |

---

### workflow_updated

Workflow was pushed to the EachLabs API.

```json
{
  "type": "workflow_updated",
  "success": true,
  "workflow_id": "wf_abc123",
  "version_id": "v1",
  "definition": {...}
}
```

| Field | Type | Description |
|-------|------|-------------|
| `success` | boolean | Whether update succeeded |
| `workflow_id` | string | Workflow identifier |
| `version_id` | string | Version identifier |
| `definition` | object | Updated definition |

---

### execution_started

Workflow execution has begun.

```json
{
  "type": "execution_started",
  "execution_id": "exec_xyz789",
  "workflow_id": "wf_abc123"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `execution_id` | string | Unique execution identifier |
| `workflow_id` | string | Workflow being executed |

---

### execution_progress

Progress update during workflow execution. Sent approximately every 5 seconds.

```json
{
  "type": "execution_progress",
  "step_id": "step2",
  "step_status": "completed",
  "output": "https://storage.eachlabs.ai/outputs/step2.png",
  "model": "nano-banana-pro",
  "completed_steps": 2,
  "total_steps": 5
}
```

| Field | Type | Description |
|-------|------|-------------|
| `step_id` | string | Current step identifier |
| `step_status` | string | Step status (running, completed, failed) |
| `output` | string | Step output URL (if available) |
| `model` | string | Model used for this step |
| `completed_steps` | number | Steps completed so far |
| `total_steps` | number | Total steps in workflow |

---

### execution_completed

Workflow execution finished successfully.

```json
{
  "type": "execution_completed",
  "execution_id": "exec_xyz789",
  "status": "completed",
  "output": "https://storage.eachlabs.ai/outputs/final.mp4",
  "all_outputs": {
    "step1": "https://storage.eachlabs.ai/outputs/step1.png",
    "step2": "https://storage.eachlabs.ai/outputs/step2.png",
    "step3": "https://storage.eachlabs.ai/outputs/final.mp4"
  }
}
```

| Field | Type | Description |
|-------|------|-------------|
| `execution_id` | string | Execution identifier |
| `status` | string | Final status (completed, failed) |
| `output` | string | Final output URL |
| `all_outputs` | object | All step outputs keyed by step_id |

---

### tool_call

Details of a tool being called. Useful for debugging and transparency.

```json
{
  "type": "tool_call",
  "name": "execute_model",
  "input": {
    "model_name": "nano-banana-pro",
    "inputs": {
      "prompt": "A beautiful woman portrait...",
      "aspect_ratio": "1:1"
    }
  }
}
```

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Tool name |
| `input` | object | Tool input parameters |

---

### message

Informational message from the agent.

```json
{
  "type": "message",
  "content": "Your video is being processed. This typically takes 2-3 minutes."
}
```

| Field | Type | Description |
|-------|------|-------------|
| `content` | string | Message content |

---

### complete

Final event with summary. Always sent when stream completes successfully.

```json
{
  "type": "complete",
  "task_id": "chat_1708345678901",
  "status": "ok",
  "tool_calls": [
    {"name": "search_models", "result": "success"},
    {"name": "get_model_details", "result": "success"},
    {"name": "execute_model", "result": "success", "model": "nano-banana-pro"}
  ],
  "generations": ["https://storage.eachlabs.ai/outputs/abc123.png"],
  "model": "nano-banana-pro"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `task_id` | string | Unique task identifier |
| `status` | string | Final status (ok, awaiting_input, error) |
| `tool_calls` | array | Summary of all tool calls |
| `generations` | array | All generated output URLs |
| `model` | string | Primary model used |

**Status values:**
- `ok` - Completed successfully
- `awaiting_input` - Waiting for user clarification
- `error` - An error occurred

---

### error

An error occurred during processing.

```json
{
  "type": "error",
  "message": "Failed to generate image: Invalid aspect ratio"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `message` | string | Error message |

---

## Event Flow Examples

### Simple Image Generation

```
thinking_delta → "I'll create a beautiful portrait..."
status → "Searching for models..."
status → "Getting model details..."
status → "Generating with nano-banana-pro..."
generation_response → {url: "https://..."}
complete → {status: "ok", generations: [...]}
[DONE]
```

### Clarification Flow

```
thinking_delta → "I see an image, but need to know what edit..."
clarification_needed → {question: "What edit?", options: [...]}
complete → {status: "awaiting_input"}
[DONE]
```

### Workflow Execution

```
thinking_delta → "Creating a multi-step workflow..."
status → "Searching for models..."
workflow_created → {workflow_id: "wf_123", steps_count: 5}
execution_started → {execution_id: "exec_456"}
execution_progress → {completed_steps: 1, total_steps: 5}
execution_progress → {completed_steps: 2, total_steps: 5}
execution_progress → {completed_steps: 3, total_steps: 5}
execution_progress → {completed_steps: 4, total_steps: 5}
execution_completed → {output: "https://...", all_outputs: {...}}
complete → {status: "ok"}
[DONE]
```

### Web Search

```
thinking_delta → "Let me search for current information..."
web_search_query → {query: "best AI models 2024"}
status → "Searching the web..."
web_search_citations → {citations: [...], count: 3}
text_response → "Based on current information..."
complete → {status: "ok"}
[DONE]
```

```

nft-art-generation | SkillHub