Documentation

Player status codes

A Player shows one status chip when something needs attention and reports the condition to screenRIG. This page lists each chip, and each page, update, storage and card code, with its usual cause and its fix.

Where the codes appear

A chip is an icon in the bottom-left corner of the screen, with a one-line message when it first appears. The Player shows the highest-ranked active condition and keeps the chip while the condition holds. The dashboard shows the chip beside the screen's online state.

screenrig screen show scr_ID returns what the Player reported:

MemberHolds
statuschip, the chip's id (null when none shows), its level and when the Player reported it. Absent until the first report
last_page_failurepage_id, code and at of the latest page that could not become ready
manifest_upgradeHow the latest content update is going: state, code, attempt and retry_at
storage, storage_shortfallThe Player's last storage report, and how far the playlist exceeds it. The shortfall is present only while content does not fit

A chip is the Player's last report: read it as stale while online is false. Reports such as player.video_unusable and player.card_failed go to the screen's Player log:

screenrig events list --source log --screen-id scr_ID

Status chips

The table runs in rank order: when several conditions hold, the first one shows. The label is the chip's name in the dashboard.

ChipCauseFix
archived (Screen archived)The screen is archived, so its glass is dark. The Player keeps its credentialsscreenrig screen unarchive scr_ID. The Player resumes without pairing again. A screen archived as replaced cannot be unarchived: screen delete removes it
repair_needed (Needs repair)The device key no longer binds the Player to its screen (credential_revoked, key_retired), or the device could not keep its identity. The Player keeps its saved content and its keyReset the Player on the device: open its operator menu, choose Settings, then Reset. It gets a new pairing code: give the code to your agent
payment_required (Usage out)The project's usage credit is used up, so new content cannot reach the screen. From 1 January 2027 a remaining credit of zero or less also shows this chipscreenrig billing balance shows what is left. Add usage credit, as Pricing describes
session_revoked (Connection ended)The Player's credential was rejected or revoked, or its screen was deleted, while the Player holds saved content. It keeps playing that content and retriesConfirm the screen exists with screenrig screen show scr_ID. If the chip stays, reset the Player in its operator menu and pair it again
verify_fail (Cannot verify)A downloaded file failed its size, hash or type check, so the Player does not use it and keeps what it has. The update code is hash_mismatchscreenrig screen clear-cache scr_ID makes the Player download its content again
storage_full (Storage full)The device has no room for the content it must download, so new content cannot be savedFree storage on the device or shrink the playlist. Cache and storage explains the fit
decode_unplayable (Nothing plays)The Player cannot play any item it has to show, and nothing else is on screenVideo that does not play. A Raspberry Pi 5 needs video uploaded with --codec hevc
unavailable (Cannot show)The Player has no saved content, its assignment did not resolve, and no more specific condition appliesRead manifest_upgrade and last_page_failure in screen show, fix what they name, then screenrig screen reload scr_ID
browser_unsupported (Unsupported browser)The browser that runs the web Player is unsupported. Playback continuesUpdate the browser
app_unsupported (Unsupported app)The screenRIG app version is unsupported. Playback continuesscreenrig screen update-software scr_ID where the Player declares update, otherwise update through its store or device manager
browser_warning (Browser warning)The browser that runs the web Player is out of date. Playback continuesUpdate the browser
app_warning (App warning)The screenRIG app version is out of date. Playback continuesscreenrig screen update-software scr_ID where the Player declares update, otherwise update through its store or device manager
assignment_held (Update delayed)The latest update is retrying or failed, or renewing the Player's session has taken more than 10 seconds. The current content keeps playingRead manifest_upgrade in screen show. Page and update failures explains each state and code
decode_miss (Item skipped)One item cannot be played, so the Player skips it while other content playsVideo that does not play
offline_playing (Playing offline)Content is on screen and the Player has had no connection to screenRIG for 60 seconds or more. It plays its saved contentRestore the device's network. screen show reports last_outage and its likely_cause
schedule_timezone (Needs timezone)A page has a visibility schedule and the screen has no timezone, so the Player ignores the schedule and always shows the pagescreenrig screen update scr_ID --timezone America/Los_Angeles, with the screen's IANA zone
credits_low (Usage low)Remaining usage credit is above zero and below 1,000 credits. Until 1 January 2027 remaining credit is not a shutoff instructionscreenrig billing balance shows what is left
content_partial (Partial content)Only part of the playlist plays: manifest_upgrade.state is partial and missing_page_count says how many pages are left outRead manifest_upgrade.code: Cache and storage for capacity, Page and update failures for the rest
paused (Paused)Someone paused the screen on the device. A pause ends by itself after 60 minutesPress Play/Pause on the remote (K on Windows)
syncing (Updating)The Player is downloading, preparing or activating new content, or renewing its sessionNone. The chip clears when the content is on screen. If it stays, read manifest_upgrade.state

Player update required is a notice beside the chip, not a chip. It shows when the Player's version is below the minimum screenRIG supports, and the Player keeps playing its saved content. Update the Player with screenrig screen update-software scr_ID where it declares update, otherwise through its store or device manager.

Video that does not play

A Player decodes video with the device's hardware decoder for the file's codec, profile and resolution. When the device cannot, the Player skips the item: the chip is decode_miss, or decode_unplayable when nothing else is on screen. The Player log's player.video_unusable record names the code (video_load_failed, video_play_failed, video_autoplay_blocked, video_stalled, image_load_failed, video_prepare_failed, video_first_frame_timeout or video_decode_failed) with the decoder, codecs, width and height the Player measured.

screenrig media upload ./lobby-loop.mp4 --codec hevc
screenrig media upload ./lobby-loop.mp4 --preset signage-1080p30

A video uploads as H.264 by default. A Raspberry Pi 5 has no H.264 decoder: upload every video for it with --codec hevc, at any size. A Raspberry Pi 4 plays 1080p, and --preset signage-1080p30 bounds the size. Use hevc only when every screen that plays the clip is a native Player. Replace the media in the playlist and publish it again.

Assigning a playlist whose video is all H.264 to a screen whose Player declares video.h264_unavailable is refused with invalid_request. In mixed content that Player skips the H.264 items.

Page and update failures

A page that cannot become ready is skipped and the Player keeps playing its other pages. It reports the failure, and last_page_failure.code is the Player's own code. screenrig events list --type playback.page_failed --screen-id scr_ID lists them.

CodeCauseFix
gstreamer_playback_errorThe Linux or Raspberry Pi Player's media pipeline failed on a video: it reported an error, would not start, or produced no pictureVideo that does not play
unsupported_contentThe playlist holds content the Player cannot present, a primitive or media type it does not supportSee Primitive support by platform. Replace the content, or assign the playlist to a Player that supports it

manifest_upgrade.state says how a content update is going:

StateMeaning
pendingscreenRIG has new content for the screen and the Player has not reported on it
downloading, preparing, activatingThe update is under way. With content on screen the chip is syncing
retryingA step failed and the Player tries again at retry_at. The chip is assignment_held
failedThe update stopped with no retry scheduled. The chip is assignment_held
blockedStorage cannot stage the new content. The chip is storage_full
partialOnly part of the playlist plays. The chip is content_partial
currentThe newest content is playing

manifest_upgrade.code names the cause of a retrying, failed, blocked or partial state:

CodeCauseFix
download_failedA content download failed: the content origin was unreachable or answered an errorCheck the device's connection. The Player retries on a backoff, and retry_at says when
hash_mismatchA downloaded file failed its size, hash or type checkscreenrig screen clear-cache scr_ID
prepare_failedThe Player could not prepare a page for display, or the page was not ready in timeRead last_page_failure and fix the page as its code says
activate_failedThe first page of the new content could not be shownRead last_page_failure, then screenrig screen reload scr_ID
manifest_invalidThe Player rejected the revision's manifest as invalid and keeps its last good content. It does not retry that revisionReport it with the screen id at Contact
unsupported_contentThe Player dropped content it cannot present. With nothing playable left the update fails and is not retried; otherwise it is partialAs the page failure unsupported_content above
internalA Player error outside the codes abovescreenrig screen reload scr_ID. If the code stays, report it with the screen id
capacity, staged, storage_full, none_fit, transition_blocked, anchor_unavailableThe device's storage planCache and storage

Cache and storage

Before it downloads a revision, a Player plans its storage: which pages' files fit the space it may use. A native Player leaves 128 MiB of its volume free and stays within any quota set for it. At start, a Player with less than 512 MiB free shows a message with the free space; that message is not a chip.

storage.plan.fit in screen show says how the playlist fits:

fitMeaningFix
fitsThe whole playlist fitsNone
fits_after_eviction, retention_reducedThe playlist fits after the Player drops cached files it no longer needs and, for retention_reduced, its saved fallback contentNone. No page is left out
partialSome pages do not fit and are left out (excluded_pages). The rest playsFree storage or shrink the playlist
transition_blockedThe new playlist's always-visible page, the first page without a visibility schedule, cannot be stored beside the content on screen. The update waits, the current content keeps playing and headroom_needed_bytes says how much more room it needsFree that much storage or shrink the new playlist
none_fitNothing loads: no page fits, or the playlist has no always-visible page that fitsFree storage, or assign a smaller playlist

manifest_upgrade.code repeats the plan: none_fit or transition_blocked for a blocked update, capacity for a partial update whose pages did not fit, staged for a partial update that is still filling, and storage_full when a write fails. storage_shortfall is present while fit is partial, transition_blocked or none_fit.

Each entry of excluded_pages has a reason:

ReasonCauseFix
object_exceeds_capacityOne file alone does not fit the space the Player may useUpload it smaller (media upload --max-edge or --preset signage-1080p30), or use a device with more storage
page_exceeds_capacityEach file fits alone, but the page's files together do notPut fewer or smaller files on the page
capacity_excludedThe page was left out so the rest could fitFree storage or shrink the playlist
descriptor_conflictThe playlist lists one file twice with different sizes or content typesReport it with the screen id at Contact
not_localThe Player restored saved content at start with no stored plan, and this page's files were not on the deviceBring the Player online: it downloads the page
anchor_unavailableThe always-visible page failed to download although the device has room. That is a failed download, not a shortfallCheck the device's connection. The Player retries

Ask before you assign a large playlist:

screenrig screen storage-forecast scr_ID --playlist-id pl_ID

It answers fits, partial, none_fit or unknown, with the bytes the playlist needs and the Player's capacity. unknown means the screen has never reported storage. A report older than 24 hours is marked stale. The command writes nothing. When a storage failure shows, the answer carries a storage_full warning: free storage on the device that runs the Player, then retry the playlist.

Cards

A card that cannot draw leaves its rectangle empty and the page plays on. The Player logs card.failed, and the web, Android and Windows Players report player.card_failed once for each card on a page and code, with page_id, primitive_id, manifest_revision and the code. A card whose data expired is blank too: screenrig card data put --ttl 30m renews it.

CodeCauseFix
unknown-cardThe card id is not in the Player's cards libraryUse a card from the card reference
card-unavailableThe card is in the library, but this Player build does not carry it, or carries another major version than the page namesUpdate the Player, or place the major version it carries
card-errorThe card threw while drawing (web Player). The details are in the browser consoleCheck the card's properties against its reference page
data-unavailableThe card's first data document did not arrive. The card stays hiddenscreenrig card data put to write the data, or screenrig source show to check its data source
data-source-missingA card names card data and the Player has no data source for itReport it with the screen and card ids at Contact
cardml-invalidA CardML card's file failed its checksReport it with the card id at Contact
cardml-model-error, cardml-model-timeoutA CardML card's model failed or ran past its time budgetCheck the card's data and properties
cardml-duplicate-keyA list in a CardML card met one key twice. It keeps its previous rowsGive each row its own key
qr-too-long, wifi-too-longThe QR payload or the Wi-Fi details do not fit a QR codeShorten the URL or the text
invalid-targetA countdown's target does not parseSet target to a valid date and time