Home / Council and Characters / Characters and Visual Identity

Hermes / Thoth - the shape-shifter chat avatar (code handoff)

Updated Jul 12, 2026 · README_Hermes_Thoth_CodeHandoff.md

Summary. Date: 2026-07-12. Hermes is ONE being with TWO faces. In the Maya chat he sits as one form, and every so often a puff of magic smoke swallows him and he is revealed as the other. This is the signature move.

Hermes / Thoth - the shape-shifter chat avatar (code handoff)

Date: 2026-07-12. Hermes is ONE being with TWO faces. In the Maya chat he sits as one form, and every so often a puff of magic smoke swallows him and he is revealed as the other. This is the signature move.

The two states (locked stills, 2048x2048, deep emerald, mask to a circle)

The two stills are framed to match: same head size, same head position, same shoulder line, same background. They lay on top of each other. That is what makes the swap read as one being changing in place rather than a cut to a different picture.

Also available: thoth_fullbody.png (full standing figure, nothing cropped) for scenes/interstitials.

The transition (video)

Hold on each still image, then play the 5s poof, then hold the other still. This way the rest lengths are tunable at runtime and cost nothing.

// assets
const WIZARD   = require('./wizard.png');          // Trismegistus_cream_wizard_glow.png
const THOTH    = require('./thoth.png');           // thoth_bust_profile.png
const POOF_FWD = require('./hermes_poof_wizard_to_thoth.mp4');  // wizard -> thoth

// Play the SAME clip in reverse for thoth -> wizard (no second file needed).
// RN video / <video>: set rate = -1, or seek from end to start. If reverse playback is
// unreliable on the target platform, ask Cowork for a pre-reversed mp4 (free, no credits).

const REST_MS = { wizard: 9000, thoth: 7000 };   // tune freely
const POOF_MS = 5040;

// state: 'wizard' | 'poofing' | 'thoth'
// 1. show the still <Image> for the current form. Nothing moves. Cheap.
// 2. after REST_MS, mount the <Video> (poof) OVER the still, autoplay, muted, no loop.
// 3. on video end, swap the still underneath to the other form, unmount the video.
// 4. repeat.

Key details: - Crossfade nothing at the seams. The poof's first frame IS the wizard still and its last frame IS the Thoth still, so the still -> video -> still handoff is invisible if you just swap. - Preload the video so the poof doesn't stutter on first play. - Silent, always (brand rule: audio only from our own engine). muted, no audio track exists. - Square 1:1. Mask to a circle for the chat avatar. - Which form starts the session is your call (random, or sticky per user). It drives the intro line: starting as wizard -> "I am Hermes, sometimes known as Thoth." Starting as Thoth -> "I am Thoth, sometimes known as Hermes."

Future (do not build yet)

Quetzalcoatl gets the exact same smoke treatment as a RARE visual easter egg. Never mentioned in the chat copy, purely a "did I just see that" moment. Possible spirit-guide unlock later.

Decisions logged in Product/Affirmology_AppExperience_Vision_v1.md and Affirmology_CouncilCasting_Decisions_v1.md.