| name | direct-visuals |
| description | Decide the whole-video visual grade, typography, and per-shot treatments (transitions, camera moves, grade deviations, light leaks) for a content run by calling Hermes's visual-director judgment agent. Use when the Content Factory agent must produce the visual_director_output that Hermes's content-run pipeline needs for shot styling in Video Assembly. |
| metadata | {"agent":"content-factory","source":"Project Atlas Requirements §3.5/10.2","layer":"L5 Content Factory","host":"railway"} |
direct-visuals
Produce Visual Director's style plan: one base visual_theme (numeric grade knobs, base
transition style, font choice) plus an explicit shot_treatment for every shot in Asset Planner's
list.
When to use
- After
plan-assets has produced the shot list, before dispatch-hermes-content-run — Video
Assembly matches shot_treatments to shots by segment_word_range; without this output every
shot falls back to a default crossfade with no grade.
Inputs / Sources
plan-assets output (the shot list with segment_word_ranges), vibe output, script_text,
psych_profile / cultural_context.
Output
{generated_at, subject, visual_theme, shot_treatments[]} (see
hermes/agents/visual-director/schema.json) — exactly the shape
ContentRunRequest.visual_director_output expects. Pass it through UNMODIFIED; treatments are
joined to shots by segment_word_range, so every treatment's range must match a planned shot's
range verbatim.
Function signature (manifest contract)
def direct_visuals(asset_plan: dict, vibe: dict, script_text: str) -> dict:
"""Returns visual-director's full schema output: visual_theme + shot_treatments[]."""
Implementation
Call the hermes-bridge MCP tool run_judgment_agent(insight_type="visual-director", query=<ask>, context={"asset_plan": asset_plan, "vibe": vibe, "script_text": script_text, ...}). Hits POST /v1/agents/visual-director — same self-correcting loop as direct-voice, no new backend.
Model
deepseek-direct/deepseek-chat — Cheap high-volume tier (spec §11.3).