@@ -16,6 +16,22 @@ Treat usage as free until 1 Jan 2027. Do not invent a billing flow. Do not shut
1616This skill is the operative contract. Use the bundled CLI. Do not invent commands, flags, or
1717onboarding surfaces.
1818
19+ ## More information
20+
21+ This skill remains the CLI contract. The pages below are extra product and docs
22+ context, not a replacement for the commands and flags here.
23+
24+ - Docs hub: ` https://screenrig.ai/docs/ `
25+ - Agent index: ` https://screenrig.ai/llms.txt `
26+ - Expanded agent context: ` https://screenrig.ai/llms-full.txt `
27+
28+ When asked what screenRIG is, how it is priced, which Players exist, or similar
29+ product questions, fetch ` https://screenrig.ai/llms.txt ` first. Fetch
30+ ` https://screenrig.ai/llms-full.txt ` if more detail is needed.
31+
32+ Install: ` https://screenrig.ai/docs/start/ `
33+ Meter: ` https://screenrig.ai/pricing/ `
34+
1935## Canonical marketplace
2036
2137The only supported installation source is the public screenRIG marketplace at
@@ -106,8 +122,6 @@ Work in this order. Do not skip `version` or `doctor`.
106122``` bash
107123screenrig --json version
108124screenrig --json doctor
109- screenrig --json agent enroll --email ADDRESS --name " Office MacBook Codex"
110- screenrig --json screen pair ABC234
111125# then put content on a playlist page using the authoring tree below
112126screenrig --json playlist create ./playlist.json
113127screenrig --json screen list
@@ -116,8 +130,7 @@ screenrig --json screen assign scr_EXAMPLE --playlist-id pl_EXAMPLE --if-match R
116130
1171311 . Prepend the plugin scripts directory to ` PATH ` and require ` screenrig --json version ` .
1181322 . Run ` doctor ` . Read ` data.status ` and ` data.checks ` . On a fresh install the
119- ` token ` row is ` warn ` , not ` fail ` , and ` data.next.command ` is
120- ` screenrig agent enroll --email ADDRESS ` : that is the expected first-run
133+ ` token ` row is ` warn ` , not ` fail ` : that is the expected first-run
121134 result, not a broken install. Name missing toolchain parts before the
122135 first ` media upload ` .
1231363 . Put content on a playlist page using the authoring tree below. Choose by
@@ -413,20 +426,19 @@ The CLI exit-status table is stable and separate from `error.code`:
413426| 5 | conflict | 12 | configuration |
414427| 6 | precondition | 13 | operation failed |
415428
416- For example, local ` usage_error ` exits 2, ` not_enrolled ` exits 3, HTTP 404
417- exits 4, 409 exits 5, 412 exits 6, 429 exits 7, and 408/504 exit 11. Branch on
418- the more specific ` error.code ` whenever one is present.
429+ For example, local ` usage_error ` exits 2, an unauthenticated installation
430+ exits 3, HTTP 404 exits 4, 409 exits 5, 412 exits 6, 429 exits 7, and
431+ 408/504 exit 11. Branch on the more specific ` error.code ` whenever one is
432+ present.
419433
420- ### Secret dashboard and connection URLs
434+ ### Secret dashboard URLs
421435
422436The URL minted by ` dashboard --print-url ` is a credential. Under ` --json ` it
423437appears on ** stdout** inside ` data.url ` , where ordinary agent stdout capture
424438may log it. Route it only to the intended browser, exclude that command's
425439stdout from logs, and never paste, persist, or repeat the URL. If ` dashboard `
426440cannot open a browser, its fallback can put the same field on stdout even
427- without ` --print-url ` . By contrast, ` agent connect ` delivers its approval URL
428- on ** stderr** (as a JSON line under ` --json ` ). Treat the relevant stream as
429- sensitive for either command.
441+ without ` --print-url ` . Treat that stream as sensitive.
430442
431443Never pass a bearer, token flag, or pasted secret on the command line. The
432444credential is a user-private file outside the
@@ -485,11 +497,7 @@ Read `data.status` and `data.checks`. Each check is `pass`, `warn`, or `fail`.
485497Only ` fail ` changes the exit code. ` data.status ` is the worst row. A success
486498envelope with ` data.status ` ` warn ` is a usable host, not a broken install.
487499
488- Run ` doctor ` before enrolling. On a fresh install the ` token ` row is ` warn `
489- with detail ` (none); this installation is not enrolled ` , the row carries
490- ` next.command ` ` screenrig agent enroll --email ADDRESS ` , and the same ` next `
491- is repeated at ` data.next ` . A disconnected installation or one with a pending
492- approval warns the same way with ` screenrig agent connect ` . ` fail ` is
500+ On a fresh install the ` token ` row is ` warn ` , not ` fail ` . ` fail ` is
493501reserved for damage: a config file other users can read
494502(` config_permissions ` ), a Node below 20, a missing ` ffmpeg ` /` ffprobe ` or
495503` libx264 ` , or a control plane that does not answer. Read the ` ready ` row's
@@ -644,21 +652,26 @@ screenrig --json media list --tag TAG --primitive image
644652` compose catalog ` prints the fail-closed page language: page keys
645653` width ` /` height ` /` font ` /` background ` /` brand ` /` text ` /` image ` /` video ` /` motion ` /` pages ` /` viewing ` /` logo ` ,
646654regions ` fullpage|left|right|left-third|middle-third|right-third|middle-half|top-half|bottom-half|top|bottom ` ,
647- and inner fields ` title|subtitle|text|footer|image|video|iframe|webapp|cards|card|table `
655+ and inner fields ` eyebrow| title|subtitle|text|footer|image|video|iframe|webapp|cards|card|table`
648656plus ` enter ` /` stagger ` /` motion ` /` align ` /` valign ` /` fill ` /` color ` /` z ` /` shadow ` /` outline ` .
649657Author only catalog fields. Unknown keys fail the whole spec. Do not author
650658` fontSize ` . Do not author ` x ` /` y ` . Do not author Frame trees, recipes, or
651659` .layout.json ` . On the page, ` text ` is the copy color. In a
652660region, ` text ` is body copy (a string or an array of lines). Type size is
653661procedural from ` min(width, height) ` and optional ` viewing ` ` near|mid|far `
654- (default ` mid ` ). Titles default to ` brand ` . Body (` subtitle ` , ` text ` , ` footer ` )
655- defaults to ` text ` . Optional region or ` card ` ` color ` overrides every role in
656- that box. Text over a page ` image ` or ` video ` with no ` fill ` gets a 1 px
657- unblurred drop shadow (` #000000E6 ` on light type, ` #FFFFFFE6 ` on dark type).
658- Set ` shadow ` to ` "none" ` or ` { x, y, color } ` to override. ` outline ` is
659- ` { width: 0.5-12, color } ` and is off unless set. A card plate is backing, so
660- type on a card does not get the automatic shadow.
661- On 1920×1080 mid, body wish is about 45 px and title wish is 86 px. A region
662+ (default ` mid ` ). Parse order is ` eyebrow ` , ` title ` , ` subtitle ` , ` text ` , then
663+ image/cards/table, footer last. ` eyebrow ` is the kicker above the headline and
664+ defaults to ` brand ` . Region ` title ` defaults to page ` text ` . Body ` text ` uses
665+ muted (mixed from ` text ` toward ` background ` ). ` subtitle ` and ` footer ` use
666+ ` text ` . Card-item titles, prices, and table headers stay ` brand ` . Optional
667+ region or ` card ` ` color ` overrides every role in that box. Text over a page
668+ ` image ` or ` video ` with no ` fill ` gets a 1 px unblurred drop shadow
669+ (` #000000E6 ` on light type, ` #FFFFFFE6 ` on dark type). Set ` shadow ` to
670+ ` "none" ` or ` { x, y, color, blur? } ` to override (` blur ` 0–32, omit is 0).
671+ ` outline ` is ` { width: 0.5-12, color } ` and is off unless set. A card plate is
672+ backing, so type on a card does not get the automatic shadow.
673+ On 1920×1080 mid, body wish is about 45 px, title wish is 130 px, and eyebrow
674+ wish is 32 px. A region
662675then applies one scale (about 0.65–1.35) so type fills the box; a single line
663676is not grown. Footer stays on the bottom edge. If the region holds image or a
664677placeholder, type stays at scale 1 and media takes the leftover. Copy that
@@ -673,7 +686,7 @@ column's body length.
673686` card ` (singular) is a plate. ` card.fit ` is ` region ` (default: fill the whole
674687region rect) or ` ink ` (hug measured type plus 24 px pad, placed with the
675688region's ` align ` /` valign ` ). Default fill is the page background + B3 (30%
676- transparency). Override with ` card.fill ` . Inner fields: ` title ` , ` subtitle ` ,
689+ transparency). Override with ` card.fill ` . Inner fields: ` eyebrow ` , ` title ` , ` subtitle ` ,
677690` text ` , ` footer ` , ` image ` , ` cards ` , ` table ` , ` fill ` , ` color ` , ` fit ` . ` cards `
678691(plural) is ` [{ title, subtitle?, text?, price?, image? }] ` and can sit inside
679692` card ` . No nested ` card ` . Sibling ` title ` /` text ` /` cards ` are not allowed next
@@ -742,8 +755,9 @@ enter/motion enums, viewing, installed fonts, and examples in this language.
742755
743756### Compose a deck with fewer corrective steps
744757
745- Prefer region ` title ` /` text ` /` cards ` /` table ` for titles, copy, cards and
746- tables so type fitting, font checks and safe-area diagnostics still run.
758+ Prefer region ` eyebrow ` /` title ` /` text ` /` cards ` /` table ` for kickers, titles,
759+ copy, cards and tables so type fitting, font checks and safe-area diagnostics
760+ still run.
747761Keep illustrations as image assets in a region. A deck is `{ "pages": [ {
748762"id": "intro", ...page overrides, regions } ] }` . ` compose render` of that
749763file is enough. ` compose batch ` adds a contact sheet and ` --only ID ` .
@@ -832,51 +846,63 @@ Codes worth acting on:
832846 adjacent playlist pages show the same media at the same rects; vary the
833847 layout or content when the repeat is accidental.
834848
835- ### Slide, overlay, and wordmark
849+ ### Overlay family (slide-deck pages)
836850
837851Overlay is a compose mechanic for slide-deck pages and live video. It is not
838852the presentable-poster path. A presentable poster, menu, or event still is
839853one generated image with the copy typeset in the still.
840854
841- For deck text over images or video, put copy in a ` card ` so the plate brings type
842- forward. Default ` card.fit ` ` region ` fills the region (a column, a half).
843- ` fit: "ink" ` hugs the measured type plus 24 px; use it for lower thirds and
844- short copy so a two-line ` bottom ` card does not paint a full-width opaque
845- band. The type is sized inside the plate's padding, so the plate contains
846- every line, title and body alike. Default fill is the page background + B3.
847- Override with ` card.fill ` .
848- Keep text opaque. Check contrast over changing bright and dark frames; a
849- poor type-on-plate contrast warns (` card_low_contrast ` ) and does not block
850- render. Do not wrap every region in a card.
855+ Named regions are the only compose language. Copy catalog examples; do not
856+ invent Frame trees, recipes, ` fontSize ` , ` x ` , or ` y ` . Do not put deck copy
857+ through ` playlist templates ` or template ` slots ` — those still
858+ ` vectorChromeError ` .
851859
852- Overlay still (transparent page, ink-fit lower third):
860+ Photo or video is page ` image ` or ` video ` , at rest. Copy is a named region.
861+ ` overlay-left ` , ` overlay-right ` , and ` overlay-bottom ` add a ` card ` .
862+ ` overlay-title ` and ` overlay-still ` do not. Enter lives on the copy region,
863+ from the layout side (page may override). The mark is page ` logo ` , at rest —
864+ not a third raster.
865+
866+ ` compose catalog ` examples name the family:
867+
868+ | example | rails | copy | enter |
869+ | ---| ---| ---| ---|
870+ | ` overlay-title ` | page ` image ` | ` left ` type, no card | ` fade-right ` |
871+ | ` overlay-left ` | page ` image ` | ` left ` card, ` fit ` ` region ` | ` fade-right ` |
872+ | ` overlay-right ` | page ` image ` | ` right ` card, ` fit ` ` region ` | ` fade-left ` |
873+ | ` overlay-bottom ` | page ` image ` or ` video ` | ` bottom ` card, ` fit ` ` region ` | ` fade-up ` |
874+ | ` overlay-still ` | no photo | ` fullpage ` type, no card | ` fade-in ` |
875+ | ` overlay ` | page ` video ` | ` bottom ` card, ` fit ` ` ink ` | ` fade-up ` |
876+
877+ ` card.fit: "region" ` for left/right panels and full-width bands. ` fit: "ink" `
878+ only for a snug lower third. Default fill is the page background + B3.
879+ Override with ` card.fill ` when that wash is too thin; keep text opaque.
880+ Do not wrap every region. Boardroom titles use ` overlay-title ` : type on
881+ ` left ` , ` valign ` bottom, no card. Lone stills and diagrams use ` overlay-still ` :
882+ ` fullpage ` with ` enter: "fade-in" ` and no copy card.
853883
854884``` json
855885{
856886 "width" : 1920 ,
857887 "height" : 1080 ,
858- "background" : " #00000000" ,
859- "brand" : " #C9A227" ,
860- "text" : " #FFFFFF" ,
861- "video" : " ./clip.mp4" ,
862- "bottom" : {
863- "enter" : " fade-up" ,
864- "valign" : " bottom" ,
888+ "background" : " #2A3547" ,
889+ "brand" : " #F8B334" ,
890+ "text" : " #F4F7FA" ,
891+ "image" : " ./still.jpg" ,
892+ "left" : {
893+ "enter" : " fade-right" ,
865894 "card" : {
866- "fit" : " ink" ,
867- "title" : " Lower third" ,
868- "text" : " Keep copy on a snug plate over the picture."
895+ "fit" : " region" ,
896+ "fill" : " #2A3547E6" ,
897+ "eyebrow" : " THE LOW END" ,
898+ "title" : " RAM is shrinking" ,
899+ "text" : " What, when, where, and the next action."
869900 }
870901 }
871902}
872903```
873904
874- Author the overlay at the full slide resolution (1920×1080 in this example),
875- so the type ramp stays at the intended scale. A ` bottom ` card with
876- ` fit: "region" ` is a full-width band; that is not the default for short copy.
877- Keep any separate wordmark clear of the copy and preserve its proportions.
878-
879- For a side rail, put a ` card ` in ` left ` or ` right ` . Do not author ` x ` /` y ` .
905+ Snug lower third (` overlay ` in the catalog):
880906
881907``` json
882908{
@@ -885,20 +911,25 @@ For a side rail, put a `card` in `left` or `right`. Do not author `x`/`y`.
885911 "background" : " #00000000" ,
886912 "brand" : " #C9A227" ,
887913 "text" : " #FFFFFF" ,
888- "left" : {
914+ "video" : " ./clip.mp4" ,
915+ "bottom" : {
916+ "enter" : " fade-up" ,
917+ "valign" : " bottom" ,
889918 "card" : {
890- "title" : " Side title" ,
891- "text" : " What, when, where, and the next action."
919+ "fit" : " ink" ,
920+ "title" : " Lower third" ,
921+ "text" : " Keep copy on a snug plate over the picture."
892922 }
893923 }
894924}
895925```
896926
897- Page ` logo ` is the identity mark: 32 px inset from the chosen corner, contain
898- inside 200×100, never upscaled. Prefer ` logo ` over a hand-placed playlist
899- wordmark when composing the still.
927+ Author the overlay at the full slide resolution (1920×1080 in this example),
928+ so the type ramp stays at the intended scale. Page ` logo ` is the identity
929+ mark: 32 px inset from the chosen corner, contain inside 200×100, never
930+ upscaled. Prefer ` logo ` over a hand-placed playlist wordmark.
900931
901- For a deck overlay playlist: photo ` layer ` 0 + overlay ` layer ` 1 on a
932+ For a deck overlay playlist: photo or video ` layer ` 0 + overlay ` layer ` 1 on a
9029331920×1080 canvas. Use ` content_fit: "fill" ` for a matching-aspect full-canvas
903934overlay; preserve the photo proportions with ` contain ` or intentional ` cover `
904935cropping. Eight-digit hex is how the page stays transparent and the plate
@@ -1361,7 +1392,7 @@ Take `--playlist-id` from `data.id` of the `playlist create` result. Take
13611392` screen show ` return. ` revision_conflict ` means refetch and retry. Do not
13621393invent the revision.
13631394
1364- ` screen pair ` , ` screen assign` , and ` screen show ` return the screen's
1395+ ` screen assign ` and ` screen show ` return the screen's
13651396` manifest_revision ` and ` content_access_generation ` . ` manifest_revision `
13661397bumps when that screen's resolved runtime manifest changes. After ` playlist update `
13671398or a screen assignment, compare ` screen show ` with the earlier value: a bump proves
@@ -1406,20 +1437,35 @@ asset or pixel-quality proof. Do not print pixels.
14061437
14071438### Player operation logs
14081439
1409- For a player that is already running, use a sink that already owns its output:
1410-
1411- - A deployment-provided merged NDJSON listener. In this development
1412- workspace/deployment the listener is followed with ` screenrig-logd follow ` ;
1413- that name is deployment-specific, not a plugin or CLI command and not
1414- guaranteed on another host.
1415- - The player's own ` <player-state-dir>/dev-log.jsonl ` , the player-owned fallback
1416- when no merged listener is available.
1440+ This plugin does not emit the operation log. The CLI does, through optional
1441+ ` log_socket ` in the same user config as the token. The CLI connects as a
1442+ client to an already-listening Unix domain socket at that path and writes
1443+ one NDJSON object per line. There is no ` --log-socket ` flag and no
1444+ ` SCREENRIG_LOG_SOCKET ` override. If the field is absent or empty, commands
1445+ work unchanged. Connect failure never fails the command.
1446+
1447+ Each CLI line includes ` v ` (` 1 ` ), ` ts ` , ` event_id ` , ` correlation_id ` ,
1448+ ` run_id ` , ` command ` , ` kind ` (` http ` or ` local ` ), ` phase ` , ` op ` , and ` tag ` .
1449+ Nested work also carries ` parent_correlation_id ` . Optional ` id ` is an
1450+ associated resource (` scr_… ` , ` pl_… ` , ` med_… ` ). Optional ` params ` is small
1451+ scalars. Join request/response and start/finish rows on ` correlation_id ` .
1452+ Prefer ` tag ` , ` id ` , ` phase ` , and ` params ` over dumping whole logs.
1453+
1454+ Players emit their own separate logs:
1455+
1456+ - Qt and Apple: a Unix-socket client. Override the path with
1457+ ` SCREENRIG_PLAYER_LOG_SOCKET ` .
1458+ - Android: the ` ScreenRigOp ` log tag.
1459+ - Windows: Trace and Debug output.
1460+ - Browser: ` console.debug ` .
1461+ - Fallback for a player that is already running: the player's own
1462+ ` <player-state-dir>/dev-log.jsonl ` .
14171463
14181464The Unix-socket route is useful only when you own the player's start and have
14191465arranged its listener/socket before launch; it is not the first route for an
1420- already-running player. Pair rows on ` correlation_id ` and prefer ` tag ` , ` id ` ,
1421- ` phase ` , and ` params ` over dumping whole logs. Never print credentials,
1422- pairing material, signed URLs, object keys, or pixels from a log line.
1466+ already-running player. Join rows on ` correlation_id ` . Never print
1467+ credentials, provisioning material, signed URLs, object keys, or pixels from
1468+ a log line.
14231469
14241470` screen toast ` is the agent mark on a live wall. ` --level ` is ` info ` ,
14251471` alert ` , or ` error ` . Omitted ` --level ` defaults to ` info ` . Production glass
@@ -1518,10 +1564,7 @@ feedback is about. Probe support through `capabilities.features.feedback`;
15181564
15191565``` text
15201566account show
1521- agent enroll --email ADDRESS [--name NAME] [--open-dashboard]
1522- agent connect [--name NAME] [--print-url] [--timeout MS]
15231567agent status
1524- agent disconnect --yes [--allow-lockout]
15251568dashboard [--print-url]
15261569app pack <directory> [--output FILE]
15271570app upload <directory> [--name NAME] [--no-wait] [--poll-ms MS]
@@ -1533,6 +1576,7 @@ media generate --prompt TEXT [--aspect-ratio RATIO] [--quality low|medium|high]
15331576media upload <file> [--content-type TYPE] [--tag TAG] [--no-wait] [--poll-ms MS]
15341577 [--no-transcode] [--codec h264|hevc] [--max-fps N]
15351578 [--max-edge PIXELS] [--webp-quality 1-100] [--no-progress]
1579+ [--preset signage-1080p30|signage-4k30] [--no-audio]
15361580media upload-batch <manifest.json> --state FILE [--concurrency N]
15371581 [--no-transcode] [--tag TAG] [--no-progress]
15381582media show <id>
@@ -1553,7 +1597,6 @@ playlist import <directory> [--name NAME] [--update ID --if-match REVISION]
15531597playlist show <id>
15541598playlist list
15551599playlist delete <id> --if-match REVISION
1556- screen pair CODE [--label LABEL]
15571600screen update <id> [--name NAME] [--playlist-id ID] [--timezone ZONE]
15581601 --if-match REVISION
15591602screen list [--state archived]
@@ -1594,8 +1637,7 @@ version
15941637```
15951638
15961639Global flags go before the command: ` --json ` , ` --api-url URL ` , `--config
1597- PATH` , ` --request-id ID` , ` --idempotency-key KEY` , ` --timeout MS`, and
1598- ` --beta-key KEY ` (enrolment only).
1640+ PATH` , ` --request-id ID` , ` --idempotency-key KEY` , and ` --timeout MS`.
15991641
16001642On ` revision_conflict ` , fetch the resource, reapply the intended change, and
16011643retry with the returned revision. On an ambiguous transport failure, reuse the
0 commit comments