The release kit composes: looks, moments, poster templates, motion, the picture pass and the judge - #133
Draft
hblee12294 wants to merge 8 commits into
Draft
The release kit composes: looks, moments, poster templates, motion, the picture pass and the judge#133hblee12294 wants to merge 8 commits into
hblee12294 wants to merge 8 commits into
Conversation
… and a hairline studio-core gains frame.inset (per-side placement as fractions of the frame; a negative side bleeds the card past the edge), frame.shadowContact and frame.shadowColor, and a pure look module: three house looks (plate, gradient, dark), lookFromBrand, cardInset (card or hero placement from the two aspects) and applyLook. ON_FRAME and computeCardLayout change together; cardInset.test.ts pins their parity and the no-inset byte parity. vos deliver presents card-genre stills with no poster and every video cut in a look: --look plate|gradient|dark|none, --brand <file>, else the BRAND.md beside the take decides from its look role or its own ground, else the house gradient. Screenshot-genre stills never take one. kit.json records the look. vos brand writes the look role from the site's ground.
…rames dropped and said vos deliver picks its still moments from the story instead of the camera: every step's gesture end plus a 0.4 s settle (the response, not the travel), then the zoom apexes, then an even spread. Each candidate is captured once at probe size as the real page and measured from its pixels: a candidate under the take's own ink floor (a wallpaper, an empty canvas) is dropped, and two candidates that hash alike collapse to one, every drop said in skipped[]. --times takes step:<id>[+offset] beside seconds and percents. kit.json records the moments and their sources. picture.ts holds the pure primitives (a dependency-free PNG decoder, ink coverage, a difference hash, the ground/card/shadow measurement); moments.ts the rungs and the pick.
… pixels The kit verifier gains a picture pass beside the spec pass. Every finding carries a code, a severity, a message written from the failure it was built on, a fix hint and a box: blank (a wallpaper or an empty canvas where the product should be), duplicate (cards of one frame; two is a warning, three is an error; screenshot sets compare within their own destination), subject (a card off the 60 to 92 percent band or a crop where a card was asked for; a composed store screenshot, read from the manifest), separation (a light card on a light ground with no shadow halo and no drawn edge), halfsize (a tile that loses its edges when shrunk), and, where the manifest records text boxes, sliced, safe and contrast (APCA Lc 60/75); a video's first and last frames are read through ffmpeg when it is on PATH. The measurement takes two thresholds: the strong box is the content, the faint box is the object with its halo and hairline, the shadow is a halo that darkens toward the card, and a drawn edge is the median of a column. channel-specs.json carries a structured text policy and safe rect per destination, generated into DESTINATIONS.
A poster template is a program with a contract (config.template: the slot that carries the release's shot, the params the brand and the release fill, the text elements and their limits, a layout per aspect). Two ship with the CLI, every word, colour and face a data binding: split-cover (a headline column beside the shot, bled off the right and the bottom, the wordmark low-left) and card-on-gradient (the shot alone on a mesh gradient, the store's tile rule). The filler places the shot per destination in design px, writes the values into data and params, and reports the text boxes it placed for the picture checks. vos deliver renders every card destination from its default template (channel-specs names it) unless --poster names another, a file, a hosted vos, or none. The shot is captured once at the hero moment and baked as an object (padded, rounded, a soft shadow, a hairline on a light ground) before it enters the template. Values come from BRAND.md's roles (faces resolved against the hosted font catalog) and LAUNCH.md's headline and kicker beside the take, or --headline/--kicker; with no headline the headline templates stand down for card-on-gradient, said in words. kit.json records the template and the text boxes per card.
A poster card's composition is the template's, so its subject is the shot: the filler reports where each slot's card landed, kit.json records it, and the picture pass reads ink inside the shot and its width against the band instead of hunting for a card on a designed ground. Supplied values win over a template's own defaults (the kicker showed the template's default). The softened ink mixes 28 percent toward the ground so a kicker clears the body contrast floor.
… by destination, the vertical reframe studio-core: frame.entrance (tilt-in, pull-out, rise) writes the head of the tilt or zoom track and a card-pose track (scale, rise, opacity), so the card's only rotation is still the tilt track; a segment's hold freezes its last frame for its seconds as a rated piece every reader inherits; doc.endCard expands into a hold plus the house title, caption and label overlays over a receding card; frame.focusFollow lets a cover crop follow the camera's focus. A doc with none of them lowers byte-identically. vos deliver plans each video destination by kind: every cut but a loop opens on an entrance and closes on an end card built from the headline, the release line and the wordmark; a step's caption in actions.json lands as a lower-third at its moment on cuts that take words; destinations that play sound take a bed from the catalog by LAUNCH.md's music slug or mood and a click sound on every press when the take has no mic; the 9:16 cut is a reframe whose crop follows the camera. A loop destination the take outruns takes the take's first seconds up to its cap instead of being skipped.
…bric, a verdict slot For every still that has a reference of its role in a manifest (a template family, a card genre, a video's first frame), the verb composes two sheets at a common height (the asset left, then right, so order cannot bias the call), writes the rubric beside them and a judge.json the judge fills; the win rate is reported beside the spec and picture counts. No model runs in the verb. The entrance keeps the card visible on the first frame and rests the camera while the card arrives.
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.
The kit that
vos deliverwrites was a crop of a recording: one frame at eight aspects, bled to every edge, no ground, no message, no motion. The premium launch assets it is measured against are compositions of a subject: a designed ground with room, a window that is an object, a message in its own column, a clip that enters and ends on a poster. This PR makes those layers defaults and data, and gives the pipeline eyes.studio-core
frame.inset: per-side card placement as fractions of the frame; a negative side bleeds the card past the edge.frame.shadowContactandframe.shadowColor. ON_FRAME andcomputeCardLayoutchange together (cardInset.test.tspins parity and the no-inset byte parity).look.ts(pure): three house looks (plate, gradient, dark),lookFromBrand,cardInset(card or hero placement from the two aspects),applyLook.lower/motion.ts:frame.entrance(tilt-in, pull-out, rise) writes the head of the tilt or zoom track plus a card-pose track; a segmentholdis a rated piece every reader inherits;doc.endCardexpands into a hold plus the house overlays over a receding card;frame.focusFollowlets a cover crop follow the camera. A doc with none of them lowers byte-identically.cli
vos deliver: the look fromBRAND.mdbeside the take (or--look); still moments from the step timeline with blank and duplicate frames dropped and said (--times step:<id>); every card destination composed from a bundled poster template (split-cover,card-on-gradient; a program with aconfig.templatecontract, filled with the brand's colours and faces andLAUNCH.md's headline, the shot baked as an object); each video planned by kind (entrance, end card, beat captions fromactions.json, a music bed and click sounds where the channel plays sound, the 9:16 reframe); a loop the take outruns takes its first seconds.vos validate <kit.json> --picture: blank, duplicate, subject, separation, halfsize, sliced, safe, contrast, firstlast, each with a code, a severity, a fix hint and a box.vos judge <kit.json> --against <manifest>: pairwise sheets beside a reference set, the rubric, a verdict slot, the win rate. No model runs inside the verb.vos brandwrites alookrole.Tests: studio-core 593, cli 254, all green; eslint and typecheck clean across packages. A changeset bumps studio-core and cli minor.
🤖 Generated with Claude Code
https://claude.ai/code/session_01MLwe3sd8rp4eFvGxzAyySx