# Layout · Playlists por dispositivo / Device playlists

En Matrix · Starbucks, /layout activa los números y la selección de las seis pantallas, el TPV y el iPad horizontal. Pulsa el dispositivo o su número para editar su playlist. Ctrl + clic, Cmd + clic en Mac o Selección múltiple permiten añadir o quitar dispositivos de la selección. Unir seleccionados les asigna una playlist común y un reloj de reproducción local. Puedes añadir vídeos por URL HTTPS directa, quitarlos, ordenarlos, guardar, usar otra playlist, separar dispositivos o restaurar su playlist original. Editar una playlist compartida afecta a todos sus miembros, indicados en el editor. Al editar una playlist original se crea una copia para los seleccionados. Los cambios del panel se guardan en este navegador; las operaciones MCP autenticadas comparten asignaciones entre clientes abiertos. Salir de /layout cierra el editor y devuelve el arrastre de cámara.

In Matrix · Starbucks, /layout enables labels and selection for the six wall screens, POS and landscape iPad. Click the device or its number to edit its playlist. Ctrl + click, Cmd + click on Mac or Multiple selection adds/removes devices from the selection. Group selected assigns one shared playlist and a local playback clock. Add direct HTTPS video URLs, remove/reorder clips, save, use another playlist, ungroup devices or restore their original playlist. Editing a shared playlist affects every member listed in the editor. Editing a base playlist creates a copy for the selected devices. Saving publishes playlist contents by #playlist ID; device assignments are saved in this browser. Leaving /layout closes the editor and restores camera dragging.

## MCP y persistencia / MCP and persistence

matrix_device_layout: save_playlist {playlist_id:"playlist-local",title:"Local",tracks:[{id:"clip",title:"Promotion",url:"https://stock.admira.store/stock/ID/asset.mp4"}]}; assign {device_ids:["starbucks-wall-06","starbucks-tpv-01"],playlist_id:"playlist-local"}; reset {device_ids:[...]}; remove_playlist {playlist_id:"playlist-local"}. Every call requires action and a fresh expected_revision from matrix_state. deviceLayout contains custom playlists and assignments; deviceLayoutRevision controls delivery. Maximum 24 custom playlists, 100 clips each. Only the eight documented virtual screen IDs are supported. No physical-device publication or cross-browser playback clock.

ES: Leer matrix_state antes de cada escritura. Usar la clave de flota propia en Authorization. El estado vivo está en https://mcp.admira.store/matrix/starbucks. No insertar claves en el navegador. El siguiente cambio remoto de deviceLayout conserva las playlists del registro y sus asignaciones locales; la misma revisión no borra los ajustes locales al recargar. Un cliente nuevo recibe la última configuración compartida. Guardar publica título y contenidos por #playlist ID; las asignaciones de dispositivos permanecen locales.

EN: Read matrix_state before each write. Use your own fleet key in Authorization; never embed keys in the browser. The next remote deviceLayout change preserves registered playlists and their local assignments; reloading the same revision preserves local edits. New clients receive the latest shared configuration. Saving publishes playlist title and contents by #playlist ID; device assignments remain local.

| Número desde la puerta / Number from entrance | ID |
|---|---|
| 1 | starbucks-wall-06 |
| 2 | starbucks-wall-05 |
| 3 | starbucks-wall-04 |
| 4 | starbucks-wall-03 |
| 5 | starbucks-wall-02 |
| 6 | starbucks-wall-01 |
| TPV / POS | starbucks-tpv-01 |

Base playlists: wall, tpv. Custom IDs start with playlist-. save_playlist replaces the full ordered track array (empty stops that group); remove_playlist restores original assignment for its members. assign can target one or multiple devices. To ungroup, save a new playlist copy and assign it only to that device. reset removes custom assignment and returns to wall or tpv.

## Reproducción / Playback

ES: Los dispositivos con la misma playlist siguen el mismo vídeo y reloj dentro de esa página. Pared y TPV conservan sus controles de pausa. /sincro y /sincrototal distribuyen el vídeo sólo cuando los miembros de ese tramo comparten playlist; un tramo con playlists diferentes se muestra individual. Vídeos siempre sin sonido; hilo musical y cuña no cambian. El editor sólo modifica playlists de vídeo de las seis pantallas y TPV, no el altavoz de avisos.

EN: Devices assigned the same playlist follow one clip/clock within the page. Wall and POS retain independent pause controls. /sincro and /sincrototal span a segment only when its members share a playlist; mixed segments show individual video. Videos stay muted; music and closing announcement remain unchanged. The editor manages the six wall displays and POS, not the announcement speaker.

Local storage: xpaceos.starbucks.device-layout.v1. Contract: device-layout.mjs (same validation in MCP). Runtime: device-playback.mjs. Editing surface: device-editor.mjs.

## 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.

## Experto · Acciones, hover y arrastre / Actions, hover and dragging

ES: La fila Send / Show-Hide / Player y cámara / × está en la tercera columna de Experto, junto al selector Good/Better/Best/Matrix y Local view. La columna central queda para los controles operativos. Show/Hide sigue ocultando sólo el texto de Local view.

EN: The Send / Show-Hide / Player and camera / × row is in the third Expert column, together with Good/Better/Best/Matrix and Local view. The middle column holds operational controls. Show/Hide still toggles only Local view text.

ES: El altavoz de avisos no muestra ningún icono ni contorno en reposo, incluso durante la locución. El rectángulo aparece al pasar el ratón por encima o recibir foco de teclado, con animación suave salvo movimiento reducido. Sigue siendo pulsable sobre el altavoz real de la captura; en táctil se puede tocar directamente.

EN: The announcement speaker shows no icon or outline at rest, including during playback. Its rectangle appears on hover or keyboard focus, with a subtle animation unless reduced motion is enabled. The hotspot remains clickable over the captured speaker; touch users can tap it directly.

ES: En /layout, abre la playlist y arrastra una miniatura a la posición deseada. Ratón y táctil reordenan el borrador; al acercarse al borde del panel, la lista se desplaza. Escape cancela el arrastre; soltar fuera de la lista sólo cancela si no hay una pantalla o TPV de destino. Soltar sobre un dispositivo activa el previo temporal. También puedes enfocar la miniatura y usar ↑/↓, o pulsar los botones de flechas existentes. Pulsa Guardar playlist para aplicar y conservar el orden; Play guarda los cambios válidos antes de reproducir.

EN: In /layout, open the playlist and drag a thumbnail to the desired position. Mouse and touch reorder the draft; moving near the panel edge scrolls the list. Escape cancels the drag; dropping outside the list cancels only without a screen or POS target. Dropping on a device starts a temporary preview. You can also focus the thumbnail and use ↑/↓, or use the existing arrow buttons. Save playlist applies and persists the order; Play saves valid changes before playing.

MCP: Existing playlist_reorder changes shared wall/TPV/iPad/music order using the full order array and expected_revision. For custom shared playlists, use matrix_device_layout action=save_playlist with the same playlist_id, title and reordered tracks. Read matrix_state before writing. Browser drafts remain local until shared explicitly. UI dragging does not create new physical-device operations or tools. playlist_play continues to jump to saved content. Endpoint: https://mcp.admira.store/mcp.

## 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.

## Asignar contenidos / Assign content

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.

ES: Asignar contenidos activa /layout y oculta el panel de geometría. Las asignaciones también recuperan la reproducción sobre mapas antiguos con otra URL de vista previa, conservando las esquinas. El ID #playlist permanece estable. MCP playlist_add añade al final sin interrumpir el contenido actual; playlist_play permite saltar a un contenido concreto. Las operaciones afectan a players virtuales.

EN: Assign content enables /layout and hides the geometry panel. Assignments also restore playback on older maps with a different preview URL, preserving corners. The #playlist ID remains stable. MCP playlist_add appends without interrupting the current item; playlist_play jumps to a specific item. These operations affect virtual players.

## Arrastrar a pantallas · Recargar playlist / Drop on screens · Reload playlist

ES: En /layout o Asignar contenidos, arrastra la miniatura de una fila hasta una pantalla o el TPV para probar ese vídeo en bucle y sin audio. Dentro de la lista, el mismo gesto sigue reordenando el borrador. El destino se ilumina al pasar por encima. Escape, cancelar el gesto o soltar fuera de un destino cancela sin aplicar. El contenido debe estar resuelto en Pixeria. Las flechas ↑/↓ siguen disponibles para ordenar con teclado.

EN: In /layout or Assign content, drag a row thumbnail onto a screen or POS to preview that video muted on repeat. Dragging inside the list still reorders the draft. Destinations highlight on hover. Escape, gesture cancellation or dropping outside a destination cancels without applying. Resolve the Pixeria content first. Arrow keys remain available to reorder with the keyboard.

ES: Ctrl/Cmd + clic o Selección múltiple permite seleccionar varias pantallas. Al soltar en una de ellas, el vídeo se reparte entre todas, sincronizado y adaptado a sus proporciones, en orden físico de la pared (6 hacia 1; TPV al final). Si sueltas en una pantalla no seleccionada, el previo afecta sólo a ese destino. Se conserva la playlist guardada, su orden, su ID y las asignaciones. Un nuevo previo sustituye al anterior; no enciende dispositivos apagados ni modifica el hilo musical.

EN: Ctrl/Cmd + click or Multiple selection selects several screens. Dropping on one of them spans the video across all selected surfaces, synchronized and adapted to their proportions, in physical wall order (6 toward 1; POS last). Dropping on an unselected screen previews only that destination. Saved playlists, order, IDs and assignments remain unchanged. A new preview replaces the previous one; powered-off devices stay off and background music is unaffected.

ES: Recargar playlist / Reload playlist termina el previo que incluya los dispositivos elegidos, descarta el borrador y recupera la última playlist guardada de cada destino. Las playlists con #playlist UUID consultan el registro compartido; las locales y bases usan la programación guardada/cargada. Empieza por el primer contenido y respeta el ajuste Reproducir en bucle (activado por defecto). Si varios dispositivos comparten esa playlist, su reloj vuelve al inicio conjuntamente. Una lista vacía queda sin contenido; un fallo de red mantiene el previo y permite reintentar. “Original” significa la playlist guardada, no borrar las ediciones ni volver a la semilla de fábrica. Restaurar playlist original es la acción separada que vuelve a la asignación base.

EN: Reload playlist ends the preview intersecting the chosen devices, discards the draft and restores each destination’s latest saved playlist. Registered #playlist UUIDs refresh from the shared registry; local and base playlists use their saved/loaded schedule. Playback starts with the first item and respects Loop playlist (enabled by default). Devices sharing that playlist restart their common clock together. Empty playlists stay empty; network failures retain the preview for retry. “Original” means the saved playlist, not deleting edits or returning to factory seeds. Restore original playlist is the separate action that restores the base assignment.

MCP: matrix_preview {action:"preview",device_ids:["starbucks-wall-04","starbucks-wall-03"],track:{id:"<asset id>",title:"<title>",url:"<HTTPS media URL>"},expected_revision:N}. Resolve content first with pixeria_search {query:"#1329"}, or read playlist_list for a saved item. Wall IDs retain mapping anchors: P1=wall-06, P2=wall-05, P3=wall-04, P4=wall-03, P5=wall-02, P6=wall-01; each has the starbucks- prefix. POS=starbucks-tpv-01; landscape iPad=starbucks-ipad-01.

MCP: matrix_preview {action:"reload",device_ids:["starbucks-wall-04","starbucks-wall-03"],expected_revision:N}. Read matrix_state before either write. Both commands require the agent’s own fleet authentication and the Matrix revision (not the UUID playlist revision). The signed previewCommand is consumed only by already-open Matrix clients on the next poll, approximately five seconds. Old commands are not replayed on entry. Each browser restores its own saved assignments; commands do not overwrite playlist contents. A saved command is not a playback acknowledgement. These are virtual devices, not physical broadcasting.

ES: Arrastrar desde la UI es local y temporal. Para solicitar lo mismo desde otro agente usa matrix_preview. EN: UI dragging is local and temporary. Agents request the same actions through matrix_preview. Endpoint: https://mcp.admira.store/mcp. Guide: https://www.xpaceos.com/admira-xp/docs/playlist-drop.md.

## Playlist · Cápsula activa y vista compacta / Active capsule and compact view

ES: En Asignar contenidos o /layout, selecciona una pantalla o TPV para abrir su playlist. La cápsula que realmente reproduce el dispositivo seleccionado se destaca con fondo verde intenso, borde luminoso y «En reproducción». Sigue el avance automático, Play, Recargar y los cambios recibidos por MCP. Pausa, carga o error no se anuncian como reproducción activa. Si los dispositivos seleccionados reproducen pistas distintas de la playlist visible, pueden resaltarse varias cápsulas; una vista previa ajena a esa playlist se indica sin marcar un contenido incorrecto.

EN: In Assign content or /layout, select a screen or POS to open its playlist. The capsule actually playing on the selected device is highlighted with a strong green background, bright border and “Playing”. It follows automatic advancement, Play, Reload and changes received through MCP. Paused, loading or failed playback is not marked as active. Multiple selected devices playing different tracks of the displayed playlist can highlight several capsules; a preview outside that playlist is reported without highlighting the wrong item.

ES: Cabecera compacta con selección resumida, selector, Usar, Recargar y #playlist… en una línea. Copiar ID conserva el identificador completo. Ajustes e información despliega nombre editable, dispositivos vinculados, multiselección y gestión de grupos. La lista tiene desplazamiento independiente y deja visibles al menos cinco cápsulas en las vistas verificadas de escritorio 1440×800 y móvil 390×844 con ajustes cerrados. Con más contenidos, sigue la nueva cápsula activa automáticamente; no interrumpe una edición o arrastre en curso. Puedes desplazar manualmente la lista y seguir arrastrando miniaturas para ordenar o probar contenidos sobre pantallas. En ventanas muy bajas o con ajustes abiertos se conserva el acceso mediante desplazamiento.

EN: Compact header with selection summary, selector, Use, Reload and a single-line #playlist… reference. Copy ID retains the full identifier. Settings and information expands the editable name, assigned devices, multiselection and group management. The independently scrolling list shows at least five full capsules in the verified 1440×800 desktop and 390×844 mobile views with settings closed. Longer lists automatically follow the next active capsule without interrupting an edit or drag. Manual scrolling and thumbnail drag to reorder or preview on screens remain available. Scrolling preserves access in very short windows or with settings expanded.

MCP ES: Los contratos e IDs no cambian: playlist_list / playlist_add / playlist_remove / playlist_reorder / playlist_play y matrix_preview conservan su comportamiento. El resaltado representa reproducción local real del dispositivo seleccionado; no prueba entrega a una pantalla física ni añade telemetría remota. La UI refleja los comandos MCP al ejecutarse en el navegador conectado. playlist_add sigue añadiendo al final por #playlistUUID.

MCP EN: Contracts and IDs are unchanged: playlist_list / playlist_add / playlist_remove / playlist_reorder / playlist_play and matrix_preview retain their behavior. Highlighting represents actual local playback on the selected device; it is not proof of physical-screen delivery and adds no remote telemetry. The UI reflects MCP commands when executed in the connected browser. playlist_add still appends by #playlistUUID.

Guide: https://www.xpaceos.com/admira-xp/docs/playlist-capsules.md · MCP: https://mcp.admira.store/mcp.

## Playlist · Reproducir en bucle / Loop playlist

ES: En Asignar contenidos → elige pantalla o TPV → Ajustes e información aparece Reproducir en bucle, activado por defecto. Al finalizar el último contenido vuelve automáticamente al primero; con un solo contenido, lo repite. Las playlists existentes sin este campo también mantienen el bucle. Desactivarlo deja terminar la lista y se detiene al final, mostrando Playlist finalizada y sin cápsula marcada como activa.

EN: In Assign content → select a screen or POS → Settings and information, Loop playlist is enabled by default. After the last item it automatically returns to the first; a single-item playlist repeats that item. Existing playlists without this field also keep looping. Turning it off lets the schedule finish and stops at the end, showing Playlist finished with no capsule marked as playing.

ES: El cambio se guarda automáticamente en la playlist seleccionada por su #playlistUUID, con los permisos del propietario. Se aplica a los dispositivos que comparten esa playlist, sin reiniciar el vídeo actual. Si falla el guardado, el aviso No guardado conserva el borrador y la programación anterior sigue vigente. Las altas base/locales se publican como una playlist UUID al guardar. Se conserva el ajuste al añadir, quitar, ordenar, duplicar por dispositivo, recargar o volver a abrir. Recargar empieza desde el primer contenido y respeta el bucle guardado; no lo fuerza a ON. Una playlist finalizada vuelve al principio al pulsar Play. La vista previa temporal mediante arrastre sigue repitiendo su vídeo hasta Recargar; no cambia esta preferencia.

EN: The change saves automatically on the selected #playlistUUID using owner permissions. It applies to devices sharing that playlist without restarting the current video. If saving fails, Not saved retains the draft while the previous schedule remains effective. Saving a base/local playlist publishes a UUID playlist. The setting survives add, remove, reorder, split by device, reload and reopening. Reload starts at the first item and respects the saved loop setting; it does not force ON. Play restarts a completed schedule from the beginning. Temporary drag previews still repeat their video until Reload and do not change this preference.

MCP ES: XpaceOS 2.11.0 añade playlist_settings. Lee playlist_list {playlist:"#playlistUUID"} para obtener loop (booleano; defecto true) y la revisión propia de esa playlist. Luego playlist_settings {playlist:"#playlistUUID",loop:false,expected_revision:N}. Requiere clave de flota autenticada; rechaza alias base, tipo no booleano y revisión obsoleta. Usa loop:true para reactivar. No cambia contenidos, orden ni asignaciones. Los navegadores suscritos reciben el ajuste al siguiente sondeo (aprox. 5 s); un acuse de escritura no es prueba de emisión física.

MCP EN: XpaceOS 2.11.0 adds playlist_settings. Read playlist_list {playlist:"#playlistUUID"} for loop (boolean; default true) and that playlist’s own revision. Then playlist_settings {playlist:"#playlistUUID",loop:false,expected_revision:N}. Requires an authenticated fleet key; base aliases, non-boolean values and stale revisions are rejected. Use loop:true to enable again. Contents, order and assignments remain unchanged. Subscribed browsers receive it on the next poll (about 5 s); a write acknowledgement is not proof of physical playback.

Contract: owner POST /playlists and POST /playlists/<UUID> accept loop:boolean; GET returns it. Legacy owners omitting loop preserve the saved value on updates. MCP playlist_add/remove/reorder preserve it. Legacy matrix_device_layout save_playlist also accepts loop:boolean; omission preserves existing values or defaults to true for new playlists. This applies to virtual screen/POS playlists; music and AI sync retain their separate controls.

Guide: https://www.xpaceos.com/admira-xp/docs/playlist-loop.md · MCP: https://mcp.admira.store/mcp.
