--- id: plugin.now_playing title: Song Overlay scope: plugins status: active priority: 10 visibility: user category: Plugin tags: plugin, now_playing generated: true editable: false --- # Song Overlay Provider-neutral song state, chat announcements, and a customizable Lumi Overlay source. ## Metadata Plugin ID: now_playing Version: 0.1.2 Default state: enabled ## Web Routes - /plugins/now_playing - GET /plugins/now_playing - POST /plugins/now_playing/settings - POST /plugins/now_playing/overlay/install - POST /plugins/now_playing/overlay/remove - POST /plugins/now_playing/test-announcement - GET /plugins/now_playing/api/companion/ping - POST /plugins/now_playing/api/companion/state - GET /plugins/now_playing/render/:token - GET /plugins/now_playing/render/:token/state - GET /plugins/now_playing/render/:token/events - GET /plugins/now_playing/render/:token/cover/:hash ## Route Reference ### MOUNT /plugins/now_playing - Purpose: Mounts the plugin router at this base WebUI path. - Inputs: No request parameters detected by static analysis. - Response format: Plugin router mount point. - Access: Access is controlled by the mount options and individual plugin routes. - Side effects: No direct route action; child routes handle requests. - Limits/notes: Mount metadata is inferred from static source scanning. ### GET /plugins/now_playing - Purpose: Renders or serves the now_playing plugin page. - Inputs: No request parameters detected by static analysis. - Response format: HTML page rendered from an EJS view - Access: No explicit access guard detected in the route handler; check surrounding router/mount middleware. - Side effects: Usually read-only. - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. ### POST /plugins/now_playing/settings - Purpose: Processes the now_playing plugin action for settings. - Inputs: body: full submitted body is passed to a helper; exact fields are defined by the matching form/service - Response format: HTTP redirect after handling the request - Access: No explicit access guard detected in the route handler; check surrounding router/mount middleware. - Side effects: writes or mutates server-side state - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. Errors are caught and usually returned as a flash message, JSON error, or error page. Most non-API POST routes are browser form submissions and usually redirect after completion. ### POST /plugins/now_playing/overlay/install - Purpose: Processes the now_playing plugin action for overlay install. - Inputs: body: `scene_id` - Response format: HTTP redirect after handling the request - Access: No explicit access guard detected in the route handler; check surrounding router/mount middleware. - Side effects: writes or mutates server-side state - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. Errors are caught and usually returned as a flash message, JSON error, or error page. Most non-API POST routes are browser form submissions and usually redirect after completion. ### POST /plugins/now_playing/overlay/remove - Purpose: Processes the now_playing plugin action for overlay remove. - Inputs: No request parameters detected by static analysis. - Response format: HTTP redirect after handling the request - Access: No explicit access guard detected in the route handler; check surrounding router/mount middleware. - Side effects: writes or mutates server-side state - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. Errors are caught and usually returned as a flash message, JSON error, or error page. Most non-API POST routes are browser form submissions and usually redirect after completion. ### POST /plugins/now_playing/test-announcement - Purpose: Processes the now_playing plugin action for test announcement. - Inputs: No request parameters detected by static analysis. - Response format: HTTP redirect after handling the request - Access: logged-in session required or used - Side effects: Action route; side effects were not detected statically. - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. Errors are caught and usually returned as a flash message, JSON error, or error page. Most non-API POST routes are browser form submissions and usually redirect after completion. ### GET /plugins/now_playing/api/companion/ping - Purpose: Renders or serves the now_playing plugin page for api companion ping. - Inputs: No request parameters detected by static analysis. - Response format: JSON response - Access: No explicit access guard detected in the route handler; check surrounding router/mount middleware. - Side effects: Usually read-only. - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. API consumers should expect JSON unless the response format says otherwise. ### POST /plugins/now_playing/api/companion/state - Purpose: Processes the now_playing plugin action for api companion state. - Inputs: body: full submitted body is passed to a helper; exact fields are defined by the matching form/service - Response format: JSON response - Access: No explicit access guard detected in the route handler; check surrounding router/mount middleware. - Side effects: writes or mutates server-side state - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. Errors are caught and usually returned as a flash message, JSON error, or error page. Most non-API POST routes are browser form submissions and usually redirect after completion. API consumers should expect JSON unless the response format says otherwise. ### GET /plugins/now_playing/render/:token - Purpose: Renders or serves the now_playing plugin page for render token. - Inputs: path params: `token` - Response format: HTML page rendered from an EJS view - Access: No explicit access guard detected in the route handler; check surrounding router/mount middleware. - Side effects: Usually read-only. - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. ### GET /plugins/now_playing/render/:token/state - Purpose: Renders or serves the now_playing plugin page for render token state. - Inputs: path params: `token` - Response format: JSON response - Access: No explicit access guard detected in the route handler; check surrounding router/mount middleware. - Side effects: Usually read-only. - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. ### GET /plugins/now_playing/render/:token/events - Purpose: Renders or serves the now_playing plugin page for render token events. - Inputs: path params: `token` - Response format: streaming event response - Access: No explicit access guard detected in the route handler; check surrounding router/mount middleware. - Side effects: writes or mutates server-side state - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. ### GET /plugins/now_playing/render/:token/cover/:hash - Purpose: Renders or serves the now_playing plugin page for render token cover hash. - Inputs: path params: `hash`, `token` - Response format: static file response - Access: No explicit access guard detected in the route handler; check surrounding router/mount middleware. - Side effects: Usually read-only. - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. ## Commands - No plugin command triggers detected. ## Source Plugin folder: plugins/now_playing