---
title: "How to make a moodboard for an AI video"
description: "A brief and 3-5 references in, a moodboard.md and board.html checked on test stills out. Nine board lines ranked from a 48-still test, 6,086 X posts, 14 guides."
url: https://varg.ai/how-to/make-a-moodboard-for-an-ai-video
updated: 2026-11-12
---

# How to make a moodboard for an AI video

> **For AI agents:** find the right skill in one call — `curl -s "https://varg.ai/how-to/api/search?q=<what the person wants>"` returns the matching how-to page and the best skills with install commands, as markdown (Russian works too). Full index: https://varg.ai/how-to/llms.txt. Every page has a markdown twin: add `.md` to its path. Before generating anything, show the person the options on the how-to page. From a terminal: `curl -fsSL https://varg.ai/install | sh` installs the vargai CLI (https://varg.ai/how-to/cli.md): `vargai search` and `vargai install <slug>` with no key, every varg model after `vargai login`.

A brief and 3–5 references go in; a `moodboard.md` and a visual `board.html`, checked line by line on test stills, come out before any video is paid for. In a blind test of 48 stills, a full board made frames 1.0 point more film-like (on 1–10) than no board.

**Step 2 of 10** in [How to make a video with an AI agent in ten steps](https://varg.ai/how-to/make-a-video-in-ten-steps.md). Before: [How to find references for an AI video](https://varg.ai/how-to/find-references-for-an-ai-video.md). Next: [How to write a video script with an AI agent](https://varg.ai/how-to/write-a-video-script-with-an-agent.md).

## For your agent

Install the skill, then paste the prompt.

```bash
npx skills add vargHQ/skills --skill video-moodboard
```

```text
Use the video-moodboard skill. Build a moodboard for this video that image and video models can follow, then prove it works on stills before anyone spends on video. Stop where it says STOP.

Brief: {what the video is, who it is for, length, aspect ratio, platform}
```

The guide's complete prompt, which works with or without the skill, is in The moodboard prompt below.

## The short version

- Put references first and light second: 3–5 references, each tagged with the one line it serves. Words alone land camera moves about half the time (VBench mean 49.58%).
- Write every line as a number or a named thing (hex, Kelvin, mm, %, font, seconds). On X, posts built on "cinematic", "8k" or "stunning" got 31% fewer saves (×0.69).
- Light is one named source with direction, hardness and Kelvin, the same in every shot. It was the only line that raised film-likeness (+0.50, p 0.04).
- Take 3–5 hex from a real reference frame. The hex line was obeyed best (89% met), but invented hex made frames look less like film (-0.67, p 0.03).
- Each written line lifted its own match by 31–73 points; motion stayed lowest at 57% even when written, so give one move, one action, a duration and a reference clip.
- Put font specs on the board and set the text in code: the best T2VTextBench score for exact text is 0.37 of 1.
- Test the board on 3 stills of the hero shot (about $0.05 each) and check each line with a number; aim for palette mean ΔE under 15. Stop for approval before any video.
- Never ask a model judge for "quality": with no criteria, judges scored against the board (r −0.44) and the no-board frame beat its full-board twin in 10 of 12 pairs.

## Explainer video

[Watch: 55-second explainer: the same prompt without and with a board, then the nine lines ranked 1 to 9. Music: ElevenLabs Music via varg. (MP4)](https://s3.varg.ai/files/4325c578-378d-4c43-ae53-3cc3218df1ea/file_05091091f90f.mp4)

2026-11-03 · varg research

- [Storyboard of the explainer](https://varg.ai/how-to/guide-pages/make-a-moodboard-for-an-ai-video/storyboard.html)
- [Example board](https://varg.ai/how-to/guide-pages/make-a-moodboard-for-an-ai-video/board.html)
- [1 · find-references](https://varg.ai/how-to/skills/find-references): Real references first: seven sources, four kinds, ten visual ideas.
- [2 · video-moodboard](https://varg.ai/how-to/skills/video-moodboard): The board in ranked order, drawn as one page, checked on stills. 450+ links.

## The short answer

Put references first and light second. Write every line as a number or a named thing, and test the board on stills before any video. In our 48-still test, a full board made frames 1.0 point more film-like (on 1–10) than no board. On X, posts built on "cinematic", "8k" or "stunning" got 31% fewer saves. The ranking:

1.  **References.** 3–5, each tagged with the one line it serves. Words alone land camera moves about half the time.

2.  **Light.** One named source, direction, hardness and Kelvin. It was the only line that made test frames look more like film.

3.  **Subject lock.** An identity block and a character or product sheet on 18% grey.

4.  **Framing.** Shot size, camera height, lens mm, placement. Unprompted models default to a medium shot.

5.  **Palette.** 3–5 hex taken from a reference frame. Models obey it best, but invented hex made frames look less like film.

6.  **Motion.** One move, one action, a duration, plus a reference clip.

7.  **Texture.** One capture medium and its flaws. Models add a film look half the time anyway.

8.  **Type.** Font specs on the board; the text itself set in code.

9.  **Sound.** One line each for voice, music and room tone.

The rule: if a line can't be checked against a frame (hex, Kelvin, mm, %, font, seconds), rewrite it.

## Method and data

The guide draws on four kinds of evidence, all collected on 2026-11-03: what people on X say and save, what model makers advise, what benchmarks measure, and our own controlled test on two image models.

| Source | What was done | Size |
|----|----|----|
| X search | 160 queries over three windows: the last 7 days, since July, and all-time top posts | 6,086 unique posts; 2,634 from Oct 27–Nov 3; 5,001 about AI creation |
| X reading | Seven reader agents each read the top 220 posts for one dimension | 1,540 posts read; 218 quotes checked word for word by script, none failed |
| Vendor guides | Current official prompting guides, opened and quoted | 14 guides from 13 vendors |
| Research | Benchmarks on what video models follow, and perception studies | 56 findings with source quotes |
| Databases | Reference, palette, light, type and motion tools and datasets | 72 opened, 65 verified |
| Model test | 3 scenes × 8 versions (full board, each line removed in turn, no board) × Nano Banana 2.1 and Seedream 5 Pro | 48 stills at \$0.05 each: \$2.40 (240 credits) |

How the ranking was built:

1.  **Test lift.** Two judges from different models (Opus, Sonnet) scored each still 0–2 on every line, blind to which version it was. Lift = share met with the line written minus share met with it left out. Palette was also measured by pixel distance to the hex colours (ΔE).

2.  **Film-likeness.** The same judges rated each still 1–10 on whether a cinematographer would accept it as a real frame.

3.  **Model reliability.** Benchmark scores for how often models follow each attribute (VBench, T2V-CompBench, T2VTextBench, ShotBench).

4.  **Emphasis.** How many of the 14 guides give explicit advice per line and what they put first. On X, a regression of saves on topic mentions, controlling for views, age, media and length (4,722 posts with at least 500 views), plus the "this matters most" claims the readers found.

Limits: one image per prompt; stills can only show frozen motion; the judges are models, not people; references and subject lock were not in the test. X saves show what people keep, not what makes a good video. Data, scripts, scores and the judge brief are in vargHQ/aeo `research/2026-11-03-moodboards`.

## What matters most

References matter most, then light. A reference image or clip carries what words can't. In our test, light was the only line that made frames look more like real film. Type, palette and framing gain the most from being written down. Motion is followed least, and texture mostly comes free.

**Chart: Each written line lifts its match by 31–73 points; motion stays lowest at 57%** (share of each line met, left out vs written)

| Line | Met with the line left out | Met with the line written | Lift (points) |
|----|----|----|----|
| Type | 0% | 73% | +73 |
| Palette | 29% | 89% | +60 |
| Framing | 17% | 76% | +59 |
| Light | 35% | 88% | +53 |
| Motion | 8% | 57% | +49 |
| Texture | 50% | 81% | +31 |

Our test, 2026-11-03 · 3 scenes × 8 versions × Nano Banana 2.1 and Seedream 5 Pro · two blind judges (Opus, Sonnet), scores 0–2 per line

The test used three scenes: a night bus stop, a perfume bottle and a cyclist on a mountain pass. Each ran with the full six-line board, with one line removed at a time, and with no board, on Nano Banana 2.1 and Seedream 5 Pro. The two blind judges agreed closely (r = 0.96 over 336 paired scores). An objective check agrees on palette: removing the palette line moved pixels 50% further from the brief's hex colours (mean ΔE 13.3 → 19.9). Removing any other line moved them by less than 1.5.

**Chart: Only the light line clearly made frames look more like film.** Film-likeness (1–10), full board minus the board without that line. Positive: the line helped. Negative: it hurt.

| Line | Change in film-likeness | p |
|----|----|----|
| Light | +0.50 | 0.04 |
| Texture | +0.33 | 0.39 |
| Framing | +0.25 | 0.08 |
| Type | +0.08 | 0.86 |
| Motion | -0.25 | 0.41 |
| Palette | -0.67 | 0.03 |
| Whole board vs no board | +1.00 | 0.01 |

Same 48 stills · paired by scene and model · p from a one-sample t-test on the 6 pair differences

Obeying a line is not the same as making a better frame. The hex palette was obeyed best, yet frames looked less like film with it in 5 of 6 pairs. Our palettes were invented for the test, so take hex from a real reference frame instead. Unusual angles failed most: Seedream met the top-down perfume framing 50% of the time and the straight-down aerial 58%. Wheel blur on the cyclist was met 0–17% of the time, while rain streaks came almost free.

### The ranking

This ranking combines the test with model benchmarks, the 14 vendor guides and X. "X signal" is the save multiplier for posts that mention the topic, against similar posts with the same views, age, media and length (4,722 posts). Posts built on vague words ("cinematic", "8k", "stunning") got ×0.69 the saves.

| Rank | Line | Why it ranks here | X signal | Put on the board |
|----|----|----|----|----|
| 1 | **References** (not in the six) | Words land camera moves about half the time and exact text at best 0.67 of layouts; a reference carries both. All 14 guides give advice on style or image references; Kling 4.0, MiniMax H3 and Seedance 2.5 put reference roles first. Our test had no reference images, so this rests on the other sources. | ×1.25, the highest; "naming a style works way better than describing one" ([18,187 saves](https://x.com/rexan_wong/status/2103707054108299437)) | 3–5 refs, each tagged with the one line it is for |
| 2 | **Light** | The only line that raised film-likeness. 13 of 14 guides; Veo calls cinematography "the most powerful tool for conveying tone and emotion". Vision models read the light in a frame correctly only 41.6% of the time, so it must be written, not inferred. | ×0.79, yet the most "this matters most" claims of any line (11) | One source, direction, hardness, Kelvin; same in every shot |
| 3 | **Subject lock** (not in the six) | All 14 guides cover the subject; Kling, Seedance, Luma, Wan and Nano Banana put it first. Not in our still test. | ×0.74; "if your character sheet is bad, you'll just waste tokens" ([2,624 saves](https://x.com/simonecanciello/status/2111099437065855376)) | Identity block and a sheet on 18% grey |
| 4 | **Framing** | Unprompted models default to a medium shot; the straight-down aerial was met only 58–71% of the time. Vision models read lens size worst (37.7%). | ×0.86 | Shot size, camera height, angle, mm, placement %; a 3D blockout for unusual angles |
| 5 | **Palette** | Obeyed best; colour is the easiest attribute for video models. Invented hex cost film-likeness. | ×1.20; hex codes ×1.58 | 3–5 hex taken from a real reference frame, plus the grade in words |
| 6 | **Motion** | Matters most once it moves, but words land about half the time (VBench mean 49.58%). | ×0.94, not significant | One move, one action, a duration; a reference clip or camera preset |
| 7 | **Texture** | Smallest lift: models added a film look half the time unasked. Matters most for skin and UGC realism. | ×0.93, not significant | One capture medium and its flaws; grain in post |
| 8 | **Type** | Models never add it, and exact text is weak (best T2VTextBench 0.37). | ×1.23; named fonts ×2.19 | Font, weight, size, hex, position; set in code |
| 9 | **Sound** (not in the six) | 8 of 14 guides; outside a still test. | "You've made it look right. We'll make it sound right." ([4,303 saves](https://x.com/MireloAI/status/2110360787780800611)) | Voice, music, room tone, one line each |

## How to prompt each dimension

Write every line of the board as a physical spec the agent can check a frame against: hex codes, a named light source, Kelvin, lens mm, film stock, font name, seconds. Adjectives like "cinematic" or "premium" don't count. The most-saved X posts and all 14 vendor guides agree on this. Saves below are X bookmarks on the cited post.

### Palette

**Rule.** Name 3–5 colours as hex with a role each (shadows, highlights, one accent), build them on one warm/cold contrast, and say what may not be saturated.

- Sora 2's guide: "Naming three to five colors helps keep the palette stable across shots" ([OpenAI cookbook](https://developers.openai.com/cookbook/examples/sora/sora2_prompting_guide)).

- Hex for the big fields, e.g. "a vertical gradient \#081d2c to \#102348" ([@finnardley](https://x.com/finnardley/status/2114305886420086817), 5,291 saves).

- One contrast, named on both sides: "a cold, rainy night against warm pockets of firelight and glowing windows" ([@zer0point_eth](https://x.com/zer0point_eth/status/2116832762912973220)).

- For photoreal footage, the grade is part of the palette: "Drop contrast, push shadows up, add slight fade" ([@brendanhaze](https://x.com/brendanhaze/status/2031092943000346814), 1,716 saves).

- **Fails:** leaving it to the model. Nano Banana Pro comes out grey and flat without a grade ([@recap_david](https://x.com/recap_david/status/2023792981208429046)).

- **Model limit:** colour is what video models hold best. T2V-CompBench: "color is the easiest to manage, followed by texture". A colour that must *change* during a shot fails about 80% of the time (VBench-2.0).

- **Why it works on viewers:** brightness and saturation set the mood more than hue: Pleasure = .69B + .22S (Valdez & Mehrabian 1994).

- **Board line:** `Palette: deep teal shadows #0F3B3F, sodium-orange highlights #E07A2E, one red accent #C1272D on the umbrella; nothing else saturated.`

### Light

**Rule.** One named source, its direction, hardness and colour temperature, motivated by something in the scene. Keep it identical across every shot.

- "85mm. Hard key upper left. 3200K tungsten. 4:1 fill ratio." ([@starks_arq](https://x.com/starks_arq/status/2035367453711360340), 1,753 saves).

- Higgsfield's guide: "one named source, one direction, one color", with a second sun or stray flare ruled out.

- For UGC realism: "Natural window light only" ([@recap_david](https://x.com/recap_david/status/2021970126091039028), 2,168 saves). For character sheets: flat 18% grey, shadowless light ([@sirlifehacker](https://x.com/sirlifehacker/status/2115227821912281228)).

- **Fails:** even, unmotivated light. "They look fake because nobody directed the light" ([@beginnersblog1](https://x.com/beginnersblog1/status/2117355436789977462)).

- **Agent limit:** vision models misread light in reference frames. Across 24 models, ShotBench accuracy is 41.6% on lighting condition. So the board should *state* the light rather than trust the agent's reading of a still.

- **Board line:** `Light: one hard sodium streetlight high camera-left (2000K key), cold blue fill from an advert panel right, wet-pavement reflections, deep black shadows.`

### Framing

**Rule.** Name shot size, camera height and angle, lens in mm, and where the subject sits and how much of the frame it fills. Unprompted models default to a medium shot.

- "Stop letting AI guess your camera angles", plus the trick of calling the subject a "tiny silhouette" to push the camera back ([@tetsuoai](https://x.com/tetsuoai/status/1997397799936139739), 9,884 saves).

- Numbers beat words: "tilted 15-25°", logo filling ~50% of the frame ([@zazzygfx](https://x.com/zazzygfx/status/2042690351526248917)). Head "occupying 50–60% of frame height" ([@VIBEQUIRKLABS](https://x.com/VIBEQUIRKLABS/status/2116168611773726743)).

- GPT Image's guide: call out placement, e.g. "subject centered with negative space on left".

- **Fails:** perfect symmetry reads as AI; keep "slightly uneven framing" ([@genuenci](https://x.com/genuenci/status/2088679915491074155), 3,240 saves).

- **Agent limit:** framing is what vision models read best in films (64.1% mean in ShotBench). Lens size is among the worst (37.7%), so write the mm.

- **Board line:** `Framing: wide shot from knee height, 24mm; she stands small in the right third; empty dark space upper left.`

### Texture

**Rule.** Pick one capture medium (film stock, device or era) and write its physical flaws. For people, list skin detail. Add grain and one compression pass in post.

- "slightly halated streetlights" on 35mm analog ([@xmliisu](https://x.com/xmliisu/status/1993152669150822852), 15,976 saves).

- "Raw friend-recorded early-2000s consumer DV footage" as the first style line ([@kingofdairyque](https://x.com/kingofdairyque/status/2096833375369929039), 4,208 saves).

- "add 2-3% film grain", export 1080p, one compression round ([@knoxtwts](https://x.com/knoxtwts/status/2028840621423644728), 5,763 saves).

- Kling 4.0's guide rejects "Premium look" in favour of "fine matte grain is visible on the surface".

- **Fails:** "photorealistic 8k" and flawless skin. Clean reads as fake.

- **Board line:** `Texture: 35mm Kodak Vision3 500T, fine grain, halation around every light, slightly soft, no digital sharpening.`

### Type

**Rule.** Put the font family, weight, size, position and hex on the board, then set exact text in code (HyperFrames, Remotion) over the footage. Let the model draw text only for one short quoted word.

- "one clean UI font (Geist)" ([@twoclipping](https://x.com/twoclipping/status/2103273003555402193), 21,166 saves). "NO generic fonts (Inter, Roboto, Arial, system-ui)" ([@cloudxdev](https://x.com/cloudxdev/status/2002526815022190985), 4,322 saves).

- GPT Image's guide: "Put literal text in quotes or ALL CAPS and specify typography details (font style, size, color, placement)". Pika: add "No other text".

- Captions from word timings (faster-whisper), not from the video model ([@flxrnc](https://x.com/flxrnc/status/2117318336837017846)).

- **Model limit:** exact text is the weakest skill of video models. The best T2VTextBench score is 0.37 of 1 (Sora). A 2026 paper finds Sora-2 keeps exact text in 0.671 of layouts and Veo 3.1 in 0.416, against 0.940 for the reference renders.

- **Board line:** `Type: title LAST BUS, Barlow Condensed 700, white #FFFFFF, 48px, tracking +200, lower left at x 96 y 960; set in code, not by the model.`

### Motion

**Rule.** Give each shot one named camera move and one subject action, with start, end and duration. Attach a reference clip when you can.

- Sora 2: "Each shot should have one clear camera move and one clear subject action." Seedance 2.0: "Try to specify only 1 type of camera movement in a single shot."

- "naming a style works way better than describing one": give 1–2 reference videos ([@rexan_wong](https://x.com/rexan_wong/status/2103707054108299437), 18,187 saves).

- Timestamped beats, e.g. "0-4s: \[Medium Wide\]" ([@techhalla](https://x.com/techhalla/status/2083389002552664385)). One move with a duration: "The object slowly flips horizontally over 5 seconds" ([@hewarsaber](https://x.com/hewarsaber/status/1911052503686262917)).

- For image-to-video, every vendor that covers it says to prompt motion only: the image already carries subject and look.

- **Model limit:** prompted camera moves land about half the time (VBench mean 49.58%; Sora 27.16%, Kling 1.6 61.73%). EvalCrafter: "All methods cannot perform camera motion control directly using text prompt." Use camera presets or a motion reference where the model has them.

- **Pace:** average Hollywood shot length fell below 4 s after 2000 (Cutting 2011). For short-form: "keep a new image or motion every 2 seconds" ([@gregisenberg](https://x.com/gregisenberg/status/1977828256750403927), 4,534 saves).

- **Board line:** `Motion: slow push-in from 24mm wide to medium over 4 s; she lowers the umbrella at 2 s; rain streaks with motion blur.`

## Databases that make moodboards better

Only three reference libraries let an agent search them itself: FrameThrower, Refs and Are.na, each through an MCP. The big film-still libraries (ShotDeck, FrameSet, Eyecannndy, Shot Cafe) are human-only or ban bots. So the agent should describe their frames in words. Only CC0 or licensed images (Unsplash, Pexels, The Met, Poly Haven, your own stills) should go into models as reference images. A research agent opened all 72 candidates on 2026-11-03, and 65 were verified. The table keeps the useful ones, best for agents first within each dimension.

| Dimension | Database | What it holds | How an agent gets in | Price | Use rights |
|----|----|----|----|----|----|
| References | [FrameThrower](https://framethrower.ai) | 4,326,755 frames and clips from films, ads and animation; search by text, image, colour, lens, shot size | MCP `framethrower.ai/api/mcp` (OAuth) + REST; returns thumbnails and links only | 200 free credits, then \$1 per 1,000 credits | Reference only, never raw images |
| References | [Refs](https://refs.video) | 4,422 launch and product films, 110,419 measured shots | MCP `refs.video/mcp`, search free and keyless (30 an hour) | Free 100 films; Pro \$10–16 a month | No bulk export through the MCP |
| References | [Are.na](https://www.are.na/developers) | The board itself: the agent makes a channel and adds refs with notes | Official MCP `mcp.are.na/mcp` (OAuth) + REST API | Free 200 connections; \$7 a month | No mass downloading |
| References | [Savee](https://savee.com) | 6M+ curated references, search by word, colour, image | MCP `mcp.savee.com/mcp` on paid plans | From \$9 a month | Terms ban caching, storing, and AI training or evaluation |
| References | [Unsplash API](https://unsplash.com/documentation) · [Pexels API](https://www.pexels.com/api/documentation/) | Free photos; Pexels also video, filter by any hex colour and clip length | REST with key; Pexels 200 requests an hour | Free | Commercial use OK with credit: safe to feed into models |
| References | [The Met Collection API](https://metmuseum.github.io) | 470,000+ artworks; open-access images CC0 | No key, 80 requests a second | Free | CC0: paintings as light and palette refs |
| References | [ShotDeck](https://shotdeck.com) | Millions of stills and clips from film, TV, music videos, ads | Human only (login; blocks fetchers) | \$12.95 a month | Internal pitch decks OK; external commercial use not allowed |
| References | [Film-Grab](https://film-grab.com) | Film stills by director, DP, aspect ratio, genre | Static pages | Free | Fair dealing, education and research |
| References | [Shot Cafe](https://shot.cafe) | 24,321 shots from 187 films and 23 ads; tags for shot type, day/night, colour | Pages readable, but terms ban bots | Login for collections | Human lookup only |
| Palette | [Screenmusings Color Lab](https://screenmusings.org) | ~20,000 screencaps from 192 films on a 4,096-colour grid | Static pages | Free | Not stated |
| Palette | [Colormind API](http://colormind.io/api-access/) | Palette generator: lock 1–2 colours, it fills the rest | No key, tested live | Free | Non-commercial; commercial by email |
| Palette | [Huemint API](https://huemint.com/about/) | 2–12 colours with a contrast matrix between roles | No key, tested live | Free | Non-commercial |
| Palette | [Timeline of Historical Film Colors](https://filmcolors.org) | 250+ historical film colour processes with stills | Static pages | Free | Archive images |
| Light | [Poly Haven](https://polyhaven.com) | 997 HDRIs, 869 textures, 521 models | JSON API, no key | Free | CC0; credit if a product uses the live API |
| Light | [set.a.light 3D](https://www.elixxier.com/en/) | 10,000+ community lighting setups, 90+ lights | Desktop app, human only | Lifetime licence | — |
| Framing | [Veo prompt guide](https://docs.cloud.google.com/vertex-ai/generative-ai/docs/video/video-gen-prompt-guide) | First-party words for angles, moves, lens, light | Static page | Free | — |
| Framing | [StudioBinder shot guide](https://www.studiobinder.com/blog/ultimate-guide-to-camera-shots/) | 50+ shot types: size, angle, focus, movement, rigs | Static page | Free | — |
| Framing | [CineScale](https://data.mendeley.com/datasets/th46h4vdwd/1) | 792,000+ frames from 124 auteur films labelled into 9 shot sizes | Download | Free | CC BY 4.0 |
| Texture | [Kodak camera films](https://www.kodak.com/en/motion/products/camera-films/) | The 8 current motion-picture stocks (Vision3 200T, 250D, 500T…) | Static pages | Free | — |
| Texture | [filmdev.org](https://filmdev.org) | 5,629 film recipes, each linked to photos shot on that stock | One-recipe JSON API | Free | No batch download |
| Texture | [ambientCG](https://ambientcg.com) | 2,929 PBR materials, HDRIs, models | JSON API, no key | Free | CC0 |
| Type | [Google Fonts](https://developers.google.com/fonts/docs/developer_api) | 1,959 font families | Metadata JSON without key | Free | Mostly SIL OFL |
| Type | [Fontshare](https://www.fontshare.com) | 100 families | API, no key | Free | Free for commercial use |
| Type | [Fonts In Use](https://fontsinuse.com) | 35,008 documented real-world uses | Static pages | Free | Others' work |
| Type | [Art of the Title](https://www.artofthetitle.com) | Film and TV title sequences with interviews | Static pages | Free | Owners' work |
| Motion | [Higgsfield camera controls](https://higgsfield.ai/camera-controls) | 50+ named camera presets (crash zoom, dolly zoom, FPV, snorricam…) | Gallery page; presets via Higgsfield | Paid | — |
| Motion | [Kling camera control](https://docs.comfy.org/built-in-nodes/partner-node/video/kwai_vgi/kling-camera-controls) | Exact camera parameters instead of prose | Static docs | Free docs | — |
| Motion | [CameraBench](https://huggingface.co/datasets/syCen/CameraBench) | ~3,000 videos, 150,000+ camera-motion labels | Hugging Face | Free | CC BY 4.0 |
| Style codes | [Midlibrary](https://midlibrary.io) | 10,142 Midjourney styles by artist, genre, technique | Static pages | Free | Generated examples |
| Style codes | [sref-midjourney.com](https://sref-midjourney.com) | 5,677 `--sref` codes | Static pages | Freemium | — |
| Style codes | [Civitai API](https://developer.civitai.com/site/reference/images.md) | Public images with the prompt, seed and sampler | REST, key optional | Free | Terms not read |
| Datasets | [DiffusionDB](https://huggingface.co/datasets/poloclub/diffusiondb) | ~1.8M unique image prompts | Hugging Face | Free | CC0 |
| Datasets | [VidProM](https://huggingface.co/datasets/WenhaoWang/VidProM) | 1.67M text-to-video prompts | Hugging Face | Free | Partly CC BY-NC |
| Datasets | [ShotBench](https://huggingface.co/datasets/Vchitect/ShotBench) | 3,572 cinematography questions on frames from 200+ films | Hugging Face | Free | Apache 2.0 |

What changed or broke on 2026-11-03: Godly now redirects to recent.design, srefcodes.com sells no new memberships, Lexica search fails, Strobox and the @CINEMAPALETTES account are gone, and Cinematography Database refused connections.

## The moodboard prompt

Paste this into Claude Code or another agent. It builds the board in the ranked order, tests it on stills, and stops for approval before any video spend. Each step follows one finding above.

```text
You are the art director for an AI video. Build a moodboard that image and video models can follow, then prove it works on stills before anyone spends on video. Stop where it says STOP.

Brief: {what the video is, who it is for, length, aspect ratio, platform}

1. References first. Show, don't describe.
   - Find 8-12 candidates: film or ad frames plus 1-2 motion clips. Search in this order: FrameThrower MCP (frames by lens, shot size, colour), Refs MCP (launch and product films), Are.na. Give ShotDeck, Film-Grab, Shot Cafe and Eyecannndy as links for me to open; don't scrape them.
   - For each one write: link, source, the ONE thing to take from it (light, palette, framing, texture, type or motion), and whether it may be fed to a model (CC0, licensed, our own) or is link-only.
   - Keep 3-5. STOP: show me the reference grid and wait.

2. Pull numbers out of the kept references.
   - Palette: 6 dominant colours per frame by k-means, as hex with % share.
   - Lens, shot size, light source, direction and Kelvin per frame. Mark these "estimated": vision models misread light and lens more often than not.

3. Write moodboard.md. Sections in this order; every line must be something a frame can be checked against (hex, Kelvin, mm, %, font, seconds), never an adjective.
   - Look: one sentence naming genre, era and capture medium.
   - Subject lock: identity block (face, hair, outfit colours, proportions) and a character or product sheet on flat 18% grey with shadowless light.
   - Light: one named source, direction, hardness, Kelvin, what motivates it. Same in every shot.
   - Palette: 3-5 hex taken from the references, with roles (shadows, highlights, one accent), the warm/cold contrast, what may not be saturated, the grade in words.
   - Framing: per shot size, camera height and angle, lens mm, subject position and % of frame; the aspect ratio. For unusual angles, plan a 3D blockout or a reference frame.
   - Texture: one capture medium and its flaws (grain, halation, softness); skin detail for people; in post 2-3% grain and one compression pass.
   - Motion: per shot one camera move, one subject action, duration; average shot length; the motion reference clip.
   - Type: font family, weight, size, hex, position, case and tracking. Set in code (HyperFrames or Remotion), never by the video model.
   - Sound: voice, music, room tone, one line each.
   - Never: "cinematic", "8k", "stunning", evenly lit scenes, perfect symmetry, Inter/Roboto/Arial, purple gradients, centred text fading in.

4. Test it. Generate 3 stills of the hero shot from moodboard.md alone, on two image models if you can.

5. Check every line against every still with a number: palette mean ΔE to the hex set (aim under 15), light direction and hardness, shot size and subject position, film texture visible at 100%. Use a second agent with fresh context as the critic. When a line fails, rewrite that line or attach a reference image for it; don't rewrite the whole board.

6. STOP: show board.html (references, palette swatches, type specimen, the 3 stills, the check table) and wait for my approval before any video generation.

When you later turn the board into video prompts: reference roles first (what each attached image or clip is for), then subject and action, then light, palette and texture, then camera. For image-to-video, write only the motion line; the start frame already carries the look.
```

What a finished `moodboard.md` looks like, using the night bus stop scene from the test:

```markdown
# Moodboard: LAST BUS (15 s, 16:9)

Look: late-1990s city night drama on 35mm tungsten film.
References: [1] night street frame, sodium light -> Light · [2] rainy pavement frame -> Palette · [3] slow push-in clip -> Motion
Subject lock: woman, 30, shoulder-length black hair, charcoal wool coat to mid-calf, red umbrella #C1272D; sheet on 18% grey.
Light: one hard sodium streetlight high camera-left, ~2000K key; cold blue fill from an advert panel camera-right; no other sources.
Palette: shadows teal #0F3B3F, highlights sodium orange #E07A2E, accent red #C1272D (umbrella only); nothing else saturated; low contrast, lifted blacks.
Framing: wide, camera at knee height, 24mm; she stands in the right third at 30% of frame height; dark space upper left.
Texture: Kodak Vision3 500T, fine grain, halation around every light, slightly soft; +2% grain in post.
Motion: shot 1, 4 s: slow push-in from wide to medium; she lowers the umbrella at 2 s; rain in motion-blurred streaks.
Type: LAST BUS, Barlow Condensed 700, #FFFFFF, 48 px, tracking +200, lower left x 96 y 960; set in code.
Sound: rain on the shelter roof, distant traffic, no music until the bus arrives.
Never: evenly lit, perfect symmetry, "cinematic", rendered text, glossy skin.
```

## LLM-as-a-judge: ranking frames without bias

A model judge ranks frames reliably only when it scores the board's lines, not "quality". Give it a checklist with anchored levels, measure in code what code can measure, hide where each frame came from, and rank in pairs shown both ways. In our tests, judges given no criteria preferred the frames that ignored the board.

### What we measured on our own 48 stills

Four extra runs on the same 48 stills, each blind, with new random file names and a new order (2026-11-04).

| Test | Setup | Result | Rule it gives |
|----|----|----|----|
| No criteria | Opus and Sonnet rate "quality 1–10" with only the scene subject | The two agree with each other (r 0.85) but score against the board (r −0.44 with line adherence). No-board frames got 8.1 vs 6.4; the no-board frame beat its full-board twin in 10 of 12 pairs | Never ask for "quality". Agreement between judges does not prove they measure the right thing |
| Retest | Same Sonnet rubric, scored again | Line scores r 0.87, 84% identical. The holistic 1–10 film score: r 0.61, 33% identical, 90% within ±1 | Rank on line scores; treat a 1-point holistic difference as noise |
| Two judges | Opus vs Sonnet, same rubric | Line totals r 0.91; film score r 0.71. Leniency gap 1.2 points on film score, and it reversed (0.9 points the other way) without a rubric | Compare ranks or per-judge z-scores, never raw numbers across judges |
| Pairwise, both orders | 24 pairs shown A/B and B/A (full board vs one line removed or no board) | 1 of 24 flipped (4%); left picked 48% of the time; the full board won 92% of pairs in both orders. Light pairs were hardest: 67% | Rank by pairs shown both ways; keep only consistent verdicts |
| Label leak | The same 12 frames, told "shot on film by an award-winning cinematographer" vs "generated by an AI model" | 1.25 points lower under the film label (p 0.001), and the order changed (Spearman 0.41). Under the film label, no-board frames outscored board frames | Never tell the judge where a frame came from |

### What research and X say

- **Position bias is real and worst on close pairs.** GPT-4 kept its verdict on only 65% of swapped pairs ([Zheng et al.](https://arxiv.org/abs/2306.05685)). The swap conflict rate was 46.3% for a close pair and 5.0% for a clear gap ([Wang et al.](https://arxiv.org/abs/2305.17926)).

- **Judges favour their own family.** GPT-4 gave itself +10% win rate, Claude-v1 +25% (Zheng). GPT-4 recognises its own outputs 73.5% of the time ([Panickssery et al.](https://arxiv.org/abs/2404.13076)). A three-family panel reached Cohen's κ 0.763 vs 0.627 for GPT-4 alone, at 7x lower cost ([PoLL](https://arxiv.org/abs/2404.18796)).

- **References and rubrics matter most.** Without the reference answer, Prometheus fell from Pearson 0.860 to 0.642 with humans ([Prometheus](https://arxiv.org/abs/2310.08491)); a reference cut judge failures from 70% to 15% (Zheng).

- **Multimodal judges are best in pairs.** GPT-4V: pairwise accuracy 0.773, scoring Pearson 0.490, batch ranking far from human order. Repeat consistency 0.675 for pairs, 0.611 for scores, 0.418 for batch ranking ([MLLM-as-a-Judge](https://arxiv.org/abs/2402.04788)).

- **Vision models cannot measure what boards specify.** GPT-4o picks the right hex code 40.6% of the time ([ColorBench](https://arxiv.org/abs/2504.10514)). On camera motion it scores 36.4 average precision vs 50.1 for structure-from-motion ([CameraBench](https://arxiv.org/abs/2504.15376)), and 48% on lighting condition ([ShotBench](https://arxiv.org/abs/2506.21356)).

- **Visual tricks inflate scores.** Bounding boxes raised GPT-4o's score by up to 80.2%, and the instruction written on the image by up to 44.1% ([Fooling the LVLM Judges](https://arxiv.org/abs/2505.15249)). Frontier models match a human 1–5 video score exactly only 26–29% of the time ([VideoScore2](https://arxiv.org/abs/2509.22799)).

- **Scales:** 0–5 aligns best with humans and 0–10 worst ([grading-scale study](https://arxiv.org/abs/2601.03444)).

- **On X:** split each criterion into atomic yes/no questions and aggregate in code ([@omarsar0](https://x.com/omarsar0/status/2070942495832470001), 3,867 saves). Run deterministic checks first and start from error analysis of real outputs ([@divaagurlxw](https://x.com/divaagurlxw/status/2115418017891020888), 4,623 saves). Calibrate on 50–100 human-labelled examples and report Cohen's κ ([@undefinedKi](https://x.com/undefinedKi/status/2084279627204235703), 2,749 saves). Rewording one judge question moved accuracy from 93.5% to 40.9% ([@TeksEdge](https://x.com/TeksEdge/status/2115179227687666154)). Half of 147 rubric-graded tasks had missing criteria ([@SnorkelAI](https://x.com/SnorkelAI/status/2117363300090396713)). For video, Artificial Analysis ranks by pairwise Elo per axis ([post](https://x.com/ArtificialAnlys/status/2114845067026571365)).

### The protocol

1.  **Label a gold set first.** The art director marks 50–100 frames, about half of them failures, line by line. Every judge is measured against it.

2.  **Write the criteria from the board.** One question per line, with anchored levels (0 / 1 / 2) or yes/no atoms that name what must be visible. Never "quality", "cinematic" or "premium".

3.  **Measure in code first.** Palette by ΔE (`scripts/palette.py`), on-screen text by OCR, camera moves by optical flow, identity by face embeddings. The model judges only what code cannot.

4.  **One line per call, evidence before the score.** The judge writes what it sees, then scores. Short evidence, not a long chain of thought.

5.  **Show the references.** Each call gets the board line and the reference frame it came from.

6.  **Blind everything.** Random ids; no model names, prompts, versions, costs, earlier scores or source labels; same resolution for every frame; no overlays or boxes.

7.  **Use two judges from families other than the generator.** Convert each judge's scores to ranks or z-scores before combining them.

8.  **Rank in pairs, both orders.** Keep a win only if it holds both ways; otherwise it is a tie for a human. Gate frames one by one first, then sort survivors pairwise.

9.  **Gate with the minimum.** A failed must-have line or a defect (anatomy, text artefacts, plastic skin) rejects the frame; lines that don't apply are N/A, not zero.

10. **Sample at low temperature, three times.** A verdict that changes between samples goes to a human.

11. **Freeze and monitor.** Use the judge only once Cohen's κ against the gold set is at least 0.6, and automate at 0.8 or above. Freeze the prompt wording and re-check against a fresh human sample every month.

12. **Never let the maker grade itself.** The critic runs in a fresh context and sees only the board, the references and the frames.

### Copy-paste judge prompt

```text
You are a blind judge of AI-generated frames for one moodboard. You did not make these frames and you do not know which prompt, model or version made each one. Never guess.

Inputs: moodboard.md, the reference frames, measured values from code (palette mean ΔE per frame, OCR text, camera-motion class if video), and the frames to judge, named only by random ids.

For EACH frame, one line at a time:
1. Write what you SEE for the line in one short phrase (evidence), then the score. No score without evidence.
2. Score 0 / 1 / 2 against the board's exact words:
   - Palette: use the measured ΔE (≤ 15 or within 5 of the reference = 2, ≤ 20 = 1, else 0), then check that nothing else saturated appears.
   - Light: 2 = key from the named side and height, named hardness, one source family; 1 = right source, wrong side or hardness; 0 = flat or a different source.
   - Framing: 2 = named shot size, camera height and angle, subject at the named place and size (±10% of frame); 1 = one step off; 0 = different shot.
   - Texture: 2 = the named medium and flaws visible at 100%; 1 = generic film look; 0 = clean digital or plastic.
   - Subject: 2 = identity, outfit and colours match the sheet; 1 = one detail off; 0 = different.
   - Motion: 2 = the named cue or camera move happens; 1 = partly; 0 = absent or different.
   - Type: n/a unless the board says the model draws it; then judge the OCR text, not your reading.
3. Defects, pass/fail: anatomy, text or logo artefacts, plastic skin, perfect symmetry. Any fail = reject.

Then rank:
4. Compare survivors in pairs, each pair twice (A/B, then B/A). Keep a win only if both orders agree; otherwise mark a tie.
5. Order: rejects last, then by the lowest line score, then total, then pairwise wins on "closer to the reference frames".

Ignore file names, image order and resolution. Never reward detail the board did not ask for. Output JSON per frame: {id, evidence{line}, scores{line}, defects{name}, verdict: keep | fix:<line> | reject}, then the ranking with ties marked.
```

Data: the four runs with keys and scores, 1,710 X posts on judging (114 quotes checked by script) and 73 research findings are in vargHQ/aeo research/2026-11-03-moodboards/llm-judge (aeo#28).

## Sources

X posts are linked where they are quoted. The full dataset (posts, reader outputs, test prompts, image links, judge scores, scripts) is in vargHQ/aeo research/2026-11-03-moodboards, merged as aeo#19. All pages below were opened on 2026-11-03.

**Official prompting guides**

- [Google Veo prompt guide](https://docs.cloud.google.com/vertex-ai/generative-ai/docs/video/video-gen-prompt-guide) and [Veo 3.1 prompting guide](https://cloud.google.com/blog/products/ai-machine-learning/ultimate-prompting-guide-for-veo-3-1)

- [OpenAI Sora 2 prompting guide](https://developers.openai.com/cookbook/examples/sora/sora2_prompting_guide) (Sora 2's API page says the models were shut down on 2026-09-24)

- [Runway text-to-video prompting guide](https://help.runwayml.com/hc/en-us/articles/47313737321107-Text-to-Video-Prompting-Guide)

- [Kling 4.0 user guide](https://kling.ai/quickstart/kling-4-model-user-guide) and [Kling text-to-video guide](https://kling.ai/quickstart/text-to-video-prompt-guide)

- [Seedance 2.5 prompt guide](https://docs.byteplus.com/en/docs/ModelArk/seedance-2-5-prompt-guide) and [Seedance 2.0 prompt guide](https://docs.byteplus.com/en/docs/ModelArk/seedance-2-0-prompt-guide)

- [Luma best practices](https://lumalabs.ai/learning-hub/best-practices)

- [MiniMax video generation guide](https://platform.minimax.io/docs/guides/video-generation)

- [Alibaba Wan video prompt guide](https://www.alibabacloud.com/help/en/model-studio/text-to-video-prompt)

- [Pika H3 Flex prompt guide](https://pika.art/learn/pika-h3-flex-prompt-guide)

- [Higgsfield: AI video prompt mistakes](https://higgsfield.ai/blog/ai-video-prompt-mistakes)

- [Midjourney moodboards](https://docs.midjourney.com/hc/en-us/articles/39193335040013-Moodboards) and [style reference](https://docs.midjourney.com/hc/en-us/articles/32180011136653-Style-Reference)

- [Nano Banana prompting guide](https://cloud.google.com/blog/products/ai-machine-learning/ultimate-prompting-guide-for-nano-banana)

- [OpenAI image prompting guide](https://developers.openai.com/cookbook/examples/multimodal/image-gen-models-prompting-guide)

**Research**

- [VBench](https://arxiv.org/html/2311.17982), [VBench-2.0](https://arxiv.org/html/2503.21755) and the [VBench leaderboard](https://huggingface.co/spaces/Vchitect/VBench_Leaderboard): camera motion, attribute changes

- [T2V-CompBench](https://arxiv.org/html/2407.14505): colour and texture are the easiest attributes

- [EvalCrafter](https://arxiv.org/html/2310.11440): camera motion from text

- [T2VTextBench](https://arxiv.org/html/2505.04946) and [design video evaluation](https://arxiv.org/html/2605.16223): on-screen text

- [ShotBench](https://arxiv.org/html/2506.21356) and [CameraBench](https://arxiv.org/html/2504.15376): what vision models read in film frames

- [Xie et al., prompt log analysis](https://arxiv.org/html/2303.04587): how often people write "lighting" and "cinematic"

- [Soydaner & Wagemans](https://arxiv.org/pdf/2311.14410): what drives aesthetic scores

- [Valdez & Mehrabian 1994](https://pubmed.ncbi.nlm.nih.gov/7996122/): colour and emotion

- [Cao et al. 2024](https://www.nature.com/articles/s41599-024-03874-w): colour vs editing in film

- [Cutting et al. 2011](https://pmc.ncbi.nlm.nih.gov/articles/PMC3485803/): Hollywood shot length

## Go deeper

- The skill: [video-moodboard](https://github.com/vargHQ/skills/tree/main/video-moodboard) (`npx skills add vargHQ/skills --skill video-moodboard`)
- The designed version of this guide, with every picture and clip: https://varg.ai/how-to/make-a-moodboard-for-an-ai-video
- Every claim of the ten steps traced to its source: [the evidence bank](https://varg.ai/how-to/guide-pages/evidence-bank/)

## All 10 steps

The route, with the one line that hands it to an agent: [How to make a video with an AI agent in ten steps](https://varg.ai/how-to/make-a-video-in-ten-steps.md)

1. [How to find references for an AI video](https://varg.ai/how-to/find-references-for-an-ai-video.md)
2. How to make a moodboard for an AI video (this page)
3. [How to write a video script with an AI agent](https://varg.ai/how-to/write-a-video-script-with-an-agent.md)
4. [How to design sound and voice for an AI video](https://varg.ai/how-to/design-sound-and-voice-for-ai-video.md)
5. [How to design characters and props for AI video](https://varg.ai/how-to/design-characters-and-props-for-ai-video.md)
6. [How to previz a video in Three.js or Blender](https://varg.ai/how-to/previz-a-video-in-threejs-or-blender.md)
7. [How to animate a previz with AI video models](https://varg.ai/how-to/animate-a-previz-with-ai-video-models.md)
8. [How to edit a video with HyperFrames and AI agents](https://varg.ai/how-to/edit-a-video-with-hyperframes-and-agents.md)
9. [How to judge an AI video: measure, don't grade](https://varg.ai/how-to/judge-an-ai-video-without-bias.md)
10. [How to keep an AI video project in GitHub](https://varg.ai/how-to/keep-a-video-project-in-github.md)
