Website: https://cursedprograms.github.io/Changeling-Studio/
The name. In European folklore a changeling is a fairy child left in the cradle in place of a stolen human one: something that wears a familiar face and isn't what it seems. Every Changeling here does a little of that, and each is named for the myth or the Latin word that fits it best.
Every Changeling in one place. Each Changeling is its own program and its own repo; Studio keeps them side by side in one folder, so you work from here as if they were all one project, and (coming) runs them in one window, with chains: Imago Realtime > Chronos > Cosmeta > Echo, each adding to the last, live or on photos.
| Changeling | What it does |
|---|---|
| Imago | one face onto any photo or video (grown from roop, AGPL-3.0) |
| Imago Realtime | the face swap live on the webcam for video calls, with a female/male voice and recording |
| Tiresias | gender swap for photos |
| Chronos | age a face forwards or backwards, or a five-age timeline |
| Natio | your face as it might look born somewhere else in the world |
| Cosmeta | makeup, hair colour and length, beards, on two layers |
| Echo | train the voices the Changelings speak with (RVC, from Piper or your own recordings), and speak in them live |
| Tonsor | anyone's hairstyle on you: the cut from one photo, the colour from another (HairFastGAN) |
| Tiresias Realtime | the other gender live on a call: one snapshot, swapped by Tiresias, worn live by Imago Realtime |
| Chronos Realtime | younger or older live on a call, the same way |
| Natio Realtime | another ancestry live on a call, the same way |
| Cosmeta Realtime | makeup, hair colour and beards live on a call, every frame (BiSeNet on the GPU, Cosmeta's own looks) |
The three realtime ones are one program, realtime/live.py, with a realtime.json naming its Changeling.
python realtime/make_realtime.py writes all three repos from it (code, run scripts, README, site page, QR code);
change it here, run that, then commit and push each. StyleGAN editing is a minute's work per face, far too slow for
every frame, so they make the new you once and Imago Realtime wears it live, with the new you's skin (its tone
and wrinkles) through Imago Realtime's Persona's skin.
fetch.bat # Windows
.\fetch.ps1 # PowerShell
./fetch.sh # Linux / macOS / Git Bash
Each Changeling in apps.txt is cloned into its own folder here if it's missing, and pulled if it's here.
Studio's .gitignore leaves those folders out, so each one still commits and pushes to its own repo. Then start
any of them with its own run.bat / run.ps1 / run.sh. Where they use the same models (Tiresias and Chronos
share StyleGAN2 and the face finders), the later one borrows the first one's files instead of downloading them
again.
Everything you make with a Changeling, in one place. Each one still asks where to save, as before; once it has
saved, the file goes into the Gallery too: Imago's pictures and videos, Imago Realtime's recordings, and Tiresias,
Chronos, Natio, Cosmeta and Tonsor's pictures. Open it from Studio's Gallery button, the Gallery button in any
of them, or python gallery.py. Newest first, a filter for each Changeling; click one to open it, or show it in its
folder. The list lives in ~/.changeling/ (with a small picture of each, so it still shows what a moved file was).
Several Changelings one after another on one photo, each step's result the next step's photo: Imago (another
face) > Chronos (older) > Cosmeta (makeup), or Tiresias (the other gender) > Tonsor (a hairstyle). Studio's Chain
button (or python chain.py): pick a photo, add steps with their options, Run. Every step runs in its own
Changeling's environment, one at a time, and shows its result as it finishes; at the end it asks where to save, and
the result goes into the Gallery. Live on a call: Use as Imago Realtime persona puts the result in Imago
Realtime's personas/, Wear it live starts Imago Realtime wearing it.
python chain.py photo.jpg -o out.png --step "Tiresias to=female" --step "Chronos age=-0.5"
python chain.py photo.jpg --step "Imago face=other.jpg" --step "Cosmeta preset=Goth"
python chain.py --steps every step and its options
- Studio itself: one window with every Changeling as a tab.
- A basic editor everywhere: brightness, contrast, saturation, warmth, vignette, sharpen, on two layers.
- Whole-photo results with the hair cleaned up (inpainting the leftover hair outside the face frame).
Your phone as the camera: Imago Realtime's run_server.bat (and the realtime ones' Phone as the camera
switch) serves a page with a QR code: the phone's camera and microphone are the input, the PC does the work.
Every Changeling's site uses site/changeling.css and site/family.js from here (Studio's Pages), so they look
the same and a change here shows on all of them: the apps' own dark greys and the Cursed pink, solid colours, no
gradients, no shadows. family.js draws the family list on every site: a new Changeling is added there once.
site/make_logo.py draws the logo (site/logo.svg, site/icon.svg), after Gemini's sketch.
