Pick a hex color. Pair it with a two-word scene. Drop both into your LLM and ask for the emotional fingerprint.
A builder on Reddit just shared the full system behind this. He calls it “Git for feelings”, a branching timeline where each snapshot carries a mood vector, a poetic line, and a parent-child lineage. The prompt architecture is worth stealing. Most people assume that emotion in AI output is fuzzy and unreliable. This system proves the opposite. When you give a model a structured emotional schema, it stops guessing and starts mapping. The fuzziness collapses. What you get instead is a reproducible fingerprint you can fork, compare, and stress-test like any other data structure.
Here’s how to run it, what the output actually means, and how to stress-test it until something breaks.
🎨 The Test (Run This First)
Copy this prompt. Swap in any color and scene you want. See what comes back.
You are an emotional translator. Given a hex color and a context (scene, subject, event), output:
– dominant_emotion: one of [love, joy, calm, wonder, mystery, defiance, clarity]
– semantic_tags: up to 4 adjectives capturing the mood
– valence: number -1 to 1 (negative to positive)
– arousal: number 0 to 1 (calm to intense)
– poetic_line: a single sentence under 20 words, lyrical but not cliché.Input: color=#ff3b7a, scene=”NPC betrayal”, subject=”GuardA”, event=”betrayal_discovered”
What you’ll notice immediately: the dominant_emotion is not just a label. It sits at the intersection of the color’s hue and the scene’s vocabulary. A hot pink paired with betrayal lands somewhere between passion and defiance, not love. The valence usually drops below zero. The arousal number spikes toward 0.8 or higher. And the poetic_line is the tell; it reveals exactly how the model is weighting the two inputs against each other. A tense line means tension in the data. A lyrical one means the inputs aligned into something coherent.
Now try the exact same hex with a completely different scene. “First heartbeat of spring” instead of “NPC betrayal.” Watch the valence flip. The arousal softens. The poetic_line loosens. The divergence is the point.
🔧 How the Two-Layer System Works
The engine runs two passes on every input:
- Hue rules first. Hot pinks (330-360 degrees) default to passion. Blues (200-255 degrees) lean toward mystery. Color sets the baseline. Think of it as the model’s prior: before it reads a single word of context, the hue already tilts the probability distribution toward a cluster of emotions. Greens tend to calm. Deep purples drift toward grief or royalty depending on saturation. The model has absorbed enough color-language associations to make these calls without prompting.
- Context nudging second. Words like “glitch” push toward defiance. “Dream” tilts toward wonder. “Silence” pulls arousal down even when the color is aggressive. Context can override the baseline entirely, or it can reinforce it. When both layers point in the same direction, the output gets sharper and more confident. When they pull against each other, the model has to resolve the tension, and that tension surfaces in the poetic_line as compression or ambiguity.
The same red returns different emotional signatures for “heartbeat in a silent room” versus “rage behind a closed door.” Same hex. Two totally different arousal scores. The system stores both as branches in a living tree. That storage is what separates this from a one-off prompt experiment. You are not just generating output. You are building a structure you can navigate, compare, and extend.
🌿 What the Branching Actually Reveals
Each snapshot can be forked: same color, new context, new child node. You can watch emotional drift happen as you change one variable at a time. Start with a calm blue (#4a90d9) and “fog at dawn.” Fork it to “fog over a battlefield.” Fork that again to “fog lifts, soldiers gone.” Three child nodes, three different valence readings. The color never changed. The drift is entirely linguistic.
This is where it gets genuinely useful for anyone building character systems, game narratives, or adaptive interfaces. You can trace the exact moment an emotional state pivots. You can identify which words carry the most weight in the context layer. You can build a map of how your model responds to emotional pressure, not in theory, but in actual scored outputs you can compare side by side.
The real insight for prompt engineers: structure produces consistency. Give the model a clear output schema and it returns stable, expressive results. The poetry emerges from the constraints, not despite them. A model given total freedom to describe emotion produces vague, meandering language. A model given six specific fields and a 20-word sentence limit produces something precise enough to actually use in production.
💡 Tips Before You Go Deeper
- Temperature up for more poetic lines. Temperature down for consistent tags. Run both and compare. The same input at 0.2 versus 1.0 tells you how much the model is hedging versus exploring.
- Try the edge case: calm color (#7fe0c2) plus violent context (“blood on the floor”). Context usually overrides the color baseline. Does yours? If the model still returns a positive valence, your context vocabulary is too soft. Try “corpse” or “shattered” and find the floor.
- Glitch injection test: feed “glitch glitch glitch” as the entire context. Watch the entropy spike in the response. The semantic_tags get unstable. The poetic_line often turns fragmented or recursive. It is a fast way to see how gracefully the system degrades under noise.
- Near-black test: #020202 plus “the moment before the scream.” High arousal, compressed output. Worth examining. Near-black is one of the few colors where arousal can go either direction. It reads as void (low arousal) or dread (high arousal) depending entirely on what the context layer feeds it.
- Run the same prompt three times without changing anything. If the dominant_emotion flips between runs, your temperature is too high for reliable tagging. Lower it until the label stabilizes, then raise it again for the poetic_line only.
🚀 Your Move
Pick a hex color. Pair it with two opposite contexts. Run the prompt on both and compare the valence and arousal scores. Note which field shifted the most. Usually it is arousal. Valence is stickier than people expect.
Then fork one into a child branch. Change a single word in the context. Run it again. See how far the emotional drift goes from the root. Three forks in, you will have a small tree that tells you something specific about how your model handles emotional ambiguity.
The prompt is above. All you have to do is run it!
From Color to Sentience: Building an Emotional Multiverse with AI Prompts
by u/Potential-Park-2070 in ChatGPTPromptGenius