
Image Upscaling
- 237 installs
- 28 repo stars
- Updated April 21, 2026
- eachlabs/skills
Upscale low-resolution product photos, UI assets, and marketing images to production-ready resolution without manual retouching workflows.
About
The image-upscaling skill from eachlabs/skills uses AI super-resolution to enlarge and sharpen images for SaaS, ecommerce, and content products. It targets build-stage frontend asset work where teams lack native high-resolution sources.
- AI super-resolution for photos and graphics
- Batch-ready asset pipeline for web and mobile
- Preserves detail for ecommerce and SaaS UI
- Reduces need for original high-res source files
- Fits generative media workflows in eachlabs/skills
Image Upscaling by the numbers
- 237 all-time installs (skills.sh)
- Ranked #571 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 image-upscalingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 237 |
|---|---|
| repo stars | ★ 28 |
| Last updated | April 21, 2026 |
| Repository | eachlabs/skills ↗ |
What it does
Upscale low-resolution product photos, UI assets, and marketing images to production-ready resolution without manual retouching workflows.
Files
Image Upscaling
Upscale and enhance images using each::sense. This skill provides AI-powered image upscaling from 2x to 16x resolution with intelligent enhancement options for faces, noise reduction, and detail preservation.
Features
- 2x Upscaling: Quick enhancement for web images and social media
- 4x Upscaling: High-quality output for print materials
- 8x/16x Upscaling: Large format displays, billboards, posters
- Face Enhancement: Intelligent facial detail restoration during upscale
- Noise Reduction: Clean up grainy or compressed images while upscaling
- Old Photo Restoration: Revive vintage and damaged photographs
- AI Art Enhancement: Preserve and enhance AI-generated artwork details
- Product Image Enhancement: E-commerce ready high-resolution product shots
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": "Upscale this image 4x for print quality"}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-image.jpg"],
"mode": "max"
}'Upscaling Scale Factors
| Scale | Output Size (from 1024px) | Best Use Case |
|---|---|---|
| 2x | 2048px | Web images, social media, thumbnails |
| 4x | 4096px | Print materials, high-res displays |
| 8x | 8192px | Large format prints, posters |
| 16x | 16384px | Billboards, exhibition displays |
Use Case Examples
1. 2x Upscaling for Web Images
Perfect for improving image quality for websites, social media posts, and digital marketing.
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": "Upscale this web image 2x. Optimize for fast loading while improving sharpness and clarity. The image will be used on a website hero section."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/website-hero.jpg"],
"mode": "eco"
}'2. 4x Upscaling for Print
High-quality upscaling for brochures, flyers, magazines, and other print materials requiring 300 DPI.
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": "Upscale this image 4x for print production. I need 300 DPI quality for a magazine spread. Preserve all fine details and ensure crisp edges."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/magazine-photo.jpg"],
"mode": "max"
}'3. 8x/16x Upscaling for Large Format
Extreme upscaling for billboards, trade show displays, and wall-sized prints.
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": "Upscale this image 8x for a large format banner print. The final output will be displayed on a 10 foot wide trade show backdrop. Maximize detail enhancement and ensure no artifacts."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/tradeshow-banner.jpg"],
"mode": "max"
}'4. Face Enhancement During Upscale
Intelligent facial restoration that enhances eyes, skin texture, and facial features while upscaling portraits.
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": "Upscale this portrait 4x with face enhancement enabled. Restore facial details, enhance eyes, improve skin texture while keeping it natural. This is a headshot photo."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/portrait-headshot.jpg"],
"mode": "max"
}'5. Noise Reduction + Upscale
Clean up grainy, compressed, or low-quality images while increasing resolution.
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": "Upscale this noisy low-light photo 4x. Apply aggressive noise reduction while preserving important details. The image was taken in low light conditions and has visible grain and compression artifacts."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/low-light-photo.jpg"],
"mode": "max"
}'6. Old Photo Upscaling
Restore and upscale vintage photographs, old family photos, and historical images.
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": "Upscale and restore this old family photograph from the 1970s. The image is faded, slightly damaged, and low resolution. Enhance to 4x while restoring colors, fixing damage, and improving clarity. Preserve the vintage aesthetic."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/old-family-photo.jpg"],
"mode": "max"
}'7. AI Art Upscaling
Enhance AI-generated artwork while preserving artistic style and avoiding artifacts.
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": "Upscale this AI-generated artwork 4x for print. Preserve the artistic style and enhance fine details. This is digital art created by an AI image generator - avoid adding unwanted textures or changing the artistic style."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/ai-artwork.png"],
"mode": "max"
}'8. Product Image Upscaling
E-commerce optimized upscaling for product photography with detail enhancement.
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": "Upscale this product photo 4x for e-commerce use. Enhance product details, improve sharpness on edges and textures. The image is of a leather handbag and needs to show material texture clearly for zoom functionality."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/product-handbag.jpg"],
"mode": "max"
}'9. Video Frame Upscaling
Enhance individual video frames or thumbnails extracted from video content.
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": "Upscale this video frame 4x. This is a still frame extracted from 1080p video footage. Enhance it to 4K quality while reducing compression artifacts and maintaining natural motion blur where present."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/video-frame.jpg"],
"mode": "max"
}'10. Batch Upscaling Workflow
Process multiple images with consistent settings using session persistence.
# First image in batch
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": "Upscale this product image 4x with face enhancement and noise reduction. This is the first of a series of product photos I need processed."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/product-001.jpg"],
"session_id": "batch-upscale-products",
"mode": "max"
}'
# Second image (same session maintains settings)
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": "Upscale this next product image using the same settings as before."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/product-002.jpg"],
"session_id": "batch-upscale-products"
}'
# Third image
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": "Continue with the same upscaling settings for this product image."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/product-003.jpg"],
"session_id": "batch-upscale-products"
}'Best Practices
Choosing Scale Factor
- 2x: Sufficient for most web and social media use cases
- 4x: Standard for print quality (300 DPI equivalent)
- 8x+: Only for large format where viewing distance is greater
Quality Tips
- Source Quality Matters: Higher quality input produces better upscaled output
- File Format: Use PNG or high-quality JPEG (90%+) as input when possible
- Face Enhancement: Enable only for images with human faces
- Noise Reduction: Use aggressively for low-light or heavily compressed images
Output Considerations
- File Size: Higher scale factors produce significantly larger files
- Processing Time: 8x and 16x upscaling takes longer - be patient
- Viewing Distance: Large format prints are viewed from distance; extreme detail isn't always necessary
Prompt Tips for Image Upscaling
When requesting upscaling, include these details in your prompt:
1. Scale Factor: Specify 2x, 4x, 8x, or 16x 2. Use Case: Web, print, large format display 3. Image Type: Photo, AI art, product shot, portrait 4. Special Requirements: Face enhancement, noise reduction, artifact removal 5. Output Intent: Final use case helps optimize processing
Example Prompt Structure
"Upscale this [image type] [scale factor] for [use case].
[Special requirements like face enhancement or noise reduction].
[Additional context about the source image quality or intended output]."Mode Selection
Ask your users before processing:
"Do you want fast & cheap, or high quality?"
| Mode | Best For | Speed | Quality |
|---|---|---|---|
max | Final production images, print materials, important projects | Slower | Highest |
eco | Quick previews, batch testing, web thumbnails | Faster | Good |
Multi-Turn Upscaling Workflow
Use session_id to iterate on upscaling results:
# Initial upscale
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": "Upscale this photo 4x for print"}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/photo.jpg"],
"session_id": "upscale-project-001"
}'
# Request adjustments
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": "The result looks good but can you also apply face enhancement and reduce noise?"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "upscale-project-001"
}'
# Request different scale
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": "Actually I need 8x for a larger print. Can you upscale it further?"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "upscale-project-001"
}'Error Handling
| Error | Cause | Solution |
|---|---|---|
Failed to create prediction: HTTP 422 | Insufficient balance | Top up at eachlabs.ai |
| Image too large | Source image exceeds maximum dimensions | Resize source image before upscaling |
| Timeout | Large scale factors take longer | Set client timeout to minimum 10 minutes |
| Unsupported format | Invalid image format | Use JPEG, PNG, or WebP input |
Related Skills
each-sense- Core API documentationimage-generation- Generate images from text promptsimage-editing- Edit and modify existing imagesold-photo-restoration- Specialized restoration for vintage photos
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]