OGraf Studio 0.06
OGraf Studio 0.06 combines built-in BYOK AI authoring, reusable broadcast design systems and recipes, EBU R 95 layout guidance, deterministic fit-to-width text, an infinite canvas, scalable resource/layer navigation, and a substantially clearer timeline and editor interface. Authored graphics remain ordinary portable OGraf layers, fields, tracks, and packaged resources.
In-app BYOK authoring chat
- Added a persistent, collapsible Layers / Chat sidebar with server-side Anthropic and OpenAI-compatible request/tool loops over the same canonical authoring records as MCP.
- Reduced the in-app surface to 14 tools and kept save, export, certification, import, and project reset as explicit Studio actions. Visually consequential batches retain the existing human Accept/Reject proposal flow.
- Added a deterministic approximately 6.5k-token system prompt generated from the complete
ograf-authoringSkill, with verification-time drift and token-budget gates. - Ambient selection, current frame, zoomed viewport, and recent edit context remain outside the
stable cached prefix. Provider cache-read usage and per-message/session/project token totals are
visible without entering portable
.ogeprojsource. - Credentials stay server-side in Windows Credential Manager or the process environment. The editor receives only configuration/availability state, redacted progress, proposal references, and usage. External MCP activity is visible and an optional session-local exclusive lock arbitrates the two agent front doors.
Broadcast style packs and materialized recipes
- Added immutable News, Sports, Entertainment, and Documentary style-pack definitions containing palette, modular type scale, font weight/stack, radius, outline, and motion conventions.
- Applying a pack copies normal editable Brand Kit tokens and materializes compatible semantic layer properties. No pack metadata or proprietary runtime dependency enters exported OGraf.
- Added materialized bug/DOG, clipped ticker/crawl, two-team scoreboard, and 24-hour clock recipes alongside lower thirds and repeaters. Every recipe returns ordinary editable grouped layers, constrained fields, semantic roles/tags, complete ID mappings, and deterministic tracks.
- Ticker motion uses an absolute-time local X loop inside a
clipChildrenwindow rather than a lifecycle-long translation. Scoreboard values use the document-v20 text-outline model.
EBU R 95 safe areas and text fitting
- Replaced legacy 5% action / 10% title assumptions with EBU R 95 16:9 action-safe (3.5%) and title/graphics-safe (5%) per-axis insets.
- Centralized integer-pixel safe-area geometry for HD/UHD canvas overlays, scene projections, broadcast QA, MCP lint, and AI guidance. Reference fixtures cover 1920x1080 and 3840x2160.
- Added Fit to width beside Auto size, Shrink text to box, and Fixed box. The shared editor/export DOM renderer finds the largest proportional font size contained by both fixed box axes without stretching glyphs or permitting overflow.
- Refitting reacts to data, explicit line breaks, box animation/resizing, animated text outline, packaged-font loads, and unscaled composition-pixel measurement so canvas zoom cannot contaminate the result.
Infinite canvas and scalable project navigation
- Removed visible bottom/right canvas scrollbars and replaced the finite pasteboard with a recentering node-graph-style camera in Edit and main OGraf Preview.
- Plain mouse wheel now performs pointer-anchored canvas zoom; Ctrl/Command plus/minus keyboard shortcuts remain. Middle-button panning, off-frame selection, Moveable controls, rulers, guides, snapping, and output clipping stay aligned to the virtual camera.
- Added document-v21 Dim outside canvas (18%). Four camera-aware regions darken only the pasteboard; composition pixels, capture, certification, and exported alpha remain unchanged.
- Layers retain authoritative paint order while parent depth controls indentation. Dragging onto a row centre assigns a parent; upper/lower quarters reorder before/after. Self-parenting and cycles are rejected.
- Converted Resources to a compact counted ARIA tree for Brand Kit, Components, Images, Fonts, and Source attachments. Branch/item expansion is transient UI state and all prior import, metadata, package-path, license, usage guard, component refresh, and deletion behavior remains available.
Timeline readability and interaction
- Replaced thin key-to-key exposure strips with full-height colored rectangles, neutral gray borders, centered frame/easing labels, and 18 px layer/property/lifecycle diamonds.
- Expanded Position X/Y, Width, Height, Rotation, Alpha, outline, and effect rows now use the same 28 px row height, 12 px labels, full-height blocks, and diamond size as their parent layer.
- Centered
∞inside loop-activation diamonds. Collapsed layers retain a summary badge, while expanded property rows mark only the properties that actually contain local-loop tracks. - Corrected lifecycle diamond geometry so Start, every Step, and End align at zero-pixel difference from same-frame layer keys.
- Made ruler and left-gutter headers sticky/opaque above scrolling blocks, diamonds, layer names, and property names while retaining the playhead above both headers.
- Separated selection from navigation: single-clicking lifecycle, layer, or property keys selects without moving the playhead; double-click seeks to that key. Empty track clicks select only; double-click continues to add a key and seek there.
- Added a three-pixel drag threshold so pointer jitter cannot move a key. Real key/lifecycle drags, ruler scrubbing, and playhead scrubbing remain seek-aware. Shift+double-click retains lifecycle Step rename.
Editor UI consistency
- Consolidated Studio chrome to one system UI family plus one monospace diagnostics family, with only 12 px primary/control text and 10 px compact metadata text. Authored graphic typography is isolated and unchanged.
- Applied the typography contract to buttons, inputs, selects, and textareas. Font controls identify selected template families without restyling Studio widgets.
- Reduced resizable panel dividers from 6 px to 3 px while preserving larger invisible grab areas.
- Normalized Resources actions and frame/millisecond duration controls to explicit high-contrast Studio colors, borders, padding, radii, focus/hover states, and readable disabled states.
- Moved Align/Distribute/Group controls next to insertion tools. The contextual unit wraps together at narrow widths and shows only Group or Ungroup according to the selection.
Validation
npm run verifypasses generated MCP-contract and in-app-prompt drift, formatting, lint, every workspace typecheck, 332 tests across 68 files, the runtime bundle, and the production editor build.- The generated MCP contract is 146,764 bytes, below the enforced 150,000-byte context budget. The authoring-only catalog and in-app prompt remain outside the playout bundle.
- Live browser checks verified exact two-family/two-size UI typography, 3 px panel dividers, full-height timeline/property rows, centered loop badges, zero-pixel lifecycle/key alignment, sticky scroll headers, high-contrast Resources/duration controls, contextual toolbar placement, and single-click selection versus double-click seeking.
- Existing recipe/template validation remains at 99/100 design QA with the advisory padding-rhythm finding; deterministic half-loop ticker sampling and all five dual-profile certification gates passed.
Current boundaries
- Headless render/certify remains explicitly deferred. Browser-backed capture, measurement, certification, save, and export require one connected responsive OGraf Studio tab.
- One real customer-provider BYOK smoke test is still required; local provider-wire mocks cover both endpoint dialects, tool normalization, cache accounting, cancellation, and redaction.
- Streaming chat deltas, persisted transcript history, provider price conversion, and additional provider adapters remain follow-up work.
- The production editor build retains the existing non-blocking large-chunk advisory.