
Pet Portrait Generation
- 196 installs
- 28 repo stars
- Updated April 21, 2026
- eachlabs/skills
Create stylized pet portraits for gifts, pet-brand social campaigns, personalized merchandise, vet clinic promos, or community engagement content from pet photos.
About
The pet-portrait-generation skill lets Claude Code agents create stylized pet portraits through Eachlabs for pet brands, gift shops, and social campaigns that need personalized, shareable artwork from customer photos without commissioning illustrators for every order.
- Stylized pet portraits
- Personalized gift artwork
- Pet-brand social content
- Merchandise-ready images
- Eachlabs portrait models
Pet Portrait Generation by the numbers
- 196 all-time installs (skills.sh)
- Ranked #623 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 pet-portrait-generationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 196 |
|---|---|
| repo stars | ★ 28 |
| Last updated | April 21, 2026 |
| Repository | eachlabs/skills ↗ |
What it does
Create stylized pet portraits for gifts, pet-brand social campaigns, personalized merchandise, vet clinic promos, or community engagement content from pet photos.
Files
Pet Portrait Generation
Generate stunning custom pet portraits using each::sense. Transform your pet photos into beautiful artwork across various styles - from realistic portraits to whimsical cartoon illustrations, regal renaissance paintings, and personalized products.
Features
- Realistic Portraits: Professional studio-quality pet photography
- Cartoon/Illustrated: Fun, colorful cartoon versions of pets
- Renaissance/Royal: Majestic portraits with historical costumes
- Watercolor Paintings: Artistic watercolor-style pet artwork
- Pop Art: Bold, vibrant pop art inspired portraits
- Anime Style: Japanese anime-style pet characters
- Costume Portraits: Pets in outfits, uniforms, and themed costumes
- Multi-Pet Portraits: Family portraits with multiple pets
- Memorial Portraits: Tribute artwork for beloved pets
- Product Mockups: Pet portraits on mugs, canvas, and merchandise
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 beautiful portrait of my golden retriever in a classic oil painting style"}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-pet-photo.jpg"],
"mode": "max"
}'Use Case Examples
1. Realistic Pet Portrait
Create a professional studio-quality portrait that captures your pet's personality.
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 realistic professional portrait of my cat. Studio lighting, soft bokeh background in warm earth tones. Capture the eyes beautifully with catchlights. High-end pet photography style."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-cat.jpg"],
"mode": "max"
}'2. Cartoon/Illustrated Pet Portrait
Transform your pet into a fun, colorful cartoon character.
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": "Transform my dog into a cute cartoon illustration. Disney/Pixar style with big expressive eyes, playful pose. Vibrant colors, clean lines. Include a fun background with bones and toys."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-dog.jpg"],
"mode": "max"
}'3. Renaissance/Royal Pet Portrait
Give your pet the royal treatment with a majestic historical portrait.
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 renaissance-style royal portrait of my cat. Dress them as a noble king with a golden crown, velvet robe with ermine fur trim, and royal jewelry. Classical oil painting style, dramatic lighting, ornate gilded frame effect. Regal and majestic."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-cat.jpg"],
"mode": "max"
}'4. Watercolor Pet Painting
Create a beautiful watercolor artwork of your pet.
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": "Paint my dog in a loose, expressive watercolor style. Soft edges, beautiful color bleeds and washes. Capture their personality with artistic brush strokes. Pastel background with splashes of color. Fine art watercolor painting look."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-dog.jpg"],
"mode": "max"
}'5. Pop Art Pet Portrait
Create a bold, vibrant pop art portrait inspired by Andy Warhol.
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 pop art portrait of my cat in Andy Warhol style. Bold, bright contrasting colors - hot pink, electric blue, yellow, orange. High contrast, graphic style with halftone dots. Create a 2x2 grid with different color variations."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-cat.jpg"],
"mode": "max"
}'6. Anime-Style Pet Portrait
Transform your pet into an adorable anime character.
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 an anime-style portrait of my dog. Japanese anime aesthetic with big sparkly eyes, soft shading, and cute kawaii expression. Include cherry blossoms in the background. Studio Ghibli inspired, warm and whimsical."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-dog.jpg"],
"mode": "max"
}'7. Pet with Costume/Outfit
Dress up your pet in fun costumes and themed outfits.
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 portrait of my cat as a space astronaut. Wearing a detailed NASA spacesuit with helmet, floating in space with Earth visible in the background. Stars and nebula. Realistic lighting, cinematic quality."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-cat.jpg"],
"mode": "max"
}'8. Multi-Pet Family Portrait
Create a beautiful portrait featuring multiple pets together.
# First request - provide all pet photos
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 family portrait with all three of my pets together. Classical portrait style with a warm, cozy living room background. Position them naturally as if they are posing together - the dog in the center, cats on either side. Soft, warm lighting, harmonious composition."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": [
"https://example.com/my-dog.jpg",
"https://example.com/my-cat1.jpg",
"https://example.com/my-cat2.jpg"
],
"session_id": "pet-family-portrait",
"mode": "max"
}'
# Follow-up to adjust the portrait
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": "Can you make the background a garden setting with flowers instead? Keep the same arrangement of the pets."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "pet-family-portrait"
}'9. Memorial Pet Portrait
Create a touching tribute portrait for a beloved pet.
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 memorial portrait for my beloved dog who passed away. Peaceful, serene setting with soft golden light. Include angel wings, subtle rainbow bridge elements in the background. Ethereal and comforting, celebrating their spirit. Beautiful tribute artwork."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-dog.jpg"],
"mode": "max"
}'10. Pet Portrait on Products (Mug, Canvas)
Generate mockups of your pet portrait on merchandise and products.
# Pet portrait on a mug
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 product mockup of my cat portrait on a white ceramic coffee mug. The portrait should be a cute illustrated style. Show the mug on a wooden table with coffee, cozy morning setting. Professional product photography."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-cat.jpg"],
"session_id": "pet-products",
"mode": "max"
}'
# Same pet portrait on canvas
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 mockup of this same pet portrait as a canvas print hanging on a living room wall. Modern interior setting, natural lighting. Show it as wall art in context."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "pet-products"
}'Best Practices
Photo Quality Tips
- Clear photos: Use well-lit, in-focus photos of your pet
- Face visible: Ensure the pet's face is clearly visible and not obscured
- Multiple angles: For best results, provide photos from different angles
- Natural expressions: Candid shots often produce the best portraits
Prompt Tips
- Be specific about style: Mention specific art styles, artists, or references
- Describe the mood: Include emotional tone (playful, regal, peaceful)
- Specify colors: Request specific color palettes or schemes
- Background details: Describe the setting or background you want
Example Prompt Structure
"Create a [style] portrait of my [pet type].
[Specific style details and references].
[Background/setting description].
[Mood and lighting].
[Any special elements or accessories]."Mode Selection
Ask your users before generating:
"Do you want fast & affordable, or maximum quality?"
| Mode | Best For | Speed | Quality |
|---|---|---|---|
max | Final portraits, gifts, prints | Slower | Highest |
eco | Quick previews, style exploration | Faster | Good |
Multi-Turn Creative Iteration
Use session_id to refine and iterate on portraits:
# Initial portrait
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 renaissance portrait of my dog as a nobleman"}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-dog.jpg"],
"session_id": "dog-portrait-project"
}'
# Refine the result
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 costume more elaborate with gold embroidery and add a sword"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "dog-portrait-project"
}'
# Try different variations
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 2 more variations with different poses and backgrounds"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "dog-portrait-project"
}'Style Exploration
Generate different styles to find the perfect look:
# Explore different styles with eco mode for speed
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 my cat portrait in oil painting style"}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-cat.jpg"],
"mode": "eco"
}'
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 my cat portrait in minimalist line art style"}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-cat.jpg"],
"mode": "eco"
}'
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 my cat portrait in stained glass window style"}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-cat.jpg"],
"mode": "eco"
}'Error Handling
| Error | Cause | Solution |
|---|---|---|
Failed to create prediction: HTTP 422 | Insufficient balance | Top up at eachlabs.ai |
| Image not processing | Invalid or inaccessible image URL | Ensure image URL is publicly accessible |
| Timeout | Complex generation | Set client timeout to minimum 10 minutes |
| Poor likeness | Low quality source photo | Use clear, well-lit photo with visible face |
Related Skills
each-sense- Core API documentationproduct-photo-generation- E-commerce product shotsimage-generation- General image 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]