One person, four scenes
A portrait, then three edits that keep her face.
The person
Close portrait of a 75-year-old grandmother from a village in western Hunan, sitting on a low wooden stool under the eaves of her timber house: a deeply lined, sun-darkened face, a few missing teeth in a small smile, silver hair pinned back under a black headscarf, a hand-sewn indigo cotton jacket with cloth buttons, rough hands resting on her knees. Soft daylight from the open courtyard on one side, the dark interior behind her. 85mm, eye level.




Elapsed–
Cost$0.14
Recorded run, replayed faster than it ran.
$0.14this recorded run's cost
- 4 images≈ $0.14
Forking copies the 4 steps into your dashboard. You change the input, press Run, and each call is billed to your balance.
Build it yourself
Each step is one request to the Hyperouter API with your key. A later step reads an earlier one's output through {{steps.<id>…}}, and your inputs through {{vars.<name>}}. Models: bytedance/seedream-5.0-lite.
The 4 requests
Draw the portrait
POST /v1/images/generationsbytedance/seedream-5.0-lite1 image · 2048×2048{ "model": "bytedance/seedream-5.0-lite", "prompt": "{{vars.person}} Documentary realism shot on 65mm large-format film: natural and practical light only, deep blacks with detail held in the shadows, fine organic film grain, true skin texture with pores and wrinkles, no retouching, no digital sharpening, no beauty filter.", "size": "2048x2048", "n": 1 }Drying chillies
POST /v1/images/editsbytedance/seedream-5.0-lite1 image · 2560×1440{ "model": "bytedance/seedream-5.0-lite", "prompt": "{{vars.scene_1}} Documentary realism shot on 65mm large-format film: natural and practical light only, deep blacks with detail held in the shadows, fine organic film grain, true skin texture with pores and wrinkles, no retouching, no digital sharpening, no beauty filter.", "size": "2560x1440", "n": 1, "images": [ { "image_url": "{{steps.portrait.url[0]}}" } ] }Feeding the stove
POST /v1/images/editsbytedance/seedream-5.0-lite1 image · 2560×1440{ "model": "bytedance/seedream-5.0-lite", "prompt": "{{vars.scene_2}} Documentary realism shot on 65mm large-format film: natural and practical light only, deep blacks with detail held in the shadows, fine organic film grain, true skin texture with pores and wrinkles, no retouching, no digital sharpening, no beauty filter.", "size": "2560x1440", "n": 1, "images": [ { "image_url": "{{steps.portrait.url[0]}}" } ] }On the field path
POST /v1/images/editsbytedance/seedream-5.0-lite1 image · 2560×1440{ "model": "bytedance/seedream-5.0-lite", "prompt": "{{vars.scene_3}} Documentary realism shot on 65mm large-format film: natural and practical light only, deep blacks with detail held in the shadows, fine organic film grain, true skin texture with pores and wrinkles, no retouching, no digital sharpening, no beauty filter.", "size": "2560x1440", "n": 1, "images": [ { "image_url": "{{steps.portrait.url[0]}}" } ] }
Run the whole pipeline from code
API=https://api.hyperouter.app/v1
call() { curl -s "$API/$1" -H "Authorization: Bearer $HYPEROUTER_API_KEY" -H 'Content-Type: application/json' "${@:2}"; }
LOOK='Documentary realism shot on 65mm large-format film: natural and practical light only, deep blacks with detail held in the shadows, fine organic film grain, true skin texture with pores and wrinkles, no retouching, no digital sharpening, no beauty filter.'
PERSON='Close portrait of a 75-year-old grandmother from a village in western Hunan, sitting on a low wooden stool under the eaves of her timber house: a deeply lined, sun-darkened face, a few missing teeth in a small smile, silver hair pinned back under a black headscarf, a hand-sewn indigo cotton jacket with cloth buttons, rough hands resting on her knees. Soft daylight from the open courtyard on one side, the dark interior behind her. 85mm, eye level.'
# 1. the portrait
PORTRAIT=$(jq -n --arg p "$PERSON $LOOK" '{model:"bytedance/seedream-5.0-lite", prompt:$p, size:"2048x2048", n:1}' | call images/generations -d @- | jq -r '.data[0].url')
echo "$PORTRAIT"
# 2-4. three scenes, each an edit of the portrait
edit() { jq -n --arg p "$1 $LOOK" --arg r "$PORTRAIT" '{model:"bytedance/seedream-5.0-lite", prompt:$p, size:"2560x1440", n:1, images:[{image_url:$r}]}' | call images/edits -d @- | jq -r '.data[0].url'; }
edit 'The same grandmother from the reference photo, same face, headscarf and indigo jacket, now standing on the wooden veranda of her house in late autumn, spreading fresh red chillies on a large round bamboo tray to dry in the sun, strings of dried chillies and corn hanging from the eaves, the village roofs behind. Medium shot, 50mm.'
edit 'The same grandmother from the reference photo, same face, headscarf and indigo jacket, sitting on a low stool in front of a soot-blackened brick stove in her dark wooden kitchen, feeding split firewood into the fire, the orange firelight on her face and hands the only light, smoke curling up to the rafters, an iron wok on the stove. Medium close-up, 50mm.'
edit 'The same grandmother from the reference photo, same face, headscarf and indigo jacket, walking along a narrow raised path between harvested rice paddies at dusk, a woven bamboo basket full of sweet potatoes on her back held by its straps, terraced hills and mist behind her. Full figure, side view, 40mm.'
// run.mjs import OpenAI from 'openai'; const c = new OpenAI({ baseURL: 'https://api.hyperouter.app/v1', apiKey: process.env.HYPEROUTER_API_KEY }); const LOOK = 'Documentary realism shot on 65mm large-format film: natural and practical light only, deep blacks with detail held in the shadows, fine organic film grain, true skin texture with pores and wrinkles, no retouching, no digital sharpening, no beauty filter.'; const PERSON = 'Close portrait of a 75-year-old grandmother from a village in western Hunan, sitting on a low wooden stool under the eaves of her timber house: a deeply lined, sun-darkened face, a few missing teeth in a small smile, silver hair pinned back under a black headscarf, a hand-sewn indigo cotton jacket with cloth buttons, rough hands resting on her knees. Soft daylight from the open courtyard on one side, the dark interior behind her. 85mm, eye level.'; const SCENES = [ 'The same grandmother from the reference photo, same face, headscarf and indigo jacket, now standing on the wooden veranda of her house in late autumn, spreading fresh red chillies on a large round bamboo tray to dry in the sun, strings of dried chillies and corn hanging from the eaves, the village roofs behind. Medium shot, 50mm.', 'The same grandmother from the reference photo, same face, headscarf and indigo jacket, sitting on a low stool in front of a soot-blackened brick stove in her dark wooden kitchen, feeding split firewood into the fire, the orange firelight on her face and hands the only light, smoke curling up to the rafters, an iron wok on the stove. Medium close-up, 50mm.', 'The same grandmother from the reference photo, same face, headscarf and indigo jacket, walking along a narrow raised path between harvested rice paddies at dusk, a woven bamboo basket full of sweet potatoes on her back held by its straps, terraced hills and mist behind her. Full figure, side view, 40mm.', ]; // 1. the portrait const portrait = (await c.post('/images/generations', { body: { model: 'bytedance/seedream-5.0-lite', prompt: PERSON + ' ' + LOOK, size: '2048x2048', n: 1 } })).data[0].url; console.log(portrait); // 2-4. three scenes, each an edit of the portrait for (const scene of SCENES) { const r = await c.post('/images/edits', { body: { model: 'bytedance/seedream-5.0-lite', prompt: scene + ' ' + LOOK, size: '2560x1440', n: 1, images: [{ image_url: portrait }] } }); console.log(r.data[0].url); }
import os from openai import OpenAI c = OpenAI(base_url='https://api.hyperouter.app/v1', api_key=os.environ['HYPEROUTER_API_KEY']) LOOK = 'Documentary realism shot on 65mm large-format film: natural and practical light only, deep blacks with detail held in the shadows, fine organic film grain, true skin texture with pores and wrinkles, no retouching, no digital sharpening, no beauty filter.' PERSON = 'Close portrait of a 75-year-old grandmother from a village in western Hunan, sitting on a low wooden stool under the eaves of her timber house: a deeply lined, sun-darkened face, a few missing teeth in a small smile, silver hair pinned back under a black headscarf, a hand-sewn indigo cotton jacket with cloth buttons, rough hands resting on her knees. Soft daylight from the open courtyard on one side, the dark interior behind her. 85mm, eye level.' SCENES = [ 'The same grandmother from the reference photo, same face, headscarf and indigo jacket, now standing on the wooden veranda of her house in late autumn, spreading fresh red chillies on a large round bamboo tray to dry in the sun, strings of dried chillies and corn hanging from the eaves, the village roofs behind. Medium shot, 50mm.', 'The same grandmother from the reference photo, same face, headscarf and indigo jacket, sitting on a low stool in front of a soot-blackened brick stove in her dark wooden kitchen, feeding split firewood into the fire, the orange firelight on her face and hands the only light, smoke curling up to the rafters, an iron wok on the stove. Medium close-up, 50mm.', 'The same grandmother from the reference photo, same face, headscarf and indigo jacket, walking along a narrow raised path between harvested rice paddies at dusk, a woven bamboo basket full of sweet potatoes on her back held by its straps, terraced hills and mist behind her. Full figure, side view, 40mm.', ] # 1. the portrait portrait = c.post('/images/generations', cast_to=object, body={ 'model': 'bytedance/seedream-5.0-lite', 'prompt': PERSON + ' ' + LOOK, 'size': '2048x2048', 'n': 1})['data'][0]['url'] print(portrait) # 2-4. three scenes, each an edit of the portrait for scene in SCENES: print(c.post('/images/edits', cast_to=object, body={ 'model': 'bytedance/seedream-5.0-lite', 'prompt': scene + ' ' + LOOK, 'size': '2560x1440', 'n': 1, 'images': [{'image_url': portrait}]})['data'][0]['url'])
Run One person, four scenes on your account
A portrait, then three edits that keep her face. Fork it, change the input, and run it from the dashboard: ≈ $0.14 per run at the default settings.