feat(outline): Design Brief mode — natural-language brief + structured media manifest#754
Draft
wyuc wants to merge 1 commit into
Draft
feat(outline): Design Brief mode — natural-language brief + structured media manifest#754wyuc wants to merge 1 commit into
wyuc wants to merge 1 commit into
Conversation
…d media manifest When requirements.designBriefMode is set, the outliner emits, per slide scene: - brief: a detailed natural-language design brief (the primary slide-content input) - media[]: a structured manifest unifying source (asset) and to-be-generated media, referenced by id from the brief Media discipline in the prompt stops the model from over-emitting decorative image placeholders (most slides need none; icons are drawn with shapes). media[] generate items are bridged into the existing mediaGenerations pipeline (uniquifyMediaElementIds), keeping ids consistent across media[], mediaGenerations and the brief. slide-content consumes the brief as the authoritative layout spec when present. Fully opt-in; default behavior unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Design Brief mode — natural-language brief + structured media manifest
Draft / RFC — opening for design discussion. Default behavior is unchanged; everything is behind an opt-in flag.
Motivation
The outliner today describes each slide with a terse
{description, keyPoints}. Two problems show up downstream:What this adds (opt-in via
requirements.designBriefMode)For every
slidescene, the outliner now emits:brief— a detailed natural-language design brief (page goal, visual style + palette in words, region-based layout, the actual written-out content, focal emphasis). It becomes the authoritative slide-content input when present.media[]— a structured manifest of the images/videos the slide actually needs, unifying real assets and to-be-generated media:gen_img_1,img_2), with mandatory two-way consistency (every brief id ⇔ amediaentry).The prompt also adds media discipline: most slides need zero images (icons/dividers are drawn with shapes;
table/chart/latexcarry information), and media is only requested when it carries irreplaceable visual information.How it wires into the existing pipeline
media[]generateitems are bridged into the existingmediaGenerations(andassetitems intosuggestedImageIds) insideuniquifyMediaElementIds, so the current media-orchestrator dispatches generation unchanged. The id-uniquification now rewritesmediaGenerations,media[]and the inline brief references together, so all three stay consistent.slide-contentconsumesbriefas the authoritative layout spec (new{{#if brief}}block); media flows through the existing generated-image instructions once bridged. Model-agnostic — no change to model routing.Scope / files
8 files, ~150 lines: types (
SlideMediaItem,SceneOutline.brief/media,UserRequirements.designBriefMode), therequirements-to-outlinesprompt (gated blocks + two worked examples), themedia[]→mediaGenerationsbridge, andslide-contentbrief consumption.Open questions for reviewers
designBriefModehere — should it instead be a setting / per-stage option, and should there be a UI toggle (not included yet)?media[]manifest the canonical media field longer-term and derivemediaGenerationsfrom it everywhere, vs the current additive bridge.Status
Types compile (
tsc --noEmitclean). Not yet wired to a UI toggle (backend accepts the flag). Looking for feedback on the interface before fleshing out tests + UI.