
Youtube Video Generation
- 263 installs
- 28 repo stars
- Updated April 21, 2026
- eachlabs/skills
Produce YouTube-ready scripts, scenes, thumbnails, and assembled videos to publish channel content, promos, or tutorials without a full production crew.
About
Builds YouTube-oriented video assets end to end—structuring narratives, generating visual sequences, and packaging outputs formatted for upload, SEO-friendly titles, and channel growth campaigns.
- YouTube video assembly
- script-to-scene flow
- thumbnail concepts
- channel promos
- tutorial drafts
Youtube Video Generation by the numbers
- 263 all-time installs (skills.sh)
- Ranked #546 of 1,335 Generative Media skills by installs in the Skillselion catalog
- Data as of Aug 1, 2026 (Skillselion catalog sync)
npx skills add https://github.com/eachlabs/skills --skill youtube-video-generationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 263 |
|---|---|
| repo stars | ★ 28 |
| Last updated | April 21, 2026 |
| Repository | eachlabs/skills ↗ |
What it does
Produce YouTube-ready scripts, scenes, thumbnails, and assembled videos to publish channel content, promos, or tutorials without a full production crew.
Files
YouTube Video Generation
Generate engaging YouTube content using each::sense. This skill creates videos optimized for YouTube's various formats including long-form videos, Shorts, and thumbnails.
Features
- Faceless Videos: AI-generated content without on-camera presence
- YouTube Shorts: Vertical 9:16 content up to 3 minutes
- Explainer Videos: Educational content with visual aids
- Product Reviews: Showcase and review products with AI visuals
- Tutorials: Step-by-step how-to content
- News Summaries: Quick news recap videos
- Compilations: Curated content collections
- Gaming Highlights: Gaming clip compilations
- ASMR/Relaxation: Ambient and calming content
- Channel Branding: Intros, outros, and thumbnails
Quick Start
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 30-second faceless YouTube video about the benefits of meditation, with calming visuals and text overlays"}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'YouTube Video Formats & Sizes
| Format | Aspect Ratio | Resolution | Max Duration | Use Case |
|---|---|---|---|---|
| Long-form Video | 16:9 | 1920x1080 | Unlimited | Standard YouTube videos |
| YouTube Shorts | 9:16 | 1080x1920 | 3 minutes | Short-form vertical content |
| Thumbnail | 16:9 | 1280x720 | N/A | Video thumbnail image |
Use Case Examples
1. Faceless YouTube Video Generation
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 60-second faceless YouTube video about 5 interesting facts about space. Use stunning space imagery, smooth transitions, and animated text overlays for each fact. Add a cinematic orchestral background music feel. 16:9 aspect ratio at 1920x1080."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'2. YouTube Shorts from Script
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a YouTube Short (9:16, 1080x1920) from this script: \"Did you know that honey never spoils? Archaeologists found 3000-year-old honey in Egyptian tombs that was still edible!\" Use eye-catching visuals of honey, ancient Egypt, and include bold captions. Make it attention-grabbing for the first 2 seconds."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'3. Explainer/Educational Video
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 2-minute educational explainer video about how photosynthesis works. Use animated diagrams, infographics, and step-by-step visualizations. Include a friendly voiceover style with clear explanations. 16:9 at 1920x1080. Target audience: middle school students."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'4. Product Review Video
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 90-second product review video for wireless noise-canceling headphones. Show the product from multiple angles, highlight key features (battery life, noise cancellation, comfort), include pros and cons sections with graphics, and end with a rating. 16:9 at 1920x1080, modern tech review style."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'5. Tutorial/How-To Video
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a step-by-step tutorial video on how to make the perfect pour-over coffee. Include numbered steps, close-up shots of equipment, water temperature graphics, timing indicators, and brewing tips. 16:9 at 1920x1080. Duration: 3 minutes. Clean, minimalist aesthetic."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'6. News Summary Video
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 60-second news summary video template for a tech news channel. Include animated lower thirds, headline graphics, transition effects, and space for B-roll footage. Professional news broadcast style with modern graphics. 16:9 at 1920x1080. Blue and white color scheme."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'7. Compilation Video
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 2-minute satisfying compilation video. Include various satisfying visuals: slime being pressed, perfect cake cutting, kinetic sand, soap cutting, and paint mixing. Smooth transitions between clips, no text overlays, relaxing ambient music vibe. 16:9 at 1920x1080."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'8. Gaming Highlight Video
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 45-second gaming highlight intro/template video. Energetic style with glitch effects, neon colors, dynamic transitions, and space for gameplay clips. Include animated subscribe button, social media handles placeholder, and channel logo placement. 16:9 at 1920x1080. EDM/trap music energy."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'9. ASMR/Relaxation Video
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 3-minute relaxation video for sleep and meditation. Slow-moving visuals of a peaceful forest with gentle rain, soft fog drifting through trees, and occasional wildlife. Very slow, calming transitions. No text, no sudden movements. 16:9 at 1920x1080. Ambient nature sounds."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'10. Channel Intro/Outro Generation
# Create channel intro
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 5-second YouTube channel intro for a cooking channel called \"Kitchen Creations\". Animated logo reveal with steam/smoke effects, wooden textures, warm colors. Include a brief jingle spot. Professional but inviting. 16:9 at 1920x1080."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "cooking-channel-branding"
}'
# Create matching outro (same session for consistency)
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Now create a matching 10-second outro for the same channel. Include animated end screen with subscribe button, two video placeholders for suggested videos, and social media icons. Match the style and colors of the intro we just created."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "cooking-channel-branding"
}'Best Practices
Long-form Videos (16:9)
- Hook viewers early: First 5-10 seconds are critical for retention
- Consistent pacing: Maintain visual interest with scene changes every 5-10 seconds
- Clear structure: Use visual chapters and segment markers
- End screens: Design for YouTube's end screen overlay (last 20 seconds)
- Thumbnails: Create compelling 1280x720 thumbnails that stand out
YouTube Shorts (9:16)
- Vertical optimization: Design for full-screen mobile viewing
- Instant hook: Capture attention in the first 1-2 seconds
- Loop-friendly: Create seamless loops when possible
- Bold text: Use large, readable captions for sound-off viewing
- Keep it snappy: Even though 3 minutes is allowed, 30-60 seconds often performs best
Thumbnails
- High contrast: Use colors that pop against YouTube's white/dark UI
- Readable text: Limit to 3-5 words maximum
- Faces work: Expressive faces increase click-through rates
- Consistent branding: Maintain channel aesthetic across thumbnails
Prompt Tips for YouTube Videos
When creating YouTube content, include these details in your prompt:
1. Format: Specify long-form (16:9) or Shorts (9:16) 2. Resolution: 1920x1080 for videos, 1280x720 for thumbnails 3. Duration: Be specific about video length 4. Style: Describe the visual aesthetic (cinematic, minimal, energetic, etc.) 5. Content Type: Faceless, tutorial, review, compilation, etc. 6. Target Audience: Who is this video for? 7. Text/Captions: Whether to include text overlays 8. Music/Mood: Describe the audio atmosphere
Example Prompt Structure
"Create a [duration] [format] YouTube [video type] about [topic].
Include [visual elements] with [style/aesthetic].
Target audience: [demographic].
[Additional requirements like text overlays, music style, transitions, etc.]
Resolution: [1920x1080 or 1080x1920]"Mode Selection
Ask your users before generating:
"Do you want fast & cheap, or high quality?"
| Mode | Best For | Speed | Quality |
|---|---|---|---|
max | Final videos, published content, high production value | Slower | Highest |
eco | Quick drafts, concept testing, storyboard visualization | Faster | Good |
Multi-Turn Creative Iteration
Use session_id to iterate on video content:
# Initial video concept
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 30-second YouTube Short about morning productivity tips"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "productivity-short-001"
}'
# Iterate based on feedback
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Make the transitions faster and add more energetic text animations. Also add a stronger hook in the first 2 seconds."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "productivity-short-001"
}'
# Create thumbnail for the video
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a thumbnail for this video at 1280x720. Make it eye-catching with bold text saying \"5 AM ROUTINE\" and show a sunrise with productivity imagery."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "productivity-short-001"
}'Content Series Generation
Generate consistent content for a video series:
# Episode 1
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create episode 1 of a \"World Mysteries\" series - focus on the Bermuda Triangle. 2 minutes, dramatic documentary style, 16:9 at 1920x1080."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "world-mysteries-series",
"mode": "max"
}'
# Episode 2 (same session for style consistency)
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create episode 2 about Stonehenge. Keep the same visual style, intro, and format as episode 1."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "world-mysteries-series",
"mode": "max"
}'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/long video generation | Set client timeout to minimum 10 minutes |
Related Skills
each-sense- Core API documentationmeta-ad-creative-generation- Meta/Facebook ad creativestiktok-ad-creative-generation- TikTok ad creativesvideo-generation- General video generation
SSE Event Reference
Detailed documentation for all Server-Sent Events (SSE) returned by the each::sense /v1/chat/completions endpoint.
Event Format
Events are wrapped in OpenAI chat.completion.chunk format with an eachlabs extension field:
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","choices":[{"delta":{"content":""}}],"eachlabs":{"type":"event_type",...}}\n\nStream ends with:
data: [DONE]\n\n---
Event Types (18 Total)
thinking_delta
AI reasoning streamed in real-time. Use this to show users what the AI is thinking.
{
"type": "thinking_delta",
"content": "Let me find the best model for portrait generation..."
}| Field | Type | Description |
|---|---|---|
content | string | Incremental thinking text |
---
text_response
Assistant message content (explanations, answers, plans).
{
"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 |
---
status
Current operation being executed. Shows tool usage and parameters.
{
"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) |
---
tool_call
Details of a tool being called. Useful for debugging and transparency.
{
"type": "tool_call",
"name": "execute_model",
"input": {
"model_name": "flux-2-max",
"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.
{
"type": "message",
"content": "Your video is being processed. This typically takes 2-3 minutes."
}| Field | Type | Description |
|---|---|---|
content | string | Message content |
---
progress
Progress update with percentage completion.
{
"type": "progress",
"message": "Generating image...",
"percent": 65
}| Field | Type | Description |
|---|---|---|
message | string | Progress description |
percent | number | Completion percentage |
---
generation_response
Generated media URL (image, video, audio). This is the primary output event.
{
"type": "generation_response",
"url": "https://storage.eachlabs.ai/outputs/abc123.png",
"generations": ["https://storage.eachlabs.ai/outputs/abc123.png"],
"model": "flux-2-max",
"execution_time_ms": 8500
}| Field | Type | Description |
|---|---|---|
url | string | Primary output URL |
generations | array | All generated URLs |
model | string | Model used for generation |
execution_time_ms | number | Processing time in milliseconds |
---
clarification_needed
AI needs more information to proceed. Present options to the user.
{
"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.",
"requires_response": true
}| 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 |
requires_response | boolean | Whether a response is required to proceed |
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.
{
"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.
{
"type": "web_search_citations",
"citations": [
{"title": "AI Video Comparison", "url": "https://example.com/ai-video", "snippet": "..."}
]
}| Field | Type | Description |
|---|---|---|
citations | array | Array of objects with title, url, snippet |
---
workflow_created
New workflow was created for complex multi-step generation.
{
"type": "workflow_created",
"workflow_id": "wf_abc123",
"version_id": "v1",
"steps_count": 5
}| Field | Type | Description |
|---|---|---|
workflow_id | string | Unique workflow identifier |
version_id | string | Workflow version |
steps_count | number | Number of steps in workflow |
---
workflow_fetched
Existing workflow was loaded (when workflow_id is provided in request).
{
"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.
{
"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.
{
"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.
{
"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.
{
"type": "execution_progress",
"step_id": "step2",
"completed_steps": 2,
"total_steps": 5
}| Field | Type | Description |
|---|---|---|
step_id | string | Current step identifier |
completed_steps | number | Steps completed so far |
total_steps | number | Total steps in workflow |
---
execution_completed
Workflow execution finished.
{
"type": "execution_completed",
"execution_id": "exec_xyz789",
"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"
},
"total_time_ms": 45000
}| Field | Type | Description |
|---|---|---|
execution_id | string | Execution identifier |
output | string | Final output URL |
all_outputs | object | All step outputs keyed by step_id |
total_time_ms | number | Total execution time in milliseconds |
---
complete
Final event with summary. Always sent when stream completes.
{
"type": "complete",
"task_id": "chat_1708345678901",
"status": "ok",
"generations": ["https://storage.eachlabs.ai/outputs/abc123.png"],
"model": "flux-2-max"
}| Field | Type | Description |
|---|---|---|
task_id | string | Unique task identifier |
status | string | Final status (ok, error, clarification_needed) |
generations | array | All generated output URLs |
model | string | Primary model used |
Status values:
ok- Completed successfullyclarification_needed- Waiting for user clarificationerror- An error occurred
---
error
An error occurred during processing.
{
"type": "error",
"message": "Failed to generate image: Invalid aspect ratio",
"error_code": "INVALID_INPUT",
"details": {}
}| Field | Type | Description |
|---|---|---|
message | string | Error message |
error_code | string | Error code identifier |
details | object | Additional error details |
---
Event Flow Examples
Simple Image Generation
thinking_delta → "I'll create a beautiful portrait..."
status → "Searching for models..."
status → "Getting model details..."
text_response → "Here's your generated image..."
generation_response → {url: "https://...", model: "flux-2-max", execution_time_ms: 8500}
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: "clarification_needed"}
[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: {...}, total_time_ms: 45000}
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: [{title, url, snippet}, ...]}
text_response → "Based on current information..."
complete → {status: "ok"}
[DONE]