## 25 · Pixeria · Añadir vídeos por título, hashtag o número / Add videos by title, hashtag or number

ES: En Matrix, pulsa Asignar contenidos, elige una pantalla o el TPV y Añadir vídeo. Hay un único campo: título, #hashtag o número de Pixeria, por ejemplo #1329. Enter, Buscar en Pixeria o salir del campo inicia la búsqueda. Una coincidencia única se aplica directamente; si hay varias, elige un resultado. La elección guarda la playlist, la asigna al dispositivo seleccionado y reproduce ese contenido. La URL HTTPS se resuelve internamente. Los dispositivos que comparten la playlist siguen su reloj común. Los errores conservan el borrador; las filas vacías se ignoran y las búsquedas pendientes deben resolverse. No se añaden todos los resultados de un hashtag. Los duplicados se avisan.

EN: In Matrix, click Assign content, select a screen or POS and Add video. Use the single field for a Pixeria title, #hashtag or number such as #1329. Enter, Search Pixeria or leaving the field starts the lookup. A unique match applies directly; otherwise choose a result. Choosing saves the playlist, assigns it to the selected device and plays that content. The HTTPS URL is resolved internally. Devices sharing the playlist follow their common clock. Errors preserve drafts; empty rows are ignored and pending searches must be resolved. Hashtag results are not bulk-added. Duplicates are reported.

### MCP y fuente / MCP and source

pixeria_search {query:"#1329",limit:20} is a public read. Accepted queries: title words (case/accent insensitive), exact hashtag, stable Stock number or asset id. Returns {query,total,items:[{id,num,title,url,tags,type,exact}]}; only published videos with direct HTTPS URLs. Default limit 20, maximum 50. Stock numbers use the catalog num field, never the position in the list. Public UI endpoint: https://mcp.admira.store/pixeria/search?query=%231329&limit=20. Upstream catalog: https://pub-bf043a4daa3b43b7a0b769617729d074.r2.dev/stock/index.json, the same public library used by Pixeria. Short cache (up to 30 seconds); failures remain visible and do not overwrite a playlist.

playlist_add {playlist:"tpv",stockId:"#1329",expected_revision:N} adds the resolved video to a shared base playlist. playlist aliases: hilo, pantallas, tpv, sincro-ia. Existing demo assets remain supported; new Pixeria lookup returns videos only. Ambiguous titles/hashtags fail with no write: use pixeria_search, select an id/number and retry with a fresh revision. Removal/reorder use IDs or Stock numbers already stored in that playlist. For a custom device playlist, read matrix_state, resolve via pixeria_search, then matrix_device_layout save_playlist with the complete ordered array of {id,title,url}; assign only the intended device_ids. Writes require each agent’s own fleet key and expected_revision. Saving UI playlists publishes their contents by #playlist ID; device assignments remain local. Never put a fleet key in browser code.

Verified example: Stock #1329 = 1790711463701-yxy150, “Good Energy with Adrian Grenier: Starbucks & The Devil Wears Prada 2”. #1329 is a stable reference, not a promise that it is always the latest upload.

Docs: https://www.xpaceos.com/admira-xp/docs/pixeria-playlists.md

## Playlist · Previo y Play / Preview and Play

ES: En Matrix → /layout → dispositivo, cada fila muestra un previo silencioso junto al número. El botón ▶ está a la derecha de × y salta al inicio de ese contenido. Todos los dispositivos virtuales activos que usan esa playlist cambian juntos, reanudando los pausados; después continúa el orden normal. Las otras playlists y el hilo musical no cambian. Play guarda primero los cambios válidos e ignora filas vacías. Los dispositivos apagados permanecen apagados. El previo no reproduce audio. Si falla el vídeo, se indica el error y Play permite reintentar.

EN: In Matrix → /layout → device, each row shows a silent preview beside its number. The ▶ button is immediately to the right of × and jumps to the beginning of that content. All active virtual devices using that playlist switch together, resuming paused members; normal playlist order continues afterwards. Other playlists and background music are unaffected. Play saves valid draft changes first and ignores empty rows. Powered-off devices stay off. Previews never play audio. Failed videos show an error and Play retries.

MCP: playlist_play {playlist_id, track_id, expected_revision}. Read matrix_state first. playlist_id is wall, tpv, ipad or a shared playlist-<id>. track_id is the saved content ID, not its row number. Authenticated fleet key required. Saving in the editor publishes a stable #playlist UUID; screen assignments remain local. For UUID playlists read playlist_list, not matrix_state, for the revision. The UI Play action remains local to the current browser. MCP commands reach already-open Matrix clients at the next poll (approximately 5 seconds); old commands are not replayed when entering Matrix. Each browser synchronizes its assigned devices locally; this does not guarantee frame accuracy between browsers or publish to physical players. Selecting a regular video exits AI sync. An acknowledgement records the command, not successful playback.

ES: Los agentes pueden leer, editar y saltar a contenido compartido por MCP. EN: Agents can read, edit and jump to shared content through MCP. Endpoint: https://mcp.admira.store/mcp. Example: read matrix_state, then playlist_play with playlist_id="wall", track_id from state.playlists.wall.tracks and the current expected_revision.

## Playlist IDs · Guardado, Play y agentes / Saving, Play and agents

ES: Se ignoran las filas totalmente vacías al guardar o pulsar Play. Una búsqueda sin resolver debe completarse eligiendo un resultado de Pixeria; el borrador se conserva si hay un error. Play guarda primero los cambios válidos y asigna la playlist al dispositivo seleccionado antes de saltar al vídeo. Todos los dispositivos que ya comparten esa misma playlist siguen su reloj común. Elegir una playlist en el desplegable ya no provoca que Play actúe sólo en su antiguo destino.

EN: Completely empty rows are ignored when saving or pressing Play. An unresolved lookup must be completed by choosing a Pixeria result; errors preserve the draft. Play first saves valid edits and assigns the playlist to the selected device before jumping to the video. Devices already sharing that playlist follow their common clock. Choosing a playlist no longer makes Play target only its previous device.

ES: Cada playlist guardada desde el editor tiene un ID estable #playlist<UUID>, visible con Copiar ID. Guardar publica título y contenidos en el registro compartido; la asignación de pantallas sigue en este navegador. Editar y volver a guardar mantiene el ID; Unir crea una nueva lista. Las listas antiguas locales se publican la próxima vez que se guardan. La URL de lectura es https://mcp.admira.store/playlists/<UUID>. El navegador conserva una autorización limitada a sus propias playlists; nunca recibe claves de flota. Comparte el ID, no las credenciales.

EN: Every playlist saved from the editor gets a stable #playlist<UUID> ID, shown with Copy ID. Saving publishes its title and contents to the shared registry; screen assignments stay in this browser. Editing and saving retains its ID; Group creates a new list. Legacy local playlists are published on their next save. Public read URL: https://mcp.admira.store/playlists/<UUID>. The browser holds authorization scoped to its own playlists and never receives fleet keys. Share the ID, not credentials.

MCP example: playlist_add {playlist:"#playlist<UUID>",stockId:"#1309"}. An authenticated agent appends to the end automatically when position is omitted. Stock title, exact hashtag or number are supported; ambiguous searches require choosing a result. Repeated append of the same asset to a UUID playlist is idempotent. Concurrent appends retry without losing items. expected_revision is optional for append; supply it to require an exact revision. playlist_list {playlist:"#playlist<UUID>"} returns current contents and its own revision. playlist_remove and playlist_reorder accept that identifier plus expected_revision; use saved track IDs. playlist_play {playlist_id:"#playlist<UUID>",track_id:"<saved id>",expected_revision:N} jumps on already-open subscribed clients. The UUID playlist revision is independent of matrix_state.revision.

ES: Los cambios de agentes llegan cada cinco segundos a las listas guardadas y asignadas en el navegador. Se añaden al final sin interrumpir el vídeo actual. Si hay edición pendiente, se conserva; un guardado con revisión antigua se rechaza. Recargar playlist permite recuperar los cambios compartidos antes de editar otra vez. Si no hay conexión, se conserva el último estado. No hay publicación a dispositivos físicos.

EN: Agent updates arrive about every five seconds for registered playlists present in the browser. Appending preserves the current video and puts new content at the end. Pending edits are retained; a stale save is rejected. Reload playlist retrieves shared changes before editing again. Offline playback keeps the last state. This does not publish to physical devices.

Base IDs: #playliststarbucks-wall (pantallas), #playliststarbucks-tpv (tpv), #playliststarbucks-ipad (ipad), #playliststarbucks-music (hilo), #playliststarbucks-ia (sincro-ia). Base writes use matrix_state revision; playlist_add can obtain it automatically when omitted. UUID playlists use playlist_list revision. Existing matrix_device_layout remains available for legacy shared assignments and playlists. Endpoint: https://mcp.admira.store/mcp.
