The Mood System

Mood is Workshop's core abstraction. A single keyword resolves to roughly 50 design parameters that together define a coherent visual identity. This page explains the architecture behind mood resolution and why it works.

The Problem Mood Solves

Motion graphics require dozens of interdependent design decisions: background color, text color, accent color, font family, font weight, letter spacing, line height, entrance type, entrance duration, exit duration, spring mass, spring tension, spring friction, transition type, transition duration, beat duration, hold multiplier, spacing scale, corner radius, shape opacity, camera movement, and more.

These parameters are not independent. A bouncy entrance needs a warm palette. A cinematic transition needs slow timing. A professional font needs structured spacing. Getting any one parameter wrong breaks the coherence of the whole.

Mood encodes these interdependencies into a single selection. The author says mood: confident and gets a system where every parameter supports every other parameter.

Mood Profiles

Each mood is a JSON profile mapping parameter categories to specific values:

  • Palette — background, primary, accent, muted, contrast colors (all WCAG AA compliant)
  • Typography — font family, letter spacing, default weight, line height
  • Timing — entrance duration, exit duration, default hold multiplier, beat duration
  • Easing — spring mass, tension, friction, damping ratio
  • Entrances — weighted probability distribution across all entrance types
  • Transitions — default scene transition and duration
  • Spacing — element margins, gaps, safe zones
  • Camera — default camera movement per scene

The profile is not a flat key-value map — it is a coordinated system where each value was chosen to support the others.

Mood Variants

Each mood has five named variants. Variants shift palette shades, font weight preferences, and entrance weighting while maintaining the mood's core character. This gives Workshop 30 distinct visual identities from six mood keywords.

The compiler selects a variant deterministically based on a hash of the script content. The same script always gets the same variant. Different scripts may get different variants, providing visual diversity across a body of work without any randomness.

Mood Composition

The + operator combines two moods. The first mood contributes kinetics (timing, easing, spring physics, entrance behavior). The second contributes surface (palette, typography, spacing).

text
mood: confident + elegant

This produces motion that feels confident — medium energy, controlled settle — with visuals that feel elegant — deep indigo background, gold accent, DM Sans font.

A compatibility matrix classifies every mood pair as coherent (reinforcing), tension (interesting contrast), or conflict (may produce awkward results). The compiler emits diagnostics for conflict pairs so the author can make an informed choice.

How Mood Flows Through the Pipeline

  1. Parser reads mood: confident from the Film block
  2. Normalizer loads the confident profile and resolves all default values
  3. Policy Engine applies any ThemePack overrides on top of the mood profile
  4. Timing Calculator uses the mood's hold multiplier and tempo scaling
  5. Layout Solver uses the mood's spacing and margin values
  6. Physics Solver uses the mood's spring parameters for entrance animation
  7. Compiler embeds the resolved palette and font values in the RenderGraph

Every stage downstream of normalization receives a fully resolved set of parameters. No stage needs to know which mood was selected — it only sees concrete values.

ThemePack Interaction

A ThemePack overrides specific mood parameters (typically palette and typography) while preserving the rest. The layering order is: mood profile → ThemePack overrides → element-level explicit values. Each layer only overrides what it sets; everything else falls through.

Next Steps