
Age Transformation
- 142 installs
- 28 repo stars
- Updated April 21, 2026
- eachlabs/skills
Integrate EachLabs age-transformation API to age faces up or down in photos for apps, demos, marketing experiments, or creative tooling workflows.
About
EachLabs skill for calling age-transformation models that realistically age or rejuvenate faces in portraits, enabling photo apps, social features, and marketing prototypes without building models in-house.
- Face age shifting
- EachLabs API
- Photo input and output
- Batch-friendly flows
- Creative app hooks
Age Transformation by the numbers
- 142 all-time installs (skills.sh)
- Ranked #734 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 age-transformationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 142 |
|---|---|
| repo stars | ★ 28 |
| Last updated | April 21, 2026 |
| Repository | eachlabs/skills ↗ |
What it does
Integrate EachLabs age-transformation API to age faces up or down in photos for apps, demos, marketing experiments, or creative tooling workflows.
Files
Age Transformation
Transform faces across different ages using each::sense. This skill enables realistic age progression (aging) and age regression (de-aging) effects on photos, useful for entertainment, film/video production, forensic visualization, and creative projects.
Features
- Age Progression: Make subjects appear older (10, 20, 40+ years)
- Age Regression: De-age subjects to look younger
- Baby to Adult: Predict how a baby/child might look as an adult
- Teenage Version: Transform to teenage appearance
- Senior/Elderly: Create realistic elderly versions
- Middle-Aged: Transform to middle-age appearance
- Subtle Aging: Minor age changes (5-10 years)
- Dramatic Aging: Major age transformations (30-50 years)
- De-aging for Film: Professional de-aging for video/film production
- Age Timeline: Generate multiple ages in sequence
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": "Age this person to look 70 years old while maintaining their recognizable features"}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/portrait.jpg"],
"mode": "max"
}'Use Case Examples
1. Age Progression (Make Older)
Transform a young adult to appear significantly older with natural aging characteristics.
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": "Age this person by 30 years. Add realistic aging features like wrinkles, slight sagging, gray hair, and age spots while keeping their identity clearly recognizable."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/young-adult.jpg"],
"mode": "max"
}'2. Age Regression (Make Younger)
De-age an older subject to appear younger with smoother skin and youthful features.
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": "De-age this person by 25 years. Make them look younger with smoother skin, fuller hair, tighter facial features, but keep their identity intact. Natural and realistic result."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/middle-aged-person.jpg"],
"mode": "max"
}'3. Baby to Adult Prediction
Predict how a baby or young child might look as an adult.
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 this baby photo to show how they might look as a 30-year-old adult. Maintain key facial features like eye shape, nose structure, and overall face shape. Make it realistic and believable."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/baby-photo.jpg"],
"mode": "max"
}'4. Teenage Version
Transform a child or adult to their teenage appearance.
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 this person to look like a 16-year-old teenager. Adjust facial features to teenage proportions while preserving their recognizable identity. Natural skin, youthful energy."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/adult-portrait.jpg"],
"mode": "max"
}'5. Senior/Elderly Version
Create a realistic elderly version with natural aging characteristics.
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": "Age this person to 80 years old. Add deep wrinkles, age spots, white/gray hair, thinner skin, and natural elderly features. The result should look like a dignified senior while still being recognizable as the same person."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/young-person.jpg"],
"mode": "max"
}'6. Middle-Aged Version
Transform to a realistic middle-aged appearance.
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 this young adult to appear 45-50 years old. Add subtle wrinkles, slight gray at the temples, mature skin texture, and natural middle-age characteristics while maintaining their identity."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/25-year-old.jpg"],
"mode": "max"
}'7. Subtle Aging (10 Years)
Apply minor, realistic aging for a 10-year progression.
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": "Age this person by exactly 10 years. Apply subtle, realistic aging: fine lines around eyes and mouth, slightly less elastic skin, minimal gray hair starting to show. Keep changes believable and natural."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/current-photo.jpg"],
"mode": "max"
}'8. Dramatic Aging (40 Years)
Apply significant aging transformation spanning 40 years.
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": "Age this 25-year-old by 40 years to look 65. Apply dramatic but realistic aging: significant wrinkles, sagging skin, gray/white hair, age spots, thinning hair, jowls. Result should be photorealistic and the person should still be recognizable."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/young-adult-25.jpg"],
"mode": "max"
}'9. De-aging for Video/Film
Professional de-aging suitable for film and video production.
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": "De-age this actor to look 25 years younger for a film flashback scene. Remove wrinkles, tighten facial features, restore hair color and volume, create smooth youthful skin. Result must be cinematic quality, photorealistic, and maintain perfect identity consistency."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/actor-current.jpg"],
"mode": "max"
}'10. Age Progression Timeline (Multiple Ages)
Generate multiple age versions using session continuity.
# First request - Age to 40
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": "This is a 20-year-old. Create an age progression showing them at 40 years old. Maintain identity throughout."}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/person-age-20.jpg"],
"session_id": "age-timeline-project-001",
"mode": "max"
}'
# Second request - Age to 60 (same session)
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 show the same person at 60 years old. Continue the aging progression naturally from the 40-year-old version."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "age-timeline-project-001",
"mode": "max"
}'
# Third request - Age to 80 (same session)
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": "Finally, show them at 80 years old. Complete the age timeline with realistic elderly features."}],
"model": "eachsense/beta",
"stream": true,
"session_id": "age-timeline-project-001",
"mode": "max"
}'Best Practices
For Realistic Results
- High-quality source photos: Use clear, well-lit frontal portraits
- Specify exact age: "Age to 65" is better than "make older"
- Mention identity preservation: Always request maintaining recognizable features
- Describe aging features: Guide the transformation with specific details
Input Photo Guidelines
- Resolution: Higher resolution photos produce better results
- Lighting: Even, neutral lighting works best
- Angle: Front-facing portraits are ideal
- Expression: Neutral expressions transform most naturally
- Obstruction: Avoid sunglasses, heavy makeup, or face coverings
Prompt Tips
When requesting age transformations, include:
1. Current age (if known): "This 30-year-old..." 2. Target age: "...to look 70 years old" 3. Aging features: "Add wrinkles, gray hair, age spots..." 4. Identity note: "...while keeping them recognizable" 5. Quality requirement: "Photorealistic result"
Example Prompt Structure
"Transform this [current age]-year-old to look [target age] years old.
Add [specific aging/de-aging features].
Maintain their identity and recognizable features.
[Additional requirements like lighting, style, etc.]"Mode Selection
| Mode | Best For | Speed | Quality |
|---|---|---|---|
max | Final outputs, professional work, film/video | Slower | Highest |
eco | Quick previews, testing, iterations | Faster | Good |
Recommendation: Use eco mode to test and refine your prompts, then switch to max for final high-quality outputs.
Multi-Turn Refinement
Use session_id to iteratively refine age transformations:
# Initial transformation
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": "Age this person to 70 years old"}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/portrait.jpg"],
"session_id": "age-refinement-001"
}'
# 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": "Add more prominent wrinkles and make the hair completely white"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "age-refinement-001"
}'
# Further adjustment
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": "Keep the aging but make the expression warmer, add smile lines"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "age-refinement-001"
}'Common Use Cases
| Use Case | Recommended Approach |
|---|---|
| Entertainment/Fun | Quick age-ups/de-aging with eco mode |
| Film/Video VFX | De-aging actors with max mode, detailed prompts |
| Missing Persons | Age progression from childhood, preserve key features |
| Family Projects | "What will I look like at 80?" type queries |
| Forensic Visualization | Professional age progression with identity focus |
| Before/After Concepts | Subtle aging for skincare/health visualizations |
Error Handling
| Error | Cause | Solution |
|---|---|---|
Failed to create prediction: HTTP 422 | Insufficient balance | Top up at eachlabs.ai |
| Poor identity preservation | Vague prompt | Be specific about maintaining features |
| Unrealistic aging | Missing aging details | Describe specific aging characteristics |
| Timeout | Complex generation | Set client timeout to minimum 10 minutes |
Related Skills
each-sense- Core API documentationface-swap- Face swapping capabilitiesimage-edit- General image editingportrait-generation- Creating portraits from scratch
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]