From 67cfa82d1dceca2440b41e2528d3f5381d56a8d7 Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 14:38:18 -0500 Subject: [PATCH 01/26] feat: integrate Arbiter proxy, discovery pipeline, synthetic traffic generator - Replace custom Python proxy with Arbiter (JSONL export, diff, WS recording) - Add docker-compose.yml with PMS + Arbiter services - Add synthetic traffic generator for Plex endpoints - Add diff analyzer and run discovery orchestrator - Add GitHub Actions nightly discovery workflow --- .github/workflows/discovery.yml | 45 + .speakeasy/lint.yaml | 3 +- docker-compose.yml | 56 + package-lock.json | 100 + package.json | 6 + plex-api-spec.yaml | 12512 ++++++++++++-------- review/PLEX_API_SPEC_FULL_REVIEW.md | 828 ++ review/domain_auth_account_review.md | 228 + review/domain_devices_download_review.md | 249 + review/domain_library_metadata_review.md | 401 + review/domain_livetv_dvr_review.md | 256 + review/domain_media_provider_review.md | 250 + review/domain_playback_sessions_review.md | 208 + review/domain_server_system_review.md | 289 + review/integration_ecosystem_gaps.md | 343 + review/python_plexapi_gap_analysis.md | 302 + review/undocumented_endpoints_research.md | 423 + scripts/discovery/diff_analyzer.py | 160 + scripts/discovery/generate_traffic.py | 148 + scripts/discovery/run_discovery.py | 123 + scripts/extract_schemas.py | 147 + scripts/phase2_backfill.py | 737 ++ scripts/phase2_backfill_b.py | 574 + scripts/phase2b_client_control.py | 562 + 24 files changed, 13960 insertions(+), 4990 deletions(-) create mode 100644 .github/workflows/discovery.yml create mode 100644 docker-compose.yml create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 review/PLEX_API_SPEC_FULL_REVIEW.md create mode 100644 review/domain_auth_account_review.md create mode 100644 review/domain_devices_download_review.md create mode 100644 review/domain_library_metadata_review.md create mode 100644 review/domain_livetv_dvr_review.md create mode 100644 review/domain_media_provider_review.md create mode 100644 review/domain_playback_sessions_review.md create mode 100644 review/domain_server_system_review.md create mode 100644 review/integration_ecosystem_gaps.md create mode 100644 review/python_plexapi_gap_analysis.md create mode 100644 review/undocumented_endpoints_research.md create mode 100755 scripts/discovery/diff_analyzer.py create mode 100755 scripts/discovery/generate_traffic.py create mode 100755 scripts/discovery/run_discovery.py create mode 100644 scripts/extract_schemas.py create mode 100644 scripts/phase2_backfill.py create mode 100644 scripts/phase2_backfill_b.py create mode 100644 scripts/phase2b_client_control.py diff --git a/.github/workflows/discovery.yml b/.github/workflows/discovery.yml new file mode 100644 index 000000000..e2f6d2da1 --- /dev/null +++ b/.github/workflows/discovery.yml @@ -0,0 +1,45 @@ +name: Nightly Discovery Pipeline + +on: + schedule: + - cron: '0 6 * * *' + workflow_dispatch: + +jobs: + discover: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pyyaml + + - name: Set up Docker Compose + uses: docker/setup-buildx-action@v3 + + - name: Run discovery pipeline + run: | + cd scripts/discovery + python run_discovery.py + env: + PLEX_CLAIM_TOKEN: ${{ secrets.PLEX_CLAIM_TOKEN }} + + - name: Upload diff report + uses: actions/upload-artifact@v4 + with: + name: diff-report + path: /tmp/diff_report.json + + - name: Upload traffic capture + uses: actions/upload-artifact@v4 + with: + name: traffic-capture + path: /tmp/traffic.jsonl diff --git a/.speakeasy/lint.yaml b/.speakeasy/lint.yaml index 09e082d60..26c75a078 100644 --- a/.speakeasy/lint.yaml +++ b/.speakeasy/lint.yaml @@ -3,4 +3,5 @@ defaultRuleset: PathParamRuleset rulesets: PathParamRuleset: rulesets: - - speakeasy-generation # Use the speakeasy-generation ruleset as a base + - speakeasy-generation + - speakeasy-recommended diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..5fc56ad3d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,56 @@ +version: "3.8" + +services: + pms: + image: plexinc/pms-docker:latest + container_name: plex-api-test + restart: "no" + ports: + - "32400:32400/tcp" + - "32400:32400/udp" + environment: + - PLEX_CLAIM=${PLEX_CLAIM_TOKEN:-claim-xxxxxxxxxxxxxxxxxxxx} + - PUID=1000 + - PGID=1000 + - TZ=UTC + volumes: + - ./test-data/config:/config + - ./test-data/transcode:/transcode + - ./test-data/media:/data/media:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:32400/identity"] + interval: 10s + timeout: 5s + retries: 30 + start_period: 60s + + proxy: + build: + context: ../arbiter + dockerfile: Dockerfile + container_name: plex-api-proxy + restart: "no" + ports: + - "8080:8080" + - "9000:9000" + command: + - "node" + - "dist/src/cli.js" + - "--target" + - "http://pms:32400" + - "--port" + - "8080" + - "--docs-port" + - "9000" + - "--db-path" + - "/data/arbiter.db" + - "--diff-against" + - "/spec/plex-api-spec.yaml" + - "--exit-on-gap" + - "--verbose" + volumes: + - ./test-data/capture:/data + - ./plex-api-spec.yaml:/spec/plex-api-spec.yaml:ro + depends_on: + pms: + condition: service_healthy diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..03c5f8ff0 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,100 @@ +{ + "name": "plex-api-spec", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "prettier": "^3.8.3", + "prettier-plugin-openapi": "^1.0.15" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/js-yaml": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/prettier": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-openapi": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/prettier-plugin-openapi/-/prettier-plugin-openapi-1.0.15.tgz", + "integrity": "sha512-jYLcikix0NBnYiabmYUrh57jNLP3sfKtObRaX0MHYSzsnsyWqlCcvEkfD9B9U8eMZwtRTbCgV1ZCxUm5klQnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/js-yaml": "^4.0.9", + "js-yaml": "^4.1.0", + "yaml": "^2.8.3" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "prettier": "^3.0.0" + } + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..c94fd4db8 --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "devDependencies": { + "prettier": "^3.8.3", + "prettier-plugin-openapi": "^1.0.15" + } +} diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index 922b4e51f..a60e3354b 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -6,7 +6,7 @@ info: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html servers: - - url: "https://{IP-description}.{identifier}.plex.direct:{port}" + - url: https://{IP-description}.{identifier}.plex.direct:{port} variables: identifier: description: The unique identifier of this particular PMS @@ -17,18 +17,24 @@ servers: port: description: The Port number configured on the PMS. Typically (`32400`). default: '32400' - - url: "{protocol}://{host}:{port}" + - url: '{protocol}://{host}:{port}' variables: - protocol: - description: The network protocol to use. Typically (`http` or `https`) - default: http host: - description: "The Host of the PMS.\nIf using on a local network, this is the internal IP address of the server hosting the PMS.\nIf using on an external network, this is the external IP address for your network, and requires port forwarding.\nIf using a reverse proxy, this would be the external DNS domain for your network, and requires the proxy handle port forwarding. \n" + description: |- + The Host of the PMS. + If using on a local network, this is the internal IP address of the server hosting the PMS. + If using on an external network, this is the external IP address for your network, and requires port forwarding. + If using a reverse proxy, this would be the external DNS domain for your network, and requires the proxy handle port forwarding. default: localhost port: - description: "The Port number configured on the PMS. Typically (`32400`). \nIf using a reverse proxy, this would be the port number configured on the proxy.\n" + description: |- + The Port number configured on the PMS. Typically (`32400`). + If using a reverse proxy, this would be the port number configured on the proxy. default: '32400' - - url: "{full_server_url}" + protocol: + description: The network protocol to use. Typically (`http` or `https`) + default: http + - url: '{full_server_url}' variables: full_server_url: description: The full manual URL to access the PMS @@ -52,7 +58,7 @@ x-speakeasy-globals: - $ref: "#/components/parameters/X-Plex-Marketplace" tags: - name: Activities - description: | + description: |- Activities provide a way to monitor and control asynchronous operations on the server. In order to receive real-time updates for activities, a client would normally subscribe via either EventSource or Websocket endpoints. Activities are associated with HTTP replies via a special `X-Plex-Activity` header which contains the UUID of the activity. @@ -65,7 +71,7 @@ tags: - name: Content description: The actual content of the media provider - name: Devices - description: | + description: |- Media grabbers provide ways for media to be obtained for a given protocol. The simplest ones are `stream` and `download`. More complex grabbers can have associated devices Network tuners can present themselves on the network using the Simple Service Discovery Protocol and Plex Media Server will discover them. The following XML is an example of the data returned from SSDP. The `deviceType`, `serviceType`, and `serviceId` values must remain as they are in the example in order for PMS to properly discover the device. Other less-obvious fields are described in the parameters section below. @@ -103,13 +109,11 @@ tags: - name: Download Queue description: API Operations against the Download Queue - name: DVRs - description: | - The DVR provides means to watch and record live TV. This section of endpoints describes how to setup the DVR itself + description: The DVR provides means to watch and record live TV. This section of endpoints describes how to setup the DVR itself - name: EPG - description: | - The EPG (Electronic Program Guide) is responsible for obtaining metadata for what is airing on each channel and when + description: The EPG (Electronic Program Guide) is responsible for obtaining metadata for what is airing on each channel and when - name: Events - description: | + description: |- The server can notify clients in real-time of a wide range of events, from library scanning, to preferences being modified, to changes to media, and many other things. This is also the mechanism by which activity progress is reported. Two protocols for receiving the events are available: EventSource (also known as SSE), and WebSocket. @@ -126,12 +130,17 @@ tags: description: Endpoints for manipulating playlists. x-displayName: 'Library: Playlists' - name: Live TV - description: | - LiveTV contains the playback sessions of a channel from a DVR device + description: LiveTV contains the playback sessions of a channel from a DVR device - name: Log description: Logging mechanism to allow clients to log to the server - name: Play Queue - description: "The playqueue feature within a media provider\nA play queue represents the current list of media for playback. Although queues are persisted by the server, they should be regarded by the user as a fairly lightweight, an ephemeral list of items queued up for playback in a session. There is generally one active queue for each type of media (music, video, photos) that can be added to or destroyed and replaced with a fresh queue.\nPlay Queues has a region, which we refer to in this doc (partially for historical reasons) as \"Up Next\". This region is defined by `playQueueLastAddedItemID` existing on the media container. This follows iTunes' terminology. It is a special region after the currently playing item but before the originally-played items. This enables \"Party Mode\" listening/viewing, where items can be added on-the-fly, and normal queue playback resumed when completed. \nYou can visualize the play queue as a sliding window in the complete list of media queued for playback. This model is important when scaling to larger play queues (e.g. shuffling 40,000 audio tracks). The client only needs visibility into small areas of the queue at any given time, and the server can optimize access in this fashion.\nAll created play queues will have an empty \"Up Next\" area - unless the item is an album and no `key` is provided. In this case the \"Up Next\" area will be populated by the contents of the album. This is to allow queueing of multiple albums - since the 'Add to Up Next' will insert after all the tracks. This means that If you're creating a PQ from an album, you can only shuffle it if you set `key`. This is due to the above implicit queueing of albums when no `key` is provided as well as the current limitation that you cannot shuffle a PQ with an \"Up Next\" area.\nThe play queue window advances as the server receives timeline requests. The client needs to retrieve the play queue as the “now playing” item changes. There is no play queue API to update the playing item." + description: |- + The playqueue feature within a media provider + A play queue represents the current list of media for playback. Although queues are persisted by the server, they should be regarded by the user as a fairly lightweight, an ephemeral list of items queued up for playback in a session. There is generally one active queue for each type of media (music, video, photos) that can be added to or destroyed and replaced with a fresh queue. + Play Queues has a region, which we refer to in this doc (partially for historical reasons) as "Up Next". This region is defined by `playQueueLastAddedItemID` existing on the media container. This follows iTunes' terminology. It is a special region after the currently playing item but before the originally-played items. This enables "Party Mode" listening/viewing, where items can be added on-the-fly, and normal queue playback resumed when completed. + You can visualize the play queue as a sliding window in the complete list of media queued for playback. This model is important when scaling to larger play queues (e.g. shuffling 40,000 audio tracks). The client only needs visibility into small areas of the queue at any given time, and the server can optimize access in this fashion. + All created play queues will have an empty "Up Next" area - unless the item is an album and no `key` is provided. In this case the "Up Next" area will be populated by the contents of the album. This is to allow queueing of multiple albums - since the 'Add to Up Next' will insert after all the tracks. This means that If you're creating a PQ from an album, you can only shuffle it if you set `key`. This is due to the above implicit queueing of albums when no `key` is provided as well as the current limitation that you cannot shuffle a PQ with an "Up Next" area. + The play queue window advances as the server receives timeline requests. The client needs to retrieve the play queue as the “now playing” item changes. There is no play queue API to update the playing item. - name: Playlist description: Media playlists that can be created and played back - name: Preferences @@ -145,8 +154,7 @@ tags: - name: Status description: The status endpoints give you information about current playbacks, play history, and even terminating sessions. - name: Subscriptions - description: | - Subscriptions determine which media will be recorded and the criteria for selecting an airing when multiple are available + description: Subscriptions determine which media will be recorded and the criteria for selecting an airing when multiple are available - name: Timeline description: The actions feature within a media provider - name: Transcoder @@ -154,7 +162,7 @@ tags: - name: UltraBlur description: Service provided to compute UltraBlur colors and images. - name: Updater - description: | + description: |- This describes the API for searching and applying updates to the Plex Media Server. Updates to the status can be observed via the Event API. x-tagGroups: @@ -200,11 +208,11 @@ x-tagGroups: paths: /: get: - summary: Get PMS info operationId: getServerInfo - description: Information about this PMS setup and configuration + summary: Get PMS info tags: - General + description: Information about this PMS setup and configuration parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -223,14 +231,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDirectory' + $ref: "#/components/schemas/MediaContainerWithDirectory" /:/eventsource/notifications: get: - summary: Connect to Eventsource operationId: getNotifications - description: Connect to the event source to get a stream of events + summary: Connect to Eventsource tags: - Events + description: Connect to the event source to get a stream of events parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -244,7 +252,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: filter - description: | + description: |- By default, all events except logs are sent. A rich filtering mechanism is provided to allow clients to opt into or out of each event type using the `filters` parameter. For example: - `filters=-log`: All event types except logs (the default). @@ -262,28 +270,28 @@ paths: content: application/octet-stream: schema: - format: binary type: string + format: binary /:/prefs: get: - summary: Get all preferences operationId: getAllPreferences - description: Get the list of all preferences + summary: Get all preferences tags: - Preferences + description: Get the list of all preferences responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSettings' + $ref: "#/components/schemas/MediaContainerWithSettings" put: - summary: Set preferences operationId: setPreferences - description: Set a set of preferences in query parameters + summary: Set preferences tags: - Preferences + description: Set a set of preferences in query parameters parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -307,7 +315,7 @@ paths: sendCrashReports: 1 responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: Attempt to set a preferences that doesn't exist content: @@ -318,11 +326,11 @@ paths: text/html: {} /:/prefs/get: get: - summary: Get a preferences operationId: getPreference - description: Get a single preference and value + summary: Get a preferences tags: - Preferences + description: Get a single preference and value parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -346,20 +354,59 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSettings' + $ref: "#/components/schemas/MediaContainerWithSettings" '404': description: No preference with the provided name found. content: text/html: {} + /:/progress: + get: + operationId: updateProgress + summary: Update Progress + tags: + - General + description: Updates watch progress for an item. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: key + in: query + required: true + schema: + type: string + - name: identifier + in: query + schema: + type: string + - name: time + in: query + schema: + type: integer + - name: state + in: query + schema: + type: string + responses: + '200': + description: OK /:/rate: put: - summary: Rate an item operationId: setRating + summary: Rate an item + tags: + - Rate description: |- Set the rating on an item. This API does respond to the GET verb but applications should use PUT - tags: - - Rate parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -389,9 +436,9 @@ paths: in: query required: true schema: - maximum: 10 - minimum: 0 type: number + minimum: 0 + maximum: 10 - name: ratedAt description: The time when the rating occurred. If not present, interpreted as now. in: query @@ -400,7 +447,7 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: Bad Request. Can occur when parameters are of the wrong type, missing, or if the `ratedAt` is in the future content: @@ -411,13 +458,13 @@ paths: text/html: {} /:/scrobble: put: - summary: Mark an item as played operationId: markPlayed + summary: Mark an item as played + tags: + - Timeline description: |- Mark an item as played. Note, this does not create any view history of this item but rather just sets the state as played. The client must provide either the `key` or `uri` query parameter This API does respond to the GET verb but applications should use PUT - tags: - - Timeline parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -450,7 +497,7 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: Bad Request. Can occur when parameters are of the wrong type, or missing content: @@ -461,12 +508,11 @@ paths: text/html: {} /:/timeline: post: - summary: Report media timeline operationId: report - description: | - This endpoint is hit during media playback for an item. It must be hit whenever the play state changes, or in the absence of a play state change, in a regular fashion (generally this means every 10 seconds on a LAN/WAN, and every 20 seconds over cellular). + summary: Report media timeline tags: - Timeline + description: This endpoint is hit during media playback for an item. It must be hit whenever the play state changes, or in the absence of a play state change, in a regular fashion (generally this means every 10 seconds on a LAN/WAN, and every 20 seconds over cellular). parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -585,16 +631,21 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/ServerConfiguration' - - properties: + - $ref: "#/components/schemas/ServerConfiguration" + - type: object + properties: Bandwidths: description: A list of media times and bandwidths when trascoding is using with auto adjustment of bandwidth + type: object properties: Bandwidth: + type: array items: + type: object properties: bandwidth: description: The bandwidth at this time in kbps @@ -605,28 +656,23 @@ paths: time: description: Media playback time where this bandwidth started type: integer - type: object - type: array - type: object terminationCode: description: A code describing why the session was terminated by the server. type: integer terminationText: description: A user friendly and localized text describing why the session was terminated by the server. type: string - type: object - type: object '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" /:/unscrobble: put: - summary: Mark an item as unplayed operationId: unscrobble + summary: Mark an item as unplayed + tags: + - Timeline description: |- Mark an item as unplayed. The client must provide either the `key` or `uri` query parameter This API does respond to the GET verb but applications should use PUT - tags: - - Timeline parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -659,7 +705,7 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: Bad Request. Can occur when parameters are of the wrong type, or missing content: @@ -670,11 +716,11 @@ paths: text/html: {} /:/websocket/notifications: get: - summary: Connect to WebSocket operationId: connectWebSocket - description: Connect to the web socket to get a stream of events + summary: Connect to WebSocket tags: - Events + description: Connect to the web socket to get a stream of events parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -688,7 +734,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: filter - description: | + description: |- By default, all events except logs are sent. A rich filtering mechanism is provided to allow clients to opt into or out of each event type using the `filters` parameter. For example: - `filters=-log`: All event types except logs (the default). @@ -706,83 +752,196 @@ paths: content: application/octet-stream: schema: - format: binary type: string + format: binary + /:/websockets/notifications: + get: + operationId: getWebsocketNotifications + summary: Get WebSocket Notifications + tags: + - Events + description: WebSocket endpoint for real-time notifications (plural alias). Connect with X-Plex-Token header. Delivers NotificationContainer messages. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '101': + description: Switching Protocols - WebSocket connection established + '200': + description: WebSocket messages + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/NotificationContainer" + /accounts: + get: + operationId: getSystemAccounts + summary: Get System Accounts + tags: + - General + description: Get a list of local system accounts. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /actions/addToWatchlist: + post: + operationId: addToWatchlist + summary: Add to Watchlist + tags: + - Provider + description: Add an item to the user's Plex Discover watchlist. + servers: + - url: https://discover.provider.plex.tv + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: uri + in: query + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /actions/removeFromContinueWatching: + put: + operationId: removeFromContinueWatching + summary: Remove from Continue Watching + tags: + - General + description: Remove an item from the Continue Watching hub. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ratingKey + in: query + required: true + schema: + type: string + responses: + '200': + description: OK + /actions/removeFromWatchlist: + post: + operationId: removeFromWatchlist + summary: Remove from Watchlist + tags: + - Provider + description: Remove an item from the user's Plex Discover watchlist. + servers: + - url: https://discover.provider.plex.tv + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: uri + in: query + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /activities: get: - summary: Get all activities operationId: listActivities - description: List all activities on the server. Admins can see all activities but other users can only see their own + summary: Get all activities tags: - Activities + description: List all activities on the server. Admins can see all activities but other users can only see their own responses: '200': description: OK content: application/json: schema: + type: object properties: MediaContainer: allOf: - - properties: + - type: object + properties: Activity: - items: - properties: - cancellable: - description: Indicates whether this activity can be cancelled - type: boolean - Context: - description: An object with additional values - additionalProperties: true - type: object - progress: - description: A progress percentage. A value of -1 means the progress is indeterminate - maximum: 100 - minimum: -1 - type: number - Response: - description: An object with the response to the async opperation - additionalProperties: true - type: object - subtitle: - description: A user-friendly sub-title for this activity - type: string - title: - description: A user-friendly title for this activity - type: string - type: - description: The type of activity - type: string - userID: - description: The user this activity belongs to - type: integer - uuid: - description: The ID of the activity - type: string - type: object type: array - type: object - type: object + items: + $ref: "#/components/schemas/Activity" /butler: delete: - summary: Stop all Butler tasks operationId: stopTasks - description: This endpoint will stop all currently running tasks and remove any scheduled tasks from the queue. + summary: Stop all Butler tasks tags: - Butler + description: This endpoint will stop all currently running tasks and remove any scheduled tasks from the queue. security: - token: - admin responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" get: - summary: Get all Butler tasks operationId: getTasks - description: | - Get the list of butler tasks and their scheduling + summary: Get all Butler tasks tags: - Butler + description: Get the list of butler tasks and their scheduling security: - token: - admin @@ -792,105 +951,42 @@ paths: content: application/json: schema: + type: object properties: ButlerTasks: + type: object properties: ButlerTask: + type: array items: - properties: - description: - description: A user-friendly description of the task - type: string - enabled: - description: Whether this task is enabled or not - type: boolean - interval: - description: The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. - type: integer - name: - description: The name of the task - type: string - scheduleRandomized: - description: Indicates whether the timing of the task is randomized within the butler interval - type: boolean - title: - description: A user-friendly title of the task - type: string - type: object - type: array - type: object - type: object + $ref: "#/components/schemas/ButlerTask" post: - summary: Start all Butler tasks operationId: startTasks - description: | + summary: Start all Butler tasks + tags: + - Butler + description: |- This endpoint will attempt to start all Butler tasks that are enabled in the settings. Butler tasks normally run automatically during a time window configured on the server's Settings page but can be manually started using this endpoint. Tasks will run with the following criteria: 1. Any tasks not scheduled to run on the current day will be skipped. 2. If a task is configured to run at a random time during the configured window and we are outside that window, the task will start immediately. 3. If a task is configured to run at a random time during the configured window and we are within that window, the task will be scheduled at a random time within the window. 4. If we are outside the configured window, the task will start immediately. - tags: - - Butler security: - token: - admin responses: '200': - $ref: '#/components/responses/200' - /downloadQueue: - post: - summary: Create download queue - operationId: createDownloadQueue - description: | - Available: 0.2.0 - - Creates a download queue for this client if one doesn't exist, or returns the existing queue for this client and user. - tags: - - Download Queue - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - DownloadQueue: - items: - properties: - id: - type: integer - itemCount: - type: integer - status: - description: | - The state of this queue - - deciding: At least one item is still being decided - - waiting: At least one item is waiting for transcode and none are currently transcoding - - processing: At least one item is being transcoded - - done: All items are available (or potentially expired) - - error: At least one item has encountered an error - enum: - - deciding - - waiting - - processing - - done - - error - type: string - type: object - type: array - type: object - /hubs: + $ref: "#/components/responses/200" + /claim/token.json: get: - summary: Get global hubs - operationId: getAllHubs - description: Get the global hubs in this PMS + operationId: getClaimToken + summary: Get Claim Token tags: - - Hubs + - Authentication + description: Get a claim token for new server setup. + servers: + - url: https://plex.tv/api parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -903,48 +999,20 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/count' - - name: onlyTransient - description: Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added) - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: identifier - description: If provided, limit to only specified hubs - in: query - schema: - type: array - items: - type: string responses: '200': description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - $ref: '#/components/schemas/Hub' - type: array - type: object - type: object - /hubs/continueWatching: + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /clients: get: - summary: Get the continue watching hub - operationId: getContinueWatching - description: Get the global continue watching hub + operationId: getClients + summary: Get Clients tags: - - Hubs + - General + description: Get a list of connected Plex clients. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -957,36 +1025,30 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/count' responses: '200': - description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' + description: List of clients content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - $ref: '#/components/schemas/Hub' - type: array - type: object - type: object - /hubs/items: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Server: + type: array + items: + $ref: "#/components/schemas/PlexDevice" + /devices: get: - summary: Get a hub's items - operationId: getHubItems - description: Get the items within a single hub specified by identifier + operationId: getSystemDevices + summary: Get System Devices tags: - - Hubs + - General + description: Get a list of local system devices. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -999,41 +1061,19 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/count' - - name: identifier - description: If provided, limit to only specified hubs - in: query - required: true - schema: - type: array - items: - type: string responses: '200': description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' - content: - application/json: - schema: - properties: - MediaContainer: - $ref: '#/components/schemas/MediaContainer' - type: object - '404': - description: The specified hub could not be found - content: - text/html: {} - /hubs/promoted: + /diagnostics: get: - summary: Get the hubs which are promoted - operationId: getPromotedHubs - description: Get the global hubs which are promoted (should be displayed on the home screen) + operationId: getDiagnostics + summary: Get Diagnostics tags: - - Hubs + - General + description: Get server diagnostics overview. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1046,50 +1086,19 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/count' responses: '200': description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - $ref: '#/components/schemas/Hub' - type: array - type: object - type: object - /hubs/search: + /diagnostics/databases: get: - summary: Search Hub - operationId: searchHubs - description: | - Perform a search and get the result as hubs - - This endpoint performs a search across all library sections, or a single section, and returns matches as hubs, split up by type. It performs spell checking, looks for partial matches, and orders the hubs based on quality of results. In addition, based on matches, it will return other related matches (e.g. for a genre match, it may return movies in that genre, or for an actor match, movies with that actor). - - In the response's items, the following extra attributes are returned to further describe or disambiguate the result: - - - `reason`: The reason for the result, if not because of a direct search term match; can be either: - - `section`: There are multiple identical results from different sections. - - `originalTitle`: There was a search term match from the original title field (sometimes those can be very different or in a foreign language). - - ``: If the reason for the result is due to a result in another hub, the source hub identifier is returned. For example, if the search is for "dylan" then Bob Dylan may be returned as an artist result, an a few of his albums returned as album results with a reason code of `artist` (the identifier of that particular hub). Or if the search is for "arnold", there might be movie results returned with a reason of `actor` - - `reasonTitle`: The string associated with the reason code. For a section reason, it'll be the section name; For a hub identifier, it'll be a string associated with the match (e.g. `Arnold Schwarzenegger` for movies which were returned because the search was for "arnold"). - - `reasonID`: The ID of the item associated with the reason for the result. This might be a section ID, a tag ID, an artist ID, or a show ID. - - This request is intended to be very fast, and called as the user types. + operationId: downloadDatabaseDiagnostics + summary: Download Database Diagnostics tags: - - Search + - General + description: Download server database diagnostics bundle. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1102,65 +1111,19 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: query - description: The query term - in: query - required: true - schema: - type: string - - name: sectionId - description: This gives context to the search, and can result in re-ordering of search result hubs. - in: query - schema: - type: integer - example: 1 - - name: limit - description: The number of items to return per hub. 3 if not specified - in: query - schema: - type: integer responses: '200': description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - $ref: '#/components/schemas/Hub' - type: array - type: object - type: object - '400': - description: A required parameter was not given, the wrong type, or wrong value - content: - text/html: {} - '404': - description: Search restrictions result in no possible items found (such as searching no sections) - content: - text/html: {} - /hubs/search/voice: + /diagnostics/logs: get: - summary: Voice Search Hub - operationId: voiceSearchHubs - description: | - Perform a search tailored to voice input and get the result as hubs - - This endpoint performs a search specifically tailored towards voice or other imprecise input which may work badly with the substring and spell-checking heuristics used by the `/hubs/search` endpoint. It uses a [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance) heuristic to search titles, and as such is much slower than the other search endpoint. Whenever possible, clients should limit the search to the appropriate type. - - Results, as well as their containing per-type hubs, contain a `distance` attribute which can be used to judge result quality. + operationId: downloadLogBundle + summary: Download Log Bundle tags: - - Search + - General + description: Download server logs bundle. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1173,53 +1136,19 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: query - description: The query term - in: query - required: true - schema: - type: string - - $ref: '#/components/parameters/type' - - name: limit - description: The number of items to return per hub. 3 if not specified - in: query - schema: - type: integer responses: '200': description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - $ref: '#/components/schemas/Hub' - type: array - type: object - type: object - '400': - description: A required parameter was not given, the wrong type, or wrong value - content: - text/html: {} - /identity: - get: - summary: Get PMS identity - operationId: getIdentity - description: Get details about this PMS's identity + /downloadQueue: + post: + operationId: createDownloadQueue + summary: Create download queue tags: - - General - security: - - {} + - Download Queue + description: |- + Available: 0.2.0 + + Creates a download queue for this client if one doesn't exist, or returns the existing queue for this client and user. responses: '200': description: OK @@ -1228,27 +1157,21 @@ paths: schema: properties: MediaContainer: - properties: - claimed: - description: Indicates whether this server has been claimed by a user - type: boolean - machineIdentifier: - description: A unique identifier of the computer - type: string - size: - type: integer - version: - description: The full version string of the PMS - type: string - type: object - type: object - /library/all: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + DownloadQueue: + $ref: "#/components/schemas/DownloadQueue" + /friends: get: - summary: Get all items in library - operationId: getLibraryItems - description: Request all metadata items according to a query. + operationId: getFriends + summary: Get Friends tags: - - Library + - Users + description: Get the list of friends and shared users. + servers: + - url: https://plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1261,56 +1184,97 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/mediaQuery' responses: '200': - description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer + description: List of friends content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/caches: - delete: - summary: Delete library caches - operationId: deleteCaches - description: Delete the hub caches so they are recomputed on next request + type: object + properties: + users: + type: array + items: + type: object + properties: + title: + type: string + email: + type: string + id: + type: integer + thumb: + type: string + username: + type: string + uuid: + type: string + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /home/users: + get: + operationId: getHomeUsers + summary: Get Home Users tags: - - Library - security: - - token: - - admin + - Users + description: Get the list of Plex Home users. + servers: + - url: https://plex.tv/api + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" responses: '200': - $ref: '#/components/responses/200' - /library/clean/bundles: - put: - summary: Clean bundles - operationId: cleanBundles - description: Clean out any now unused bundles. Bundles can become unused when media is deleted + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + post: + operationId: createHomeUser + summary: Create Home User tags: - - Library - security: - - token: - - admin + - Users + description: Create a new Plex Home user. + servers: + - url: https://plex.tv/api + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" responses: '200': - $ref: '#/components/responses/200' - /library/collections: - post: - summary: Create collection - operationId: createCollection - description: Create a collection in the library + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /hubs: + get: + operationId: getAllHubs + summary: Get global hubs tags: - - Collections + - Hubs + description: Get the global hubs in this PMS parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1323,40 +1287,48 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: The section where this collection will be created + - $ref: "#/components/parameters/count" + - name: onlyTransient + description: Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added) in: query - required: true schema: - type: string - - $ref: '#/components/parameters/title' - - $ref: '#/components/parameters/smart' - - name: uri - description: The URI for processing the smart collection. Required for a smart collection + $ref: "#/components/schemas/BoolInt" + - name: identifier + description: If provided, limit to only specified hubs in: query schema: - type: string - - $ref: '#/components/parameters/type' + type: array + items: + type: string responses: '200': description: OK + headers: + X-Plex-Container-Start: + $ref: "#/components/headers/X-Plex-Container-Start" + X-Plex-Container-Total-Size: + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - '400': - description: The uri is missing for a smart collection or the section could not be found - content: - text/html: {} - /library/file: - post: - summary: Ingest a transient item - operationId: ingestTransientItem - description: |- - This endpoint takes a file path specified in the `url` parameter, matches it using the scanner's match mechanism, downloads rich metadata, and then ingests the item as a transient item (without a library section). In the case where the file represents an episode, the entire tree (show, season, and episode) is added as transient items. At this time, movies and episodes are the only supported types, which are gleaned automatically from the file path. - Note that any of the parameters passed to the metadata details endpoint (e.g. `includeExtras=1`) work here. + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Hub: + type: array + items: + $ref: "#/components/schemas/Hub" + /hubs/continueWatching: + get: + operationId: getContinueWatching + summary: Get the continue watching hub tags: - - Library + - Hubs + description: Get the global continue watching hub parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1369,59 +1341,36 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: url - description: The file of the file to ingest. - in: query - schema: - type: string - format: url - example: file:///storage%2Femulated%2F0%2FArcher-S01E01.mkv - - name: virtualFilePath - description: A virtual path to use when the url is opaque. - in: query - schema: - type: string - example: /Avatar.mkv - - name: computeHashes - description: Whether or not to compute Plex and OpenSubtitle hashes for the file. Defaults to 0. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: ingestNonMatches - description: Whether or not non matching media should be stored. Defaults to 0. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 + - $ref: "#/components/parameters/count" responses: '200': description: OK headers: X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/matches: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Hub: + type: array + items: + $ref: "#/components/schemas/Hub" + /hubs/home/recentlyAdded: get: - summary: Get library matches - operationId: getLibraryMatches - description: |- - The matches endpoint is used to match content external to the library with content inside the library. This is done by passing a series of semantic "hints" about the content (its type, name, or release year). Each type (e.g. movie) has a canonical set of minimal required hints. - This ability to match content is useful in a variety of scenarios. For example, in the DVR, the EPG uses the endpoint to match recording rules against airing content. And in the cloud, the UMP uses the endpoint to match up a piece of media with rich metadata. - The endpoint response can including multiple matches, if there is ambiguity, each one containing a `score` from 0 to 100. For somewhat historical reasons, anything over 85 is considered a positive match (we prefer false negatives over false positives in general for matching). - The `guid` hint is somewhat special, in that it generally represents a unique identity for a piece of media (e.g. the IMDB `ttXXX`) identifier, in contrast with other hints which can be much more ambiguous (e.g. a title of `Jane Eyre`, which could refer to the 1943 or the 2011 version). - Episodes require either a season/episode pair, or an air date (or both). Either the path must be sent, or the show title + operationId: getHomeRecentlyAdded + summary: Get Home Recently Added tags: - - Library + - Hubs + description: Get hub-centric recently added items. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1434,94 +1383,20 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/type' - - name: includeFullMetadata - in: query - schema: - description: Whether or not to include full metadata on a positive match. When set, and the best match exceeds a score threshold of 85, metadata as rich as possible is sent back. - $ref: "#/components/schemas/BoolInt" - - name: includeAncestorMetadata - in: query - schema: - description: Whether or not to include metadata for the item's ancestor (e.g. show and season data for an episode). - $ref: "#/components/schemas/BoolInt" - - name: includeAlternateMetadataSources - in: query - schema: - description: Whether or not to return all sources for each metadata field, which results in a different structure being passed back. - $ref: "#/components/schemas/BoolInt" - - name: guid - description: Used for movies, shows, artists, albums, and tracks. Allowed for various URI schemes, to be defined. - in: query - schema: - type: string - - $ref: '#/components/parameters/title' - - name: year - description: Used for movies shows, and albums. Optional. - in: query - schema: - type: integer - - name: path - description: Used for movies, episodes, and tracks. The full path to the media file, used for "cloud-scanning" an item. - in: query - schema: - type: string - - name: grandparentTitle - description: Used for episodes and tracks. The title of the show/artist. Required if `path` isn't passed. - in: query - schema: - type: string - - name: grandparentYear - description: Used for episodes. The year of the show. - in: query - schema: - type: integer - - name: parentIndex - description: Used for episodes and tracks. The season/album number. - in: query - schema: - type: integer - - name: index - description: Used for episodes and tracks. The episode/tracks number in the season/album. - in: query - schema: - type: integer - - name: originallyAvailableAt - description: Used for episodes. In the format `YYYY-MM-DD`. - in: query - schema: - type: string - - name: parentTitle - description: Used for albums and tracks. The artist name for albums or the album name for tracks. - in: query - schema: - type: string responses: '200': - description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer + description: Recently added hub items content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/optimize: - put: - summary: Optimize the Database - operationId: optimizeDatabase - description: Initiate optimize on the database. + $ref: "#/components/schemas/MediaContainerWithHubs" + /hubs/items: + get: + operationId: getHubItems + summary: Get a hub's items tags: - - Library - security: - - token: - - admin + - Hubs + description: Get the items within a single hub specified by identifier parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1534,24 +1409,41 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: async - description: If set, don't wait for completion but return an activity + - $ref: "#/components/parameters/count" + - name: identifier + description: If provided, limit to only specified hubs in: query + required: true schema: - $ref: "#/components/schemas/BoolInt" + type: array + items: + type: string responses: '200': - $ref: '#/components/responses/200' - /library/randomArtwork: + description: OK + headers: + X-Plex-Container-Start: + $ref: "#/components/headers/X-Plex-Container-Start" + X-Plex-Container-Total-Size: + $ref: "#/components/headers/X-Plex-Container-Total-Size" + content: + application/json: + schema: + type: object + properties: + MediaContainer: + $ref: "#/components/schemas/MediaContainer" + '404': + description: The specified hub could not be found + content: + text/html: {} + /hubs/promoted: get: - summary: Get random artwork - operationId: getRandomArtwork - description: | - Get random artwork across sections. This is commonly used for a screensaver. - - This retrieves 100 random artwork paths in the specified sections and returns them. Restrictions are put in place to not return artwork for items the user is not allowed to access. Artwork will be for Movies, Shows, and Artists only. + operationId: getPromotedHubs + summary: Get the hubs which are promoted tags: - - Library + - Hubs + description: Get the global hubs which are promoted (should be displayed on the home screen) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1564,69 +1456,50 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sections - description: The sections for which to fetch artwork. - in: query - explode: false - schema: - type: array - items: - type: integer - example: - - 5 - - 6 - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/MediaContainerWithArtwork' - /library/sections/all: - get: - summary: Get library sections (main Media Provider Only) - operationId: getSections - description: |- - A library section (commonly referred to as just a library) is a collection of media. Libraries are typed, and depending on their type provide either a flat or a hierarchical view of the media. For example, a music library has an artist > albums > tracks structure, whereas a movie library is flat. - Libraries have features beyond just being a collection of media; for starters, they include information about supported types, filters and sorts. This allows a client to provide a rich interface around the media (e.g. allow sorting movies by release year). - tags: - - Library + - $ref: "#/components/parameters/count" responses: '200': description: OK headers: X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - allowSync: - $ref: '#/components/schemas/AllowSync' - Directory: - items: - $ref: '#/components/schemas/LibrarySection' + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Hub: type: array - title1: - description: Typically just "Plex Library" - type: string - type: object - type: object - post: - summary: Add a library section - operationId: addSection - description: Add a new library section to the server + items: + $ref: "#/components/schemas/Hub" + /hubs/search: + get: + operationId: searchHubs + summary: Search Hub tags: - - Library - security: - - token: - - admin + - Search + description: |- + Perform a search and get the result as hubs + + This endpoint performs a search across all library sections, or a single section, and returns matches as hubs, split up by type. It performs spell checking, looks for partial matches, and orders the hubs based on quality of results. In addition, based on matches, it will return other related matches (e.g. for a genre match, it may return movies in that genre, or for an actor match, movies with that actor). + + In the response's items, the following extra attributes are returned to further describe or disambiguate the result: + + - `reason`: The reason for the result, if not because of a direct search term match; can be either: + - `section`: There are multiple identical results from different sections. + - `originalTitle`: There was a search term match from the original title field (sometimes those can be very different or in a foreign language). + - ``: If the reason for the result is due to a result in another hub, the source hub identifier is returned. For example, if the search is for "dylan" then Bob Dylan may be returned as an artist result, an a few of his albums returned as album results with a reason code of `artist` (the identifier of that particular hub). Or if the search is for "arnold", there might be movie results returned with a reason of `actor` + - `reasonTitle`: The string associated with the reason code. For a section reason, it'll be the section name; For a hub identifier, it'll be a string associated with the match (e.g. `Arnold Schwarzenegger` for movies which were returned because the search was for "arnold"). + - `reasonID`: The ID of the item associated with the reason for the result. This might be a section ID, a tag ID, an artist ID, or a show ID. + + This request is intended to be very fast, and called as the user types. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1639,99 +1512,163 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: name - description: The name of the new section + - name: query + description: The query term in: query required: true schema: type: string - - name: type - description: The type of library section + - name: sectionId + description: This gives context to the search, and can result in re-ordering of search result hubs. in: query - required: true schema: type: integer - - name: scanner - description: The scanner this section should use + example: 1 + - name: limit + description: The number of items to return per hub. 3 if not specified in: query schema: - type: string - - name: agent - description: The agent this section should use for metadata + type: integer + - name: includeCollections + description: Include collection results in search hubs in: query - required: true schema: - type: string - - name: metadataAgentProviderGroupId - description: The agent group id for this section + type: boolean + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + $ref: "#/components/headers/X-Plex-Container-Start" + X-Plex-Container-Total-Size: + $ref: "#/components/headers/X-Plex-Container-Total-Size" + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Hub: + type: array + items: + $ref: "#/components/schemas/Hub" + '400': + description: A required parameter was not given, the wrong type, or wrong value + content: + text/html: {} + '404': + description: Search restrictions result in no possible items found (such as searching no sections) + content: + text/html: {} + /hubs/search/voice: + get: + operationId: voiceSearchHubs + summary: Voice Search Hub + tags: + - Search + description: |- + Perform a search tailored to voice input and get the result as hubs + + This endpoint performs a search specifically tailored towards voice or other imprecise input which may work badly with the substring and spell-checking heuristics used by the `/hubs/search` endpoint. It uses a [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance) heuristic to search titles, and as such is much slower than the other search endpoint. Whenever possible, clients should limit the search to the appropriate type. + + Results, as well as their containing per-type hubs, contain a `distance` attribute which can be used to judge result quality. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/type" + - name: query + description: The query term in: query + required: true schema: type: string - - name: language - description: The language of this section + - name: limit + description: The number of items to return per hub. 3 if not specified in: query - required: true schema: - type: string - - name: locations - description: The locations on disk to add to this section + type: integer + - name: includeCollections + description: Include collection results in search hubs in: query schema: - type: array - items: - type: string - example: - - O:\fatboy\Media\Ripped\Music - - O:\fatboy\Media\My Music - - name: prefs - description: The preferences for this section - in: query - style: deepObject - schema: - type: object - example: - collectionMode: 2 - hidden: 0 - - name: relative - description: If set, paths are relative to `Media Upload` path - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: importFromiTunes - description: If set, import media from iTunes. - in: query - schema: - $ref: "#/components/schemas/BoolInt" + type: boolean responses: '200': - $ref: '#/components/responses/slash-get-responses-200' + description: OK + headers: + X-Plex-Container-Start: + $ref: "#/components/headers/X-Plex-Container-Start" + X-Plex-Container-Total-Size: + $ref: "#/components/headers/X-Plex-Container-Total-Size" + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Hub: + type: array + items: + $ref: "#/components/schemas/Hub" '400': - description: Section cannot be created due to bad parameters in request + description: A required parameter was not given, the wrong type, or wrong value content: text/html: {} - /library/sections/all/refresh: - delete: - summary: Stop refresh - operationId: stopAllRefreshes - description: Stop all refreshes across all sections + /identity: + get: + operationId: getIdentity + summary: Get PMS identity tags: - - Library + - General + description: Get details about this PMS's identity security: - - token: - - admin + - {} responses: '200': - $ref: '#/components/responses/LibrarySections' - /library/sections/prefs: + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + type: object + properties: + claimed: + description: Indicates whether this server has been claimed by a user + type: boolean + machineIdentifier: + description: A unique identifier of the computer + type: string + size: + type: integer + version: + description: The full version string of the PMS + type: string + /library/all: get: - summary: Get section prefs - operationId: getSectionsPrefs - description: Get a section's preferences for a metadata type + operationId: getLibraryItems + summary: Get all items in library tags: - Library - security: - - token: - - admin + description: Request all metadata items according to a query. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1744,34 +1681,56 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: type - description: The metadata type - in: query - required: true - schema: - type: integer - - name: agent - description: The metadata agent in use - in: query - schema: - type: string + - $ref: "#/components/parameters/mediaQuery" responses: '200': - $ref: '#/components/responses/LibrarySections' - '400': - description: type not provided or not an integer + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer content: - text/html: {} - /library/sections/refresh: - post: - summary: Refresh all sections - operationId: refreshSectionsMetadata - description: Tell PMS to refresh all section metadata + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/caches: + delete: + operationId: deleteCaches + summary: Delete library caches + tags: + - Library + description: Delete the hub caches so they are recomputed on next request + security: + - token: + - admin + responses: + '200': + $ref: "#/components/responses/200" + /library/clean/bundles: + put: + operationId: cleanBundles + summary: Clean bundles tags: - Library + description: Clean out any now unused bundles. Bundles can become unused when media is deleted security: - token: - admin + responses: + '200': + $ref: "#/components/responses/200" + /library/collections: + post: + operationId: createCollection + summary: Create collection + tags: + - Collections + description: Create a collection in the library parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1784,25 +1743,40 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: force - description: Force refresh of metadata + - $ref: "#/components/parameters/title" + - $ref: "#/components/parameters/smart" + - $ref: "#/components/parameters/type" + - name: sectionId + description: The section where this collection will be created + in: query + required: true + schema: + type: string + - name: uri + description: The URI for processing the smart collection. Required for a smart collection in: query schema: - type: boolean + type: string responses: '200': - $ref: '#/components/responses/200' - '503': - description: Server cannot refresh a music library when not signed in + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + description: The uri is missing for a smart collection or the section could not be found content: text/html: {} - /library/tags: - get: - summary: Get all library tags of a type - operationId: getTags - description: Get all library tags of a type + /library/file: + post: + operationId: ingestTransientItem + summary: Ingest a transient item tags: - Library + description: |- + This endpoint takes a file path specified in the `url` parameter, matches it using the scanner's match mechanism, downloads rich metadata, and then ingests the item as a transient item (without a library section). In the case where the file represents an episode, the entire tree (show, season, and episode) is added as transient items. At this time, movies and episodes are the only supported types, which are gleaned automatically from the file path. + Note that any of the parameters passed to the metadata details endpoint (e.g. `includeExtras=1`) work here. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1815,49 +1789,31 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/type' - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Directory: - items: - properties: - filter: - description: The filter string to view metadata wit this tag - type: string - id: - type: integer - tag: - description: The name of the tag - type: string - tagKey: - description: The key of this tag. This is a universal key across all PMS instances and plex.tv services - type: string - tagType: - description: The type of the tag - type: integer - thumb: - description: The URL to a thumbnail for this tag - type: string - type: object - type: array - type: object - type: object - /livetv/dvrs: - get: - summary: Get DVRs - operationId: listDVRs - description: Get the list of all available DVRs - tags: - - DVRs + - name: url + description: The file of the file to ingest. + in: query + schema: + type: string + format: url + example: file:///storage%2Femulated%2F0%2FArcher-S01E01.mkv + - name: virtualFilePath + description: A virtual path to use when the url is opaque. + in: query + schema: + type: string + example: /Avatar.mkv + - name: computeHashes + description: Whether or not to compute Plex and OpenSubtitle hashes for the file. Defaults to 0. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: ingestNonMatches + description: Whether or not non matching media should be stored. Defaults to 0. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 responses: '200': description: OK @@ -1873,39 +1829,19 @@ paths: content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: - DVR: - items: - properties: - Device: - items: - $ref: '#/components/schemas/Device' - type: array - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string - type: object - type: array - type: object - type: object - post: - summary: Create a DVR - operationId: createDVR - description: Creation of a DVR, after creation of a devcie and a lineup is selected + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/matches: + get: + operationId: getLibraryMatches + summary: Get library matches tags: - - DVRs - security: - - token: - - admin + - Library + description: |- + The matches endpoint is used to match content external to the library with content inside the library. This is done by passing a series of semantic "hints" about the content (its type, name, or release year). Each type (e.g. movie) has a canonical set of minimal required hints. + This ability to match content is useful in a variety of scenarios. For example, in the DVR, the EPG uses the endpoint to match recording rules against airing content. And in the cloud, the UMP uses the endpoint to match up a piece of media with rich metadata. + The endpoint response can including multiple matches, if there is ambiguity, each one containing a `score` from 0 to 100. For somewhat historical reasons, anything over 85 is considered a positive match (we prefer false negatives over false positives in general for matching). + The `guid` hint is somewhat special, in that it generally represents a unique identity for a piece of media (e.g. the IMDB `ttXXX`) identifier, in contrast with other hints which can be much more ambiguous (e.g. a title of `Jane Eyre`, which could refer to the 1943 or the 2011 version). + Episodes require either a season/episode pair, or an air date (or both). Either the path must be sent, or the show title parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1918,58 +1854,66 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: lineup - description: The EPG lineup. + - $ref: "#/components/parameters/type" + - $ref: "#/components/parameters/title" + - name: includeFullMetadata + in: query + schema: + $ref: "#/components/schemas/BoolInt" + description: Whether or not to include full metadata on a positive match. When set, and the best match exceeds a score threshold of 85, metadata as rich as possible is sent back. + - name: includeAncestorMetadata + in: query + schema: + $ref: "#/components/schemas/BoolInt" + description: Whether or not to include metadata for the item's ancestor (e.g. show and season data for an episode). + - name: includeAlternateMetadataSources + in: query + schema: + $ref: "#/components/schemas/BoolInt" + description: Whether or not to return all sources for each metadata field, which results in a different structure being passed back. + - name: guid + description: Used for movies, shows, artists, albums, and tracks. Allowed for various URI schemes, to be defined. in: query schema: type: string - example: lineup://tv.plex.providers.epg.onconnect/USA-HI51418-DEFAULT - - name: device - description: The device. + - name: year + description: Used for movies shows, and albums. Optional. in: query schema: - type: array - items: - type: string - example: device[]=device://tv.plex.grabbers.hdhomerun/1053C0CA - - name: language - description: The language. + type: integer + - name: path + description: Used for movies, episodes, and tracks. The full path to the media file, used for "cloud-scanning" an item. in: query schema: type: string - example: eng - responses: - '200': - $ref: '#/components/responses/dvrRequestHandler_slash-get-responses-200' - /livetv/epg/channelmap: - get: - summary: Compute the best channel map - operationId: computeChannelMap - description: Compute the best channel map, given device and lineup - tags: - - EPG - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: device - description: The URI describing the device + - name: grandparentTitle + description: Used for episodes and tracks. The title of the show/artist. Required if `path` isn't passed. in: query - required: true schema: type: string - - name: lineup - description: The URI describing the lineup + - name: grandparentYear + description: Used for episodes. The year of the show. + in: query + schema: + type: integer + - name: parentIndex + description: Used for episodes and tracks. The season/album number. + in: query + schema: + type: integer + - name: index + description: Used for episodes and tracks. The episode/tracks number in the season/album. + in: query + schema: + type: integer + - name: originallyAvailableAt + description: Used for episodes. In the format `YYYY-MM-DD`. + in: query + schema: + type: string + - name: parentTitle + description: Used for albums and tracks. The artist name for albums or the album name for tracks. in: query - required: true schema: type: string responses: @@ -1987,43 +1931,47 @@ paths: content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - ChannelMapping: - items: - properties: - channelKey: - type: string - deviceIdentifier: - description: The channel description on the device - type: string - favorite: - type: boolean - lineupIdentifier: - description: The channel identifier in the lineup - type: string - type: object - type: array - type: object - type: object - '404': - description: No device or provider with the identifier was found - content: - text/html: {} - '500': - description: Failed to compute channel map - content: - text/html: {} - /livetv/epg/channels: + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/optimize: + put: + operationId: optimizeDatabase + summary: Optimize the Database + tags: + - Library + description: Initiate optimize on the database. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: async + description: If set, don't wait for completion but return an activity + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + /library/randomArtwork: get: - summary: Get channels for a lineup - operationId: getChannels - description: Get channels for a lineup within an EPG provider + operationId: getRandomArtwork + summary: Get random artwork tags: - - EPG + - Library + description: |- + Get random artwork across sections. This is commonly used for a screensaver. + + This retrieves 100 random artwork paths in the specified sections and returns them. Restrictions are put in place to not return artwork for items the user is not allowed to access. Artwork will be for Movies, Shows, and Artists only. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2036,149 +1984,59 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: lineup - description: The URI describing the lineup + - name: sections + description: The sections for which to fetch artwork. in: query - required: true + explode: false schema: - type: string + type: array + items: + type: integer + example: + - 5 + - 6 responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Channel: - items: - $ref: '#/components/schemas/Channel' - type: array - type: object - type: object - '404': - description: No provider with the identifier was found - content: - text/html: {} - /livetv/epg/countries: + $ref: "#/components/schemas/MediaContainerWithArtwork" + /library/recentlyAdded: get: - summary: Get all countries - operationId: getCountries - description: This endpoint returns a list of countries which EPG data is available for. There are three flavors, as specfied by the `flavor` attribute + operationId: getRecentlyAdded + summary: Get Recently Added tags: - - EPG + - Library + description: Get globally recently added items across all libraries. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" responses: '200': - description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer + description: Recently added items content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Country: - items: - properties: - code: - description: Three letter code - type: string - example: - type: string - flavor: - description: | - - `0`: The country is divided into regions, and following the key will lead to a list of regions. - - `1`: The county is divided by postal codes, and an example code is returned in `example`. - - `2`: The country has a single postal code, returned in `example`. - enum: - - 0 - - 1 - - 2 - type: integer - key: - type: string - language: - description: Three letter language code - type: string - languageTitle: - description: The title of the language - type: string - title: - type: string - type: - type: string - type: object - type: array - type: object - type: object - /livetv/epg/languages: - get: - summary: Get all languages - operationId: getAllLanguages - description: Returns a list of all possible languages for EPG data. - tags: - - EPG - responses: - '200': - description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Language: - items: - properties: - code: - description: 3 letter language code - type: string - title: - type: string - type: object - type: array - type: object - type: object - /livetv/epg/lineup: + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/search: get: - summary: Compute the best lineup - operationId: getLineup - description: Compute the best lineup, given lineup group and device + operationId: searchDiscover + summary: Search Discover tags: - - EPG + - Provider + description: Search movies and shows in Plex Discover. + servers: + - url: https://discover.provider.plex.tv parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2191,142 +2049,79 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: device - description: The URI describing the device + - name: query in: query - required: true schema: type: string - - name: lineupGroup - description: The URI describing the lineupGroup + - name: limit + in: query + schema: + type: integer + default: 10 + - name: searchTypes in: query - required: true schema: type: string - responses: - '200': - description: OK - headers: - X-Plex-Activity: - description: The activity of the reload process - schema: - type: string - '404': - description: No device or provider with the identifier was found - content: - text/html: {} - '500': - description: Could not get device's channels - content: - text/html: {} - /livetv/epg/lineupchannels: - get: - summary: Get the channels for mulitple lineups - operationId: getLineupChannels - description: Get the channels across multiple lineups - tags: - - EPG - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: lineup - description: The URIs describing the lineups + example: movies,tv + - name: searchProviders in: query - required: true schema: - type: array - items: - type: string + type: string + example: discover,PLEXAVOD,PLEXTVOD + - name: includeMetadata + in: query + schema: + type: integer + default: 1 responses: '200': description: OK - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Lineup: - items: - allOf: - - $ref: '#/components/schemas/Lineup' - - properties: - Channel: - items: - $ref: '#/components/schemas/Channel' - type: array - type: object - type: array - type: object - type: object - '404': - description: No provider with the identifier was found - content: - text/html: {} - /livetv/sessions: + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /library/sections/all: get: - summary: Get all sessions - operationId: getSessions - description: Get all livetv sessions and metadata + operationId: getSections + summary: Get library sections (main Media Provider Only) tags: - - Live TV + - Library + description: |- + A library section (commonly referred to as just a library) is a collection of media. Libraries are typed, and depending on their type provide either a flat or a hierarchical view of the media. For example, a music library has an artist > albums > tracks structure, whereas a movie library is flat. + Libraries have features beyond just being a collection of media; for starters, they include information about supported types, filters and sorts. This allows a client to provide a rich interface around the media (e.g. allow sorting movies by release year). responses: '200': description: OK headers: X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /log: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + allowSync: + $ref: "#/components/schemas/AllowSync" + Directory: + type: array + items: + $ref: "#/components/schemas/LibrarySection" + title1: + description: Typically just "Plex Library" + type: string post: - summary: Logging a multi-line message to the Plex Media Server log - operationId: writeLog - description: | - This endpoint will write multiple lines to the main Plex Media Server log in a single request. It takes a set of query strings as would normally sent to the above PUT endpoint as a linefeed-separated block of POST data. The parameters for each query string match as above. - tags: - - Log - security: - - token: - - admin - requestBody: - required: true - description: Line separated list of log items - content: - text/plain: {} - responses: - '200': - $ref: '#/components/responses/200' - '400': - $ref: '#/components/responses/400' - put: - summary: Logging a single-line message to the Plex Media Server log - operationId: writeMessage - description: | - This endpoint will write a single-line log message, including a level and source to the main Plex Media Server log. - - Note: This endpoint responds to all HTTP verbs **except POST** but PUT is preferred + operationId: addSection + summary: Add a library section tags: - - Log + - Library + description: Add a new library section to the server security: - token: - admin @@ -2342,80 +2137,99 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: level - description: | - An integer log level to write to the PMS log with. - - 0: Error - - 1: Warning - - 2: Info - - 3: Debug - - 4: Verbose + - name: name + description: The name of the new section + in: query + required: true + schema: + type: string + - name: type + description: The type of library section in: query + required: true schema: type: integer - enum: - - 0 - - 1 - - 2 - - 3 - - 4 - - name: message - description: The text of the message to write to the log. + - name: scanner + description: The scanner this section should use in: query schema: type: string - - name: source - description: A string indicating the source of the message. + - name: agent + description: The agent this section should use for metadata in: query + required: true schema: type: string - responses: - '200': - $ref: '#/components/responses/200' - /log/networked: - post: - summary: Enabling Papertrail - operationId: enablePapertrail - description: | - This endpoint will enable all Plex Media Server logs to be sent to the Papertrail networked logging site for a period of time - - Note: This endpoint responds to all HTTP verbs but POST is preferred - tags: - - Log - security: - - token: - - admin - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: minutes - description: The number of minutes logging should be sent to Papertrail + - name: metadataAgentProviderGroupId + description: The agent group id for this section in: query schema: - type: integer + type: string + - name: language + description: The language of this section + in: query + required: true + schema: + type: string + - name: locations + description: The locations on disk to add to this section + in: query + schema: + type: array + items: + type: string + example: + - O:\fatboy\Media\Ripped\Music + - O:\fatboy\Media\My Music + - name: prefs + description: The preferences for this section + in: query + style: deepObject + schema: + type: object + example: + collectionMode: 2 + hidden: 0 + - name: relative + description: If set, paths are relative to `Media Upload` path + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: importFromiTunes + description: If set, import media from iTunes. + in: query + schema: + $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' - '403': - description: User doesn't have permission + $ref: "#/components/responses/slash-get-responses-200" + '400': + description: Section cannot be created due to bad parameters in request content: text/html: {} - /media/grabbers: + /library/sections/all/refresh: + delete: + operationId: stopAllRefreshes + summary: Stop refresh + tags: + - Library + description: Stop all refreshes across all sections + security: + - token: + - admin + responses: + '200': + $ref: "#/components/responses/LibrarySections" + /library/sections/prefs: get: - summary: Get available grabbers - operationId: getAvailableGrabbers - description: Get available grabbers visible to the server + operationId: getSectionsPrefs + summary: Get section prefs tags: - - Devices + - Library + description: Get a section's preferences for a metadata type + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2428,77 +2242,31 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: protocol - description: Only return grabbers providing this protocol. + - name: type + description: The metadata type + in: query + required: true + schema: + type: integer + - name: agent + description: The metadata agent in use in: query schema: type: string - example: livetv - responses: - '200': - description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - MediaGrabber: - items: - properties: - identifier: - type: string - protocol: - type: string - title: - type: string - type: object - type: array - type: object - type: object - /media/grabbers/devices: - get: - summary: Get all devices - operationId: listDevices - description: Get the list of all devices present - tags: - - Devices - security: - - token: - - admin responses: '200': - description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer + $ref: "#/components/responses/LibrarySections" + '400': + description: type not provided or not an integer content: - application/json: - schema: - $ref: '#/components/schemas/MediaContainerWithDevice' + text/html: {} + /library/sections/refresh: post: - summary: Add a device - operationId: addDevice - description: This endpoint adds a device to an existing grabber. The device is identified, and added to the correct grabber. + operationId: refreshSectionsMetadata + summary: Refresh all sections tags: - - Devices + - Library + description: Tell PMS to refresh all section metadata security: - token: - admin @@ -2514,91 +2282,27 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: uri - description: The URI of the device. + - name: force + description: Force refresh of metadata in: query schema: - type: string - example: http://10.0.0.5 - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/MediaContainerWithDevice' - '400': - $ref: '#/components/responses/400' - /media/grabbers/devices/discover: - post: - summary: Tell grabbers to discover devices - operationId: discoverDevices - description: Tell grabbers to discover devices - tags: - - Devices - security: - - token: - - admin + type: boolean responses: '200': - description: OK + $ref: "#/components/responses/200" + '503': + description: Server cannot refresh a music library when not signed in content: - application/json: - schema: - $ref: '#/components/schemas/MediaContainerWithDevice' - /media/providers: + text/html: {} + /library/sections/watchlist/all: get: - summary: Get the list of available media providers - operationId: listProviders - description: Get the list of all available media providers for this PMS. This will generally include the library provider and possibly EPG if DVR is set up. - tags: - - Provider - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/ServerConfiguration' - - properties: - Feature: - items: - properties: - Directory: - items: - $ref: '#/components/schemas/Directory' - type: array - key: - type: string - type: - type: string - type: object - type: array - identifier: - description: A unique identifier for the provider, e.g. `com.plexapp.plugins.library`. - type: string - protocols: - description: |- - A comma-separated list of default protocols for the provider, which can be: - - `stream`: The provider allows streaming media directly from the provider (e.g. for Vimeo). - `download`: The provider allows downloading media for offline storage, sync, etc. (e.g. Podcasts). - `livetv`: The provider provides live content which is only available on a schedule basis. - type: string - title: - description: The title of the provider. - type: string - types: - description: This attribute contains a comma-separated list of the media types exposed by the provider (e.g. `video, audio`). - type: string - type: object - type: object - post: - summary: Add a media provider - operationId: addProvider - description: This endpoint registers a media provider with the server. Once registered, the media server acts as a reverse proxy to the provider, allowing both local and remote providers to work. + operationId: getWatchlist + summary: Get Watchlist tags: - Provider + description: Get the user's Plex Discover watchlist. + servers: + - url: https://discover.provider.plex.tv parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2611,34 +2315,24 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: url - description: The URL of the media provider to add. - in: query - required: true - schema: - type: string responses: '200': - $ref: '#/components/responses/200' + description: Watchlist items + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': - $ref: '#/components/responses/400' - /media/providers/refresh: - post: - summary: Refresh media providers - operationId: refreshProviders - description: Refresh all known media providers. This is useful in case a provider has updated features. - tags: - - Provider - responses: - '200': - $ref: '#/components/responses/200' - /media/subscriptions: + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /library/tags: get: - summary: Get all subscriptions - operationId: getAllSubscriptions - description: Get all subscriptions and potentially the grabs too + operationId: getTags + summary: Get all library tags of a type tags: - - Subscriptions + - Library + description: Get all library tags of a type parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2651,16 +2345,49 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: includeGrabs - description: Indicates whether the active grabs should be included as well - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: includeStorage - description: Compute the storage of recorded items desired by this subscription - in: query - schema: - $ref: "#/components/schemas/BoolInt" + - $ref: "#/components/parameters/type" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Directory: + type: array + items: + type: object + properties: + filter: + description: The filter string to view metadata wit this tag + type: string + id: + type: integer + tag: + description: The name of the tag + type: string + tagKey: + description: The key of this tag. This is a universal key across all PMS instances and plex.tv services + type: string + tagType: + description: The type of the tag + type: integer + thumb: + description: The URL to a thumbnail for this tag + type: string + /livetv/dvrs: + get: + operationId: listDVRs + summary: Get DVRs + tags: + - DVRs + description: Get the list of all available DVRs responses: '200': description: OK @@ -2676,17 +2403,39 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSubscription' - '403': - description: User cannot access DVR on this server - content: - text/html: {} + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainerWithStatus" + - type: object + properties: + DVR: + type: array + items: + type: object + properties: + Device: + type: array + items: + $ref: "#/components/schemas/Device" + key: + type: string + language: + type: string + lineup: + type: string + uuid: + type: string post: - summary: Create a subscription - operationId: createSubscription - description: Create a subscription. The query parameters should be mostly derived from the [template](#tag/Subscriptions/operation/mediaSubscriptionsGetTemplate) + operationId: createDVR + summary: Create a DVR tags: - - Subscriptions + - DVRs + description: Creation of a DVR, after creation of a devcie and a lineup is selected + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2699,51 +2448,60 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: targetLibrarySectionID - description: The library section into which we'll grab the media. Not actually required when the subscription is to a playlist. - in: query - schema: - type: integer - example: 1 - - name: targetSectionLocationID - description: The section location into which to grab. + - name: lineup + description: The EPG lineup. in: query schema: - type: integer - example: 3 - - name: type - description: The type of the thing we're subscribing too (e.g. show, season). + type: string + example: lineup://tv.plex.providers.epg.onconnect/USA-HI51418-DEFAULT + - name: device + description: The device. in: query schema: - type: integer - example: 2 - - name: hints - description: 'Hints describing what we''re looking for. Note: The hint `ratingKey` is required for downloading from a PMS remote.' + type: array + items: + type: string + example: device[]=device://tv.plex.grabbers.hdhomerun/1053C0CA + - name: language + description: The language. in: query - style: deepObject schema: - type: object - example: - title: Family Guy - - name: prefs - description: Subscription preferences. + type: string + example: eng + responses: + '200': + $ref: "#/components/responses/dvrRequestHandler_slash-get-responses-200" + /livetv/epg/channelmap: + get: + operationId: computeChannelMap + summary: Compute the best channel map + tags: + - EPG + description: Compute the best channel map, given device and lineup + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: device + description: The URI describing the device in: query - style: deepObject + required: true schema: - type: object - example: - minVideoQuality: 720 - - name: params - description: | - Subscription parameters. - - `mediaProviderID`: Required for downloads to indicate which MP the subscription will download into - - `source`: Required for downloads to indicate the source of the downloaded content. + type: string + - name: lineup + description: The URI describing the lineup in: query - style: deepObject + required: true schema: - type: object - example: - mediaProviderID: 1 + type: string responses: '200': description: OK @@ -2759,92 +2517,43 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - MediaSubscription: - items: - $ref: '#/components/schemas/MediaSubscription' + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + ChannelMapping: type: array - type: object - type: object - '400': - $ref: '#/components/responses/400' - '403': - description: User cannot access DVR on this server - content: - text/html: {} - '409': - description: An subscription with the same parameters already exists - content: - text/html: {} - /media/subscriptions/process: - post: - summary: Process all subscriptions - operationId: processSubscriptions - description: Process all subscriptions asynchronously - tags: - - Subscriptions - responses: - '200': - description: OK - headers: - X-Plex-Activity: - description: The activity of the process - schema: - type: string - content: - text/html: {} - '403': - description: User cannot access DVR on this server + items: + type: object + properties: + channelKey: + type: string + deviceIdentifier: + description: The channel description on the device + type: string + favorite: + type: boolean + lineupIdentifier: + description: The channel identifier in the lineup + type: string + '404': + description: No device or provider with the identifier was found content: text/html: {} - /media/subscriptions/scheduled: - get: - summary: Get all scheduled recordings - operationId: getScheduledRecordings - description: Get all scheduled recordings across all subscriptions - tags: - - Subscriptions - responses: - '200': - description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - MediaGrabOperation: - items: - $ref: '#/components/schemas/MediaGrabOperation' - type: array - type: object - type: object - '403': - description: User cannot access DVR on this server + '500': + description: Failed to compute channel map content: text/html: {} - /media/subscriptions/template: + /livetv/epg/channels: get: - summary: Get the subscription template - operationId: getTemplate - description: Get the templates for a piece of media which could include fetching one airing, season, the whole show, etc. + operationId: getChannels + summary: Get channels for a lineup tags: - - Subscriptions + - EPG + description: Get channels for a lineup within an EPG provider parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2857,12 +2566,12 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: guid - description: The guid of the item for which to get the template + - name: lineup + description: The URI describing the lineup in: query + required: true schema: type: string - example: plex://episode/5fc70265c40548002d539d23 responses: '200': description: OK @@ -2878,57 +2587,128 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - SubscriptionTemplate: - items: - properties: - MediaSubscription: - items: - allOf: - - $ref: '#/components/schemas/MediaSubscription' - - properties: - airingsType: - type: string - librarySectionTitle: - type: string - locationPath: - type: string - parameters: - description: Parameter string for creating this subscription - type: string - selected: - type: boolean - targetLibrarySectionID: - description: Where this subscription will record to - type: integer - title: - description: The title of this subscription type - example: This Episode - type: string - type: - description: Metadata type number - type: integer - type: object - type: array - type: object + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Channel: type: array - type: object - type: object - '403': - description: User cannot access DVR on this server + items: + $ref: "#/components/schemas/Channel" + '404': + description: No provider with the identifier was found content: text/html: {} - /photo/:/transcode: + /livetv/epg/countries: get: - summary: Transcode an image - operationId: transcodeImage - description: Transcode an image, possibly changing format or size + operationId: getCountries + summary: Get all countries tags: - - Transcoder + - EPG + description: This endpoint returns a list of countries which EPG data is available for. There are three flavors, as specfied by the `flavor` attribute + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Country: + type: array + items: + type: object + properties: + title: + type: string + type: + type: string + example: + type: string + code: + description: Three letter code + type: string + flavor: + description: |- + - `0`: The country is divided into regions, and following the key will lead to a list of regions. + - `1`: The county is divided by postal codes, and an example code is returned in `example`. + - `2`: The country has a single postal code, returned in `example`. + type: integer + enum: + - 0 + - 1 + - 2 + key: + type: string + language: + description: Three letter language code + type: string + languageTitle: + description: The title of the language + type: string + /livetv/epg/languages: + get: + operationId: getAllLanguages + summary: Get all languages + tags: + - EPG + description: Returns a list of all possible languages for EPG data. + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Language: + type: array + items: + type: object + properties: + title: + type: string + code: + description: 3 letter language code + type: string + /livetv/epg/lineup: + get: + operationId: getLineup + summary: Compute the best lineup + tags: + - EPG + description: Compute the best lineup, given lineup group and device parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2941,141 +2721,41 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: url - description: The source URL for the image to transcode. Note, if this URL requires a token such as `X-Plex-Token`, it should be given as a query parameter to this url. - in: query - schema: - type: string - example: /library/metadata/265/thumb/1715112705 - - name: format - description: The output format for the image; defaults to jpg - in: query - required: false - schema: - type: string - enum: - - jpg - - jpeg - - png - - ppm - - name: width - description: The desired width of the output image - in: query - schema: - type: integer - - name: height - description: The desired height of the output image - in: query - schema: - type: integer - - name: quality - description: The desired quality of the output. -1 means the highest quality. Defaults to -1 - in: query - required: false - schema: - maximum: 127 - minimum: -1 - type: integer - - name: background - description: The background color to apply before painting the image. Only really applicable if image has transparency. Defaults to none + - name: device + description: The URI describing the device in: query - required: false + required: true schema: type: string - example: '#ff5522' - - name: upscale - description: Indicates if image should be upscaled to the desired width/height. Defaults to false - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" - - name: minSize - description: Indicates if image should be scaled to fit the smaller dimension. By default (false) the image is scaled to fit within the width/height specified but if this parameter is true, it will allow overflowing one dimension to fit the other. Essentially it is making the width/height minimum sizes of the image or sizing the image to fill the entire width/height even if it overflows one dimension. - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" - - name: rotate - description: Obey the rotation values specified in EXIF data. Defaults to true. - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" - - name: blur - description: Apply a blur to the image, Defaults to 0 (none) - in: query - required: false - schema: - type: integer - - name: saturation - description: Scale the image saturation by the specified percentage. Defaults to 100 - in: query - required: false - schema: - maximum: 100 - minimum: 0 - type: integer - - name: opacity - description: Render the image at the specified opacity percentage. Defaults to 100 - in: query - required: false - schema: - maximum: 100 - minimum: 0 - type: integer - - name: chromaSubsampling - description: |- - Use the specified chroma subsambling. - - 0: 411 - - 1: 420 - - 2: 422 - - 3: 444 - Defaults to 3 (444) - in: query - required: false - schema: - type: integer - enum: - - 0 - - 1 - - 2 - - 3 - - name: blendColor - description: The color to blend with the image. Defaults to none + - name: lineupGroup + description: The URI describing the lineupGroup in: query - required: false + required: true schema: type: string - example: '#ff5522' responses: '200': - description: The resulting image - content: - image/jpeg: - schema: - format: binary - type: string - image/png: - schema: - format: binary - type: string - image/x-portable-pixmap: + description: OK + headers: + X-Plex-Activity: + description: The activity of the reload process schema: - format: binary type: string - '400': - $ref: '#/components/responses/400' - '403': - $ref: '#/components/responses/403' '404': - $ref: '#/components/responses/404' - /playlists: + description: No device or provider with the identifier was found + content: + text/html: {} + '500': + description: Could not get device's channels + content: + text/html: {} + /livetv/epg/lineupchannels: get: - summary: List playlists - operationId: listPlaylists - description: Gets a list of playlists and playlist folders for a user. General filters are permitted, such as `sort=lastViewedAt:desc`. A flat playlist list can be retrieved using `type=15` to limit the collection to just playlists. + operationId: getLineupChannels + summary: Get the channels for mulitple lineups tags: - - Playlist + - EPG + description: Get the channels across multiple lineups parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3088,16 +2768,49 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playlistType - description: Limit to a type of playlist + - name: lineup + description: The URIs describing the lineups in: query + required: true schema: - type: string - enum: - - audio - - video - - photo - - $ref: '#/components/parameters/smart' + type: array + items: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Lineup: + type: array + items: + allOf: + - $ref: "#/components/schemas/Lineup" + - type: object + properties: + Channel: + type: array + items: + $ref: "#/components/schemas/Channel" + '404': + description: No provider with the identifier was found + content: + text/html: {} + /livetv/sessions: + get: + operationId: getSessions + summary: Get all sessions + tags: + - Live TV + description: Get all livetv sessions and metadata responses: '200': description: OK @@ -3113,13 +2826,39 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithPlaylistMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" + /log: post: - summary: Create a Playlist - operationId: createPlaylist - description: Create a new playlist. By default the playlist is blank. + operationId: writeLog + summary: Logging a multi-line message to the Plex Media Server log tags: - - Library Playlists + - Log + description: This endpoint will write multiple lines to the main Plex Media Server log in a single request. It takes a set of query strings as would normally sent to the above PUT endpoint as a linefeed-separated block of POST data. The parameters for each query string match as above. + security: + - token: + - admin + requestBody: + description: Line separated list of log items + required: true + content: + text/plain: {} + responses: + '200': + $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + put: + operationId: writeMessage + summary: Logging a single-line message to the Plex Media Server log + tags: + - Log + description: |- + This endpoint will write a single-line log message, including a level and source to the main Plex Media Server log. + + Note: This endpoint responds to all HTTP verbs **except POST** but PUT is preferred + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3132,32 +2871,46 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: uri - description: The content URI for what we're playing (e.g. `library://...`). + - name: level + description: |- + An integer log level to write to the PMS log with. + - 0: Error + - 1: Warning + - 2: Info + - 3: Debug + - 4: Verbose + in: query + schema: + type: integer + enum: + - 0 + - 1 + - 2 + - 3 + - 4 + - name: message + description: The text of the message to write to the log. in: query schema: type: string - - name: playQueueID - description: To create a playlist from an existing play queue. + - name: source + description: A string indicating the source of the message. in: query schema: - type: integer + type: string responses: '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/MediaContainerWithPlaylistMetadata' - '400': - $ref: '#/components/responses/400' - /playlists/upload: + $ref: "#/components/responses/200" + /log/networked: post: - summary: Upload - operationId: uploadPlaylist - description: Imports m3u playlists by passing a path on the server to scan for m3u-formatted playlist files, or a path to a single playlist file. + operationId: enablePapertrail + summary: Enabling Papertrail tags: - - Library Playlists + - Log + description: |- + This endpoint will enable all Plex Media Server logs to be sent to the Papertrail networked logging site for a period of time + + Note: This endpoint responds to all HTTP verbs but POST is preferred security: - token: - admin @@ -3173,35 +2926,25 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: path - description: Absolute path to a directory on the server where m3u files are stored, or the absolute path to a playlist file on the server. If the `path` argument is a directory, that path will be scanned for playlist files to be processed. Each file in that directory creates a separate playlist, with a name based on the filename of the file that created it. The GUID of each playlist is based on the filename. If the `path` argument is a file, that file will be used to create a new playlist, with the name based on the filename of the file that created it. The GUID of each playlist is based on the filename. - in: query - schema: - type: string - example: /home/barkley/playlist.m3u - - name: force - description: Force overwriting of duplicate playlists. By default, a playlist file uploaded with the same path will overwrite the existing playlist. The `force` argument is used to disable overwriting. If the `force` argument is set to 0, a new playlist will be created suffixed with the date and time that the duplicate was uploaded. + - name: minutes + description: The number of minutes logging should be sent to Papertrail in: query schema: - $ref: "#/components/schemas/BoolInt" + type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '403': - $ref: '#/components/responses/200' - '500': - description: The playlist could not be imported + description: User doesn't have permission content: text/html: {} - /playQueues: - post: - summary: Create a play queue - operationId: createPlayQueue - description: |- - Makes a new play queue for a device. The source of the playqueue can either be a URI, or a playlist. The response is a media container with the initial items in the queue. Each item in the queue will be a regular item but with `playQueueItemID` - a unique ID since the queue could have repeated items with the same `ratingKey`. - Note: Either `uri` or `playlistID` must be specified + /media/grabbers: + get: + operationId: getAvailableGrabbers + summary: Get available grabbers tags: - - Play Queue + - Devices + description: Get available grabbers visible to the server parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3214,61 +2957,12 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: uri - description: The content URI for what we're playing. - in: query - schema: - type: string - - name: playlistID - description: the ID of the playlist we're playing. - in: query - schema: - type: integer - - name: type - description: The type of play queue to create - in: query - required: true - schema: - type: string - enum: - - audio - - video - - photo - - name: key - description: The key of the first item to play, defaults to the first in the play queue. + - name: protocol + description: Only return grabbers providing this protocol. in: query schema: type: string - - name: shuffle - description: Whether to shuffle the playlist, defaults to 0. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: repeat - description: If the PQ is bigger than the window, fill any empty space with wraparound items, defaults to 0. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: continuous - description: Whether to create a continuous play queue (e.g. from an episode), defaults to 0. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: extrasPrefixCount - description: Number of trailers to prepend a movie with not including the pre-roll. If omitted the pre-roll will not be returned in the play queue. When resuming a movie `extrasPrefixCount` should be omitted as a parameter instead of passing 0. - in: query - schema: - type: integer - - name: recursive - description: Only applies to queues of type photo, whether to retrieve all descendent photos from an album or section, defaults to 1. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: onDeck - description: Only applies to queues of type show or seasons, whether to return a queue that is started on the On Deck episode if one exists. Otherwise begins the play queue on the beginning of the show or season. - in: query - schema: - $ref: "#/components/schemas/BoolInt" + example: livetv responses: '200': description: OK @@ -3284,49 +2978,52 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - playQueueID: - description: The ID of the play queue, which is used in subsequent requests. - type: integer - playQueueLastAddedItemID: - description: Defines where the "Up Next" region starts - type: string - playQueueSelectedItemID: - description: The queue item ID of the currently selected item. - type: integer - playQueueSelectedItemOffset: - description: The offset of the selected item in the play queue, from the beginning of the queue. - type: integer - playQueueSelectedMetadataItemID: - description: The metadata item ID of the currently selected item (matches `ratingKey` attribute in metadata item if the media provider is a library). - type: integer - playQueueShuffled: - description: Whether or not the queue is shuffled. - type: boolean - playQueueSourceURI: - description: The original URI used to create the play queue. - type: string - playQueueTotalCount: - description: The total number of items in the play queue. - type: integer - playQueueVersion: - description: The version of the play queue. It increments every time a change is made to the play queue to assist clients in knowing when to refresh. - type: integer - type: object - type: object - '400': - $ref: '#/components/responses/400' - /security/resources: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + MediaGrabber: + type: array + items: + $ref: "#/components/schemas/MediaGrabber" + /media/grabbers/devices: get: - summary: Get Source Connection Information - operationId: getSourceConnectionInformation - description: If a caller requires connection details and a transient token for a source that is known to the server, for example a cloud media provider or shared PMS, then this endpoint can be called. This endpoint is only accessible with either an admin token or a valid transient token generated from an admin token. + operationId: listDevices + summary: Get all devices tags: - - General + - Devices + description: Get the list of all devices present + security: + - token: + - admin + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDevice" + post: + operationId: addDevice + summary: Add a device + tags: + - Devices + description: This endpoint adds a device to an existing grabber. The device is identified, and added to the correct grabber. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3339,75 +3036,91 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: source - description: The source identifier with an included prefix. + - name: uri + description: The URI of the device. in: query - required: true schema: type: string - - name: refresh - description: Force refresh - in: query - schema: - $ref: "#/components/schemas/BoolInt" + example: http://10.0.0.5 responses: '200': description: OK content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Device: - properties: - accessToken: - type: string - clientIdentifier: - type: string - Connection: - items: - properties: - address: - type: string - local: - description: Indicates if the connection is the server's LAN address - type: boolean - port: - type: integer - protocol: - type: string - relay: - description: Indicates the connection is over a relayed connection - type: boolean - uri: - type: string - type: object - type: array - name: - type: string - type: object - type: object - type: object + $ref: "#/components/schemas/MediaContainerWithDevice" '400': - description: A query param is missing or the wrong value + $ref: "#/components/responses/400" + /media/grabbers/devices/discover: + post: + operationId: discoverDevices + summary: Tell grabbers to discover devices + tags: + - Devices + description: Tell grabbers to discover devices + security: + - token: + - admin + responses: + '200': + description: OK content: - text/html: {} - '403': - description: Invalid or no token provided or a transient token could not be created + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDevice" + /media/providers: + get: + operationId: listProviders + summary: Get the list of available media providers + tags: + - Provider + description: Get the list of all available media providers for this PMS. This will generally include the library provider and possibly EPG if DVR is set up. + responses: + '200': + description: OK content: - text/html: {} - /security/token: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/ServerConfiguration" + - type: object + properties: + title: + description: The title of the provider. + type: string + Feature: + type: array + items: + type: object + properties: + type: + type: string + Directory: + type: array + items: + $ref: "#/components/schemas/Directory" + key: + type: string + identifier: + description: A unique identifier for the provider, e.g. `com.plexapp.plugins.library`. + type: string + protocols: + description: |- + A comma-separated list of default protocols for the provider, which can be: + - `stream`: The provider allows streaming media directly from the provider (e.g. for Vimeo). - `download`: The provider allows downloading media for offline storage, sync, etc. (e.g. Podcasts). - `livetv`: The provider provides live content which is only available on a schedule basis. + type: string + types: + description: This attribute contains a comma-separated list of the media types exposed by the provider (e.g. `video, audio`). + type: string post: - summary: Get Transient Tokens - operationId: getTransientToken - description: |- - This endpoint provides the caller with a temporary token with the same access level as the caller's token. These tokens are valid for up to 48 hours and are destroyed if the server instance is restarted. - Note: This endpoint responds to all HTTP verbs but POST in preferred + operationId: addProvider + summary: Add a media provider tags: - - General + - Provider + description: This endpoint registers a media provider with the server. Once registered, the media server acts as a reverse proxy to the provider, allowing both local and remote providers to work. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3420,53 +3133,34 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: type - description: The value `delegation` is the only supported `type` parameter. - in: query - required: true - schema: - type: string - enum: - - delegation - - name: scope - description: The value `all` is the only supported `scope` parameter. + - name: url + description: The URL of the media provider to add. in: query required: true schema: type: string - enum: - - all responses: '200': - description: OK - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - token: - description: The transient token - type: string - type: object - type: object + $ref: "#/components/responses/200" '400': - description: A query param is missing or the wrong value - content: - text/html: {} - '403': - description: Invalid or no token provided or a transient token could not be created - content: - text/html: {} - /services/ultrablur/colors: + $ref: "#/components/responses/400" + /media/providers/refresh: + post: + operationId: refreshProviders + summary: Refresh media providers + tags: + - Provider + description: Refresh all known media providers. This is useful in case a provider has updated features. + responses: + '200': + $ref: "#/components/responses/200" + /media/subscriptions: get: - summary: Get UltraBlur Colors - operationId: getColors - description: Retrieves the four colors extracted from an image for clients to use to generate an ultrablur image. + operationId: getAllSubscriptions + summary: Get all subscriptions tags: - - UltraBlur + - Subscriptions + description: Get all subscriptions and potentially the grabs too parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3479,57 +3173,42 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: url - description: Url for image which requires color extraction. Can be relative PMS library path or absolute url. + - name: includeGrabs + description: Indicates whether the active grabs should be included as well in: query schema: - type: string - example: /library/metadata/217745/art/1718931408 + $ref: "#/components/schemas/BoolInt" + - name: includeStorage + description: Compute the storage of recorded items desired by this subscription + in: query + schema: + $ref: "#/components/schemas/BoolInt" responses: '200': description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - UltraBlurColors: - items: - properties: - bottomLeft: - description: The color (hex) for the bottom left quadrant. - type: string - bottomRight: - description: The color (hex) for the bottom right quadrant. - type: string - topLeft: - description: The color (hex) for the top left quadrant. - type: string - topRight: - description: The color (hex) for the top right quadrant. - type: string - type: object - type: array - type: object - type: object - '404': - description: The image url could not be found. - content: - text/html: {} - '500': - description: The server was unable to successfully extract the UltraBlur colors. + $ref: "#/components/schemas/MediaContainerWithSubscription" + '403': + description: User cannot access DVR on this server content: text/html: {} - /services/ultrablur/image: - get: - summary: Get UltraBlur Image - operationId: getImage - description: Retrieves a server-side generated UltraBlur image based on the provided color inputs. Clients should always call this via the photo transcoder endpoint. + post: + operationId: createSubscription + summary: Create a subscription tags: - - UltraBlur + - Subscriptions + description: Create a subscription. The query parameters should be mostly derived from the [template](#tag/Subscriptions/operation/mediaSubscriptionsGetTemplate) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3542,74 +3221,51 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: topLeft - description: The base color (hex) for the top left quadrant. - in: query - schema: - type: string - example: 3f280a - - name: topRight - description: The base color (hex) for the top right quadrant. + - name: targetLibrarySectionID + description: The library section into which we'll grab the media. Not actually required when the subscription is to a playlist. in: query schema: - type: string - example: 6b4713 - - name: bottomRight - description: The base color (hex) for the bottom right quadrant. + type: integer + example: 1 + - name: targetSectionLocationID + description: The section location into which to grab. in: query schema: - type: string - example: 0f2a43 - - name: bottomLeft - description: The base color (hex) for the bottom left quadrant. + type: integer + example: 3 + - name: type + description: The type of the thing we're subscribing too (e.g. show, season). in: query schema: - type: string - example: 1c425d - - name: width - description: Width in pixels for the image. + type: integer + example: 2 + - name: hints + description: "Hints describing what we're looking for. Note: The hint `ratingKey` is required for downloading from a PMS remote." in: query + style: deepObject schema: - maximum: 3840 - minimum: 320 - type: integer - example: 1920 - - name: height - description: Height in pixels for the image. + type: object + example: + title: Family Guy + - name: prefs + description: Subscription preferences. in: query + style: deepObject schema: - maximum: 2160 - minimum: 240 - type: integer - example: 1080 - - name: noise - description: Whether to add noise to the ouput image. Noise can reduce color banding with the gradients. Image sizes with noise will be larger. + type: object + example: + minVideoQuality: 720 + - name: params + description: |- + Subscription parameters. + - `mediaProviderID`: Required for downloads to indicate which MP the subscription will download into + - `source`: Required for downloads to indicate the source of the downloaded content. in: query + style: deepObject schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - responses: - '200': - description: OK - content: - image/png: - schema: - format: binary - type: string - '400': - description: Requested width and height parameters are out of bounds (maximum 3840 x 2160) - content: - text/html: {} - /status/sessions: - get: - summary: List Sessions - operationId: listSessions - description: List all current playbacks on this server - tags: - - Status - security: - - token: - - admin + type: object + example: + mediaProviderID: 1 responses: '200': description: OK @@ -3625,93 +3281,92 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Metadata: - items: - allOf: - - properties: - Player: - $ref: '#/components/schemas/Player' - Session: - $ref: '#/components/schemas/Session' - User: - $ref: '#/components/schemas/User' - type: object - - $ref: '#/components/schemas/Metadata' + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + MediaSubscription: type: array - type: object - type: object - /status/sessions/background: + items: + $ref: "#/components/schemas/MediaSubscription" + '400': + $ref: "#/components/responses/400" + '403': + description: User cannot access DVR on this server + content: + text/html: {} + '409': + description: An subscription with the same parameters already exists + content: + text/html: {} + /media/subscriptions/process: + post: + operationId: processSubscriptions + summary: Process all subscriptions + tags: + - Subscriptions + description: Process all subscriptions asynchronously + responses: + '200': + description: OK + headers: + X-Plex-Activity: + description: The activity of the process + schema: + type: string + content: + text/html: {} + '403': + description: User cannot access DVR on this server + content: + text/html: {} + /media/subscriptions/scheduled: get: - summary: Get background tasks - operationId: getBackgroundTasks - description: Get the list of all background tasks + operationId: getScheduledRecordings + summary: Get all scheduled recordings tags: - - Status - security: - - token: - - admin + - Subscriptions + description: Get all scheduled recordings across all subscriptions responses: '200': description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - TranscodeJob: - items: - properties: - generatorID: - type: integer - key: - type: string - progress: - maximum: 100 - minimum: 0 - type: number - ratingKey: - type: string - remaining: - description: The number of seconds remaining in this job - type: integer - size: - description: The size of the result so far - type: integer - speed: - description: The speed of the transcode; 1.0 means real-time - type: number - targetTagID: - description: The tag associated with the job. This could be the tag containing the optimizer settings. - type: integer - thumb: - type: string - title: - type: string - type: - enum: - - transcode - type: string - type: object + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + MediaGrabOperation: type: array - type: object - type: object - /status/sessions/history/all: + items: + $ref: "#/components/schemas/MediaGrabOperation" + '403': + description: User cannot access DVR on this server + content: + text/html: {} + /media/subscriptions/template: get: - summary: List Playback History - operationId: listPlaybackHistory - description: |- - List all playback history (Admin can see all users, others can only see their own). - Pagination should be used on this endpoint. Additionally this endpoint supports `includeFields`, `excludeFields`, `includeElements`, and `excludeElements` parameters. + operationId: getTemplate + summary: Get the subscription template tags: - - Status + - Subscriptions + description: Get the templates for a piece of media which could include fetching one airing, season, the whole show, etc. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3724,34 +3379,12 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: accountID - description: The account id to restrict view history - in: query - schema: - type: integer - - name: viewedAt - description: The time period to restrict history (typically of the form `viewedAt>=12456789`) - in: query - schema: - type: integer - - name: librarySectionID - description: The library section id to restrict view history - in: query - schema: - type: integer - - name: metadataItemID - description: The metadata item to restrict view history (can provide the id for a show to see all of that show's view history). Note this is translated to `metadata_items.id`, `parents.id`, or `grandparents.id` internally depending on the metadata type. + - name: guid + description: The guid of the item for which to get the template in: query schema: - type: integer - - name: sort - description: The field on which to sort. Multiple orderings can be specified separated by `,` and the direction specified following a `:` (`desc` or `asc`; `asc` is assumed if not provided). Note `metadataItemID` may not be used here. - in: query - schema: - type: array - items: - type: string - example: viewedAt:desc,accountID + type: string + example: plex://episode/5fc70265c40548002d539d23 responses: '200': description: OK @@ -3767,61 +3400,57 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Metadata: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + SubscriptionTemplate: + type: array items: - properties: - accountID: - description: The account id of this playback - type: integer - deviceID: - description: The device id which played the item - type: integer - historyKey: - description: The key for this individual history item - type: string - key: - description: The metadata key for the item played - type: string - librarySectionID: - description: The library section id containing the item played - type: string - originallyAvailableAt: - description: The originally available at of the item played - type: string - ratingKey: - description: The rating key for the item played - type: string - thumb: - description: The thumb of the item played - type: string - title: - description: The title of the item played - type: string - type: - description: The metadata type of the item played - type: string - viewedAt: - description: The time when the item was played - type: integer type: object - type: array - type: object - type: object - /status/sessions/terminate: - post: - summary: Terminate a session - operationId: terminateSession - description: Terminate a playback session kicking off the user + properties: + MediaSubscription: + type: array + items: + allOf: + - $ref: "#/components/schemas/MediaSubscription" + - type: object + properties: + title: + description: The title of this subscription type + type: string + example: This Episode + type: + description: Metadata type number + type: integer + airingsType: + type: string + librarySectionTitle: + type: string + locationPath: + type: string + parameters: + description: Parameter string for creating this subscription + type: string + selected: + type: boolean + targetLibrarySectionID: + description: Where this subscription will record to + type: integer + '403': + description: User cannot access DVR on this server + content: + text/html: {} + /photo/:/transcode: + get: + operationId: transcodeImage + summary: Transcode an image tags: - - Status - security: - - token: - - admin + - Transcoder + description: Transcode an image, possibly changing format or size parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3834,44 +3463,158 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sessionId - description: The session id (found in the `Session` element in [/status/sessions](#tag/Status/operation/statusGetSlash)) + - name: url + description: The source URL for the image to transcode. Note, if this URL requires a token such as `X-Plex-Token`, it should be given as a query parameter to this url. in: query - required: true schema: type: string - example: cdefghijklmnopqrstuvwxyz - - name: reason - description: The reason to give to the user (typically displayed in the client) + example: /library/metadata/265/thumb/1715112705 + - name: format + description: The output format for the image; defaults to jpg in: query + required: false schema: type: string - example: Stop Playing + enum: + - jpg + - jpeg + - png + - ppm + - name: width + description: The desired width of the output image + in: query + schema: + type: integer + - name: height + description: The desired height of the output image + in: query + schema: + type: integer + - name: quality + description: The desired quality of the output. -1 means the highest quality. Defaults to -1 + in: query + required: false + schema: + type: integer + minimum: -1 + maximum: 127 + - name: background + description: The background color to apply before painting the image. Only really applicable if image has transparency. Defaults to none + in: query + required: false + schema: + type: string + example: '#ff5522' + - name: upscale + description: Indicates if image should be upscaled to the desired width/height. Defaults to false + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + - name: minSize + description: Indicates if image should be scaled to fit the smaller dimension. By default (false) the image is scaled to fit within the width/height specified but if this parameter is true, it will allow overflowing one dimension to fit the other. Essentially it is making the width/height minimum sizes of the image or sizing the image to fill the entire width/height even if it overflows one dimension. + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + - name: rotate + description: Obey the rotation values specified in EXIF data. Defaults to true. + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + - name: blur + description: Apply a blur to the image, Defaults to 0 (none) + in: query + required: false + schema: + type: integer + - name: saturation + description: Scale the image saturation by the specified percentage. Defaults to 100 + in: query + required: false + schema: + type: integer + minimum: 0 + maximum: 100 + - name: opacity + description: Render the image at the specified opacity percentage. Defaults to 100 + in: query + required: false + schema: + type: integer + minimum: 0 + maximum: 100 + - name: chromaSubsampling + description: |- + Use the specified chroma subsambling. + - 0: 411 + - 1: 420 + - 2: 422 + - 3: 444 + Defaults to 3 (444) + in: query + required: false + schema: + type: integer + enum: + - 0 + - 1 + - 2 + - 3 + - name: blendColor + description: The color to blend with the image. Defaults to none + in: query + required: false + schema: + type: string + example: '#ff5522' responses: '200': - $ref: '#/components/responses/200' - '401': - description: Server does not have the feature enabled + description: The resulting image content: - text/html: {} + image/jpeg: + schema: + type: string + format: binary + image/png: + schema: + type: string + format: binary + image/x-portable-pixmap: + schema: + type: string + format: binary + '400': + $ref: "#/components/responses/400" '403': - description: sessionId is empty - content: - text/html: {} + $ref: "#/components/responses/403" '404': - description: Session not found - content: - text/html: {} - /updater/apply: - put: - summary: Applying updates - operationId: applyUpdates - description: Apply any downloaded updates. Note that the two parameters `tonight` and `skip` are effectively mutually exclusive. The `tonight` parameter takes precedence and `skip` will be ignored if `tonight` is also passed. + $ref: "#/components/responses/404" + /ping: + get: + operationId: ping + summary: Ping tags: - - Updater + - Authentication + description: Health / latency check. No authentication required. + security: [] + servers: + - url: https://plex.tv/api/v2 + responses: + '200': + description: OK + /pins: + post: + operationId: createOAuthPin + summary: Create OAuth PIN + tags: + - Authentication + description: Create a 4-character PIN for device linking via OAuth. The user must visit https://plex.tv/link and enter the PIN to authorize the device. security: - - token: - - admin + - clientIdentifier: [] + servers: + - url: https://plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3884,39 +3627,48 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: tonight - description: Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install immediately. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: skip - description: Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`. - in: query - schema: - $ref: "#/components/schemas/BoolInt" responses: '200': - description: The update process started correctly + description: PIN created successfully content: - text/html: {} + application/json: + schema: + type: object + properties: + authToken: + type: string + nullable: true + clientIdentifier: + type: string + code: + type: string + createdAt: + type: string + expiresAt: + type: string + expiresIn: + type: integer + id: + type: integer + newRegistration: + type: boolean + product: + type: string + qr: + type: string + trusted: + type: boolean '400': - description: This system cannot install updates - content: - text/html: {} - '500': - description: The update process failed to start - content: - text/html: {} - /updater/check: - put: - summary: Checking for updates - operationId: checkUpdates - description: Perform an update check and potentially download + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /player/playback/audioStream: + post: + operationId: playerAudioStream + summary: Player Audio Stream tags: - - Updater - security: - - token: - - admin + - Playback + description: Change the active audio stream. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3929,102 +3681,52 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: download - description: Indicate that you want to start download any updates found. + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: streamID in: query schema: - $ref: "#/components/schemas/BoolInt" + type: integer responses: '200': - $ref: '#/components/responses/200' - /updater/status: - get: - summary: Querying status of updates - operationId: getUpdatesStatus - description: Get the status of updating the server + description: OK + /player/playback/mute: + post: + operationId: playerMute + summary: Player Mute tags: - - Updater - security: - - token: - - admin + - Playback + description: Mute the client audio + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string responses: '200': description: OK - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - properties: - autoUpdateVersion: - description: The version of the updater (currently `1`) - type: integer - canInstall: - description: Indicates whether this install can be updated through these endpoints (typically only on MacOS and Windows) - type: boolean - checkedAt: - description: The last time a check for updates was performed - type: integer - downloadURL: - description: The URL where the update is available - type: string - Release: - items: - properties: - added: - description: A list of what has been added in this version - type: string - downloadURL: - description: The URL of where this update is available - type: string - fixed: - description: A list of what has been fixed in this version - type: string - key: - description: The URL key of the update - type: string - state: - description: | - The status of this update. - - - available - This release is available - - downloading - This release is downloading - - downloaded - This release has been downloaded - - installing - This release is installing - - tonight - This release will be installed tonight - - skipped - This release has been skipped - - error - This release has an error - - notify - This release is only notifying it is available (typically because it cannot be installed on this setup) - - done - This release is complete - enum: - - available - - downloading - - downloaded - - installing - - tonight - - skipped - - error - - notify - - done - type: string - version: - description: The version available - type: string - type: object - type: array - status: - description: The current error code (`0` means no error) - type: integer - type: object - type: object - /{transcodeType}/:/transcode/universal/decision: - get: - summary: Make a decision on media playback - operationId: makeDecision - description: Make a decision on media playback based on client profile, and requested settings such as bandwidth and resolution. + /player/playback/pause: + post: + operationId: playerPause + summary: Player Pause tags: - - Transcoder + - Playback + description: Pause playback on the client parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -4037,249 +3739,300 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/transcodeType' - - $ref: '#/components/parameters/transcodeSessionId' - - $ref: '#/components/parameters/advancedSubtitles' - - name: audioBoost - description: Percentage of original audio loudness to use when transcoding (100 is equivalent to original volume, 50 is half, 200 is double, etc) - in: query - schema: - minimum: 1 - type: integer - example: 50 - - name: audioChannelCount - description: Target video number of audio channels. - in: query - schema: - maximum: 8 - minimum: 1 - type: integer - example: 5 - - name: autoAdjustQuality - description: Indicates the client supports ABR. - in: query + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: autoAdjustSubtitle - description: Indicates if the server should adjust subtitles based on Voice Activity Data. - in: query + type: string + responses: + '200': + description: OK + /player/playback/play: + post: + operationId: playerPlay + summary: Player Play + tags: + - Playback + description: Start playback on the client + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: directPlay - description: Indicates the client supports direct playing the indicated content. - in: query + type: string + responses: + '200': + description: OK + /player/playback/playMedia: + post: + operationId: playerPlayMedia + summary: Player Play Media + tags: + - Playback + description: Play a specific media item on the client. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: directStream - description: Indicates the client supports direct streaming the video of the indicated content. + type: string + - name: key + description: The key of the media item to play in: query schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: directStreamAudio - description: Indicates the client supports direct streaming the audio of the indicated content. + type: string + - name: offset in: query schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: disableResolutionRotation - description: Indicates if resolution should be adjusted for orientation. + type: integer + - name: machineIdentifier in: query schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: hasMDE - description: Ignore client profiles when determining if direct play is possible. Only has an effect when directPlay=1 and both mediaIndex and partIndex are specified and neither are -1 - in: query + type: string + responses: + '200': + description: OK + /player/playback/refreshPlayQueue: + post: + operationId: playerRefreshplayqueue + summary: Player Refresh Play Queue + tags: + - Playback + description: Refresh the play queue on the client + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: location - description: Network type of the client, can be used to help determine target bitrate. - in: query + type: string + responses: + '200': + description: OK + /player/playback/seek: + post: + operationId: playerSeek + summary: Player Seek + tags: + - Playback + description: Seek to a specific time in the current playback. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header schema: type: string - enum: - - lan - - wan - - cellular - example: wan - - name: mediaBufferSize - description: Buffer size used in playback (in KB). Clients should specify a lower bound if not known exactly. This value could make the difference between transcoding and direct play on bandwidth constrained networks. + - name: offset + description: Target offset in milliseconds in: query schema: type: integer - example: 102400 - - name: mediaIndex - description: Index of the media to transcode. -1 or not specified indicates let the server choose. - in: query + responses: + '200': + description: OK + /player/playback/setParameters: + post: + operationId: playerSetParameters + summary: Player Set Parameters + tags: + - Playback + description: Set shuffle, repeat, and volume parameters. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header schema: - type: integer - example: 0 - - name: musicBitrate - description: Target bitrate for audio only files (in kbps, used to transcode). + type: string + - name: shuffle in: query schema: - minimum: 0 type: integer - example: 5000 - - name: offset - description: Offset from the start of the media (in seconds). + enum: + - 0 + - 1 + - name: repeat in: query schema: - type: number - example: 90.5 - - name: partIndex - description: Index of the part to transcode. -1 or not specified indicates the server should join parts together in a transcode + type: integer + enum: + - 0 + - 1 + - 2 + - name: volume in: query schema: type: integer - example: 0 - - name: path - description: Internal PMS path of the media to transcode. - in: query + minimum: 0 + maximum: 100 + responses: + '200': + description: OK + /player/playback/setRating: + post: + operationId: playerSetRating + summary: Player Set Rating + tags: + - Playback + description: Rate the currently playing item. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header schema: type: string - example: /library/metadata/151671 - - name: peakBitrate - description: Maximum bitrate (in kbps) to use in ABR. + - name: rating in: query schema: - minimum: 0 type: integer - example: 12000 - - name: photoResolution - description: Target photo resolution. - in: query + responses: + '200': + description: OK + /player/playback/setState: + post: + operationId: playerSetState + summary: Player Set State + tags: + - Playback + description: Set the playback state directly. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header schema: type: string - pattern: ^\d[x:]\d$ - example: 1080x1080 - - name: protocol - description: | - Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022) + - name: state in: query schema: type: string enum: - - http - - hls - - dash - example: dash - - name: secondsPerSegment - description: Number of seconds to include in each transcoded segment - in: query - schema: - type: integer - example: 5 - - name: subtitleSize - description: Percentage of original subtitle size to use when burning subtitles (100 is equivalent to original size, 50 is half, ect) - in: query - schema: - minimum: 1 - type: integer - example: 50 - - name: subtitles - description: | - Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream - in: query + - playing + - paused + - stopped + responses: + '200': + description: OK + /player/playback/setStreams: + post: + operationId: playerSetStreams + summary: Player Set Streams + tags: + - Playback + description: Set active audio, subtitle, and video streams. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header schema: type: string - enum: - - auto - - burn - - none - - sidecar - - embedded - - segmented - - unknown - example: Burn - - name: videoBitrate - description: Target video bitrate (in kbps). + - name: audioStreamID in: query schema: - minimum: 0 type: integer - example: 12000 - - name: videoQuality - description: Target photo quality. + - name: subtitleStreamID in: query schema: - maximum: 99 - minimum: 0 type: integer - example: 50 - - name: videoResolution - description: Target maximum video resolution. + - name: videoStreamID in: query schema: - type: string - pattern: ^\d[x:]\d$ - example: 1080x1080 - - name: X-Plex-Client-Identifier - description: Unique per client. - in: header - required: true - schema: - type: string - - name: X-Plex-Client-Profile-Extra - description: See [Profile Augmentations](#section/API-Info/Profile-Augmentations) . - in: header - schema: - type: string - example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) - - name: X-Plex-Client-Profile-Name - description: Which built in Client Profile to use in the decision. Generally should only be used to specify the Generic profile. - in: header - schema: - type: string - example: generic - - name: X-Plex-Device - description: Device the client is running on - in: header - schema: - type: string - example: Windows - - name: X-Plex-Model - description: Model of the device the client is running on - in: header - schema: - type: string - example: standalone - - name: X-Plex-Platform - description: Client Platform - in: header - schema: - type: string - example: Chrome - - name: X-Plex-Platform-Version - description: Client Platform Version - in: header - schema: - type: string - example: 135 - - name: X-Plex-Session-Identifier - description: Unique per client playback session. Used if a client can playback multiple items at a time (such as a browser with multiple tabs) - in: header - schema: - type: string + type: integer responses: '200': description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/MediaContainerWithDecision' - /{transcodeType}/:/transcode/universal/fallback: + /player/playback/setTextStream: post: - summary: Manually trigger a transcoder fallback - operationId: triggerFallback - description: 'Manually trigger a transcoder fallback ex: HEVC to h.264 or hw to sw' + operationId: playerSetTextStream + summary: Player Set Text Stream tags: - - Transcoder + - Playback + description: Set the active text stream. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -4292,30 +4045,25 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/transcodeType' - - $ref: '#/components/parameters/transcodeSessionId' + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: streamID + in: query + schema: + type: integer responses: '200': - $ref: '#/components/responses/200' - '404': - description: Session ID does not exist - content: - text/html: {} - '412': - description: Transcode could not fallback - content: - text/html: {} - '500': - description: Transcode failed to fallback - content: - text/html: {} - /{transcodeType}/:/transcode/universal/subtitles: - get: - summary: Transcode subtitles - operationId: transcodeSubtitles - description: Only transcode subtitle streams. + description: OK + /player/playback/setViewOffset: + post: + operationId: playerSetViewOffset + summary: Player Set View Offset tags: - - Transcoder + - Playback + description: Set the resume offset for the current item. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -4328,256 +4076,89 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/transcodeType' - - $ref: '#/components/parameters/transcodeSessionId' - - $ref: '#/components/parameters/advancedSubtitles' - - name: audioBoost - description: Percentage of original audio loudness to use when transcoding (100 is equivalent to original volume, 50 is half, 200 is double, etc) - in: query + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header schema: - minimum: 1 - type: integer - example: 50 - - name: audioChannelCount - description: Target video number of audio channels. + type: string + - name: offset in: query schema: - maximum: 8 - minimum: 1 type: integer - example: 5 - - name: autoAdjustQuality - description: Indicates the client supports ABR. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: autoAdjustSubtitle - description: Indicates if the server should adjust subtitles based on Voice Activity Data. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: directPlay - description: Indicates the client supports direct playing the indicated content. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: directStream - description: Indicates the client supports direct streaming the video of the indicated content. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: directStreamAudio - description: Indicates the client supports direct streaming the audio of the indicated content. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: disableResolutionRotation - description: Indicates if resolution should be adjusted for orientation. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: hasMDE - description: Ignore client profiles when determining if direct play is possible. Only has an effect when directPlay=1 and both mediaIndex and partIndex are specified and neither are -1 - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: location - description: Network type of the client, can be used to help determine target bitrate. - in: query + responses: + '200': + description: OK + /player/playback/skipBy: + post: + operationId: playerSkipBy + summary: Player Skip By + tags: + - Playback + description: Skip forward or backward by a number of items. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header schema: type: string - enum: - - lan - - wan - - cellular - example: wan - - name: mediaBufferSize - description: Buffer size used in playback (in KB). Clients should specify a lower bound if not known exactly. This value could make the difference between transcoding and direct play on bandwidth constrained networks. - in: query - schema: - type: integer - example: 102400 - - name: mediaIndex - description: Index of the media to transcode. -1 or not specified indicates let the server choose. - in: query - schema: - type: integer - example: 0 - - name: musicBitrate - description: Target bitrate for audio only files (in kbps, used to transcode). - in: query - schema: - minimum: 0 - type: integer - example: 5000 - name: offset - description: Offset from the start of the media (in seconds). - in: query - schema: - type: number - example: 90.5 - - name: partIndex - description: Index of the part to transcode. -1 or not specified indicates the server should join parts together in a transcode - in: query - schema: - type: integer - example: 0 - - name: path - description: Internal PMS path of the media to transcode. - in: query - schema: - type: string - example: /library/metadata/151671 - - name: peakBitrate - description: Maximum bitrate (in kbps) to use in ABR. - in: query - schema: - minimum: 0 - type: integer - example: 12000 - - name: photoResolution - description: Target photo resolution. - in: query - schema: - type: string - pattern: ^\d[x:]\d$ - example: 1080x1080 - - name: protocol - description: | - Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022) - in: query - schema: - type: string - enum: - - http - - hls - - dash - example: dash - - name: secondsPerSegment - description: Number of seconds to include in each transcoded segment - in: query - schema: - type: integer - example: 5 - - name: subtitleSize - description: Percentage of original subtitle size to use when burning subtitles (100 is equivalent to original size, 50 is half, ect) - in: query - schema: - minimum: 1 - type: integer - example: 50 - - name: subtitles - description: | - Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream - in: query - schema: - type: string - enum: - - auto - - burn - - none - - sidecar - - embedded - - segmented - - unknown - example: Burn - - name: videoBitrate - description: Target video bitrate (in kbps). - in: query - schema: - minimum: 0 - type: integer - example: 12000 - - name: videoQuality - description: Target photo quality. + description: Number of items to skip (positive for forward, negative for backward) in: query schema: - maximum: 99 - minimum: 0 type: integer - example: 50 - - name: videoResolution - description: Target maximum video resolution. - in: query - schema: - type: string - pattern: ^\d[x:]\d$ - example: 1080x1080 - - name: X-Plex-Client-Identifier - description: Unique per client. - in: header - required: true - schema: - type: string - - name: X-Plex-Client-Profile-Extra - description: See [Profile Augmentations](#section/API-Info/Profile-Augmentations) . - in: header - schema: - type: string - example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) - - name: X-Plex-Client-Profile-Name - description: Which built in Client Profile to use in the decision. Generally should only be used to specify the Generic profile. - in: header - schema: - type: string - example: generic - - name: X-Plex-Device - description: Device the client is running on - in: header - schema: - type: string - example: Windows - - name: X-Plex-Model - description: Model of the device the client is running on - in: header - schema: - type: string - example: standalone - - name: X-Plex-Platform - description: Client Platform - in: header - schema: - type: string - example: Chrome - - name: X-Plex-Platform-Version - description: Client Platform Version + responses: + '200': + description: OK + /player/playback/skipTo: + post: + operationId: playerSkipTo + summary: Player Skip To + tags: + - Playback + description: Skip to a specific item in the play queue. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. in: header schema: type: string - example: 135 - - name: X-Plex-Session-Identifier - description: Unique per client playback session. Used if a client can playback multiple items at a time (such as a browser with multiple tabs) - in: header + - name: key + description: The key of the item to skip to + in: query schema: type: string responses: '200': - description: Transcoded subtitle file - content: - text/srt: - example: "1\n00:00:02,499 --> 00:00:06,416\n[SERENE MUSIC]\n\n2\n00:00:11,791 --> 00:00:13,958\n[BROOK BABBLES] \n[FLY BUZZES]\n\n3\n00:00:16,166 --> 00:00:17,666\n[BIRD TWEETS]\n\n4\n00:00:17,666 --> 00:00:18,708\n[WINGS FLAP]\n\n5\n00:00:19,833 --> 00:00:20,374\n[BIRD TWEETS] \n[WINGS FLAP]\n\n6\n00:00:20,374 --> 00:00:21,041\n[THUD]\n\n7\n00:00:21,374 --> 00:00:22,249\n[THUD]\n\n8\n00:00:22,249 --> 00:00:23,083\n[SQUIRREL LAUGHS]\n\n9\n00:00:26,249 --> 00:00:27,541\n[SNORES]\n\n10\n00:00:29,416 --> 00:00:30,708\n[SNORES]\n\n11\n00:00:32,749 --> 00:00:34,041\n[BUNNY SNORES]\n\n12\n00:00:35,916 --> 00:00:37,249\n[BUNNY SNORES]\n" - '400': - $ref: '#/components/responses/400' - '403': - $ref: '#/components/responses/403' - '404': - $ref: '#/components/responses/404' - /user: - get: - servers: - - url: 'https://plex.tv/api/v2' + description: OK + /player/playback/stepBack: + post: + operationId: playerStepback + summary: Player Step Back tags: - - Authentication - summary: Get Token Details - description: Get the User data from the provided X-Plex-Token - operationId: getTokenDetails + - Playback + description: Step back one frame parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -4590,76 +4171,21 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - security: - - token: - - admin + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string responses: '200': - description: Logged in user details - content: - application/json: - schema: - $ref: '#/components/schemas/UserPlexAccount' - '400': - description: 'Bad Request - A parameter was not specified, or was specified incorrectly.' - content: - application/json: - schema: - x-speakeasy-name-override: BadRequest - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1000 - message: - type: string - x-speakeasy-error-message: true - example: X-Plex-Client-Identifier is missing - status: - type: integer - format: int32 - example: 400 - '401': - description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. - content: - application/json: - schema: - x-speakeasy-name-override: Unauthorized - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1001 - message: - type: string - x-speakeasy-error-message: true - example: User could not be authenticated - status: - type: integer - format: int32 - example: 401 - /users/signin: + description: OK + /player/playback/stepForward: post: - servers: - - url: 'https://plex.tv/api/v2' - security: [] + operationId: playerStepforward + summary: Player Step Forward tags: - - Authentication - summary: Get User Sign In Data - description: Sign in user with username and password and return user data with Plex authentication token - operationId: post-users-sign-in-data + - Playback + description: Step forward one frame parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -4672,199 +4198,1639 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - requestBody: - content: - application/x-www-form-urlencoded: - schema: - type: object - required: - - login - - password - properties: - login: - type: string - format: email - example: username@email.com - password: - type: string - format: password - example: password123 - rememberMe: - type: boolean - default: false - verificationCode: - type: string - example: 123456 - description: Login credentials + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string responses: - '201': - description: Returns the user account data with a valid auth token - content: - application/json: - schema: - allOf: - - $ref: '#/components/schemas/UserPlexAccount' - - type: object - required: - - pastSubscriptions - - trials - properties: - pastSubscriptions: - type: array - items: - title: PastSubscription - type: object - required: - - id - - mode - - renewsAt - - endsAt - - canceled - - gracePeriod - - onHold - - canReactivate - - canUpgrade - - canDowngrade - - canConvert - - type - - transfer - - state - - billing - properties: - id: - type: - - string - - 'null' - mode: - type: - - string - - 'null' - renewsAt: - oneOf: - - $ref: '#/components/schemas/PlexDateTime' - - type: 'null' - endsAt: - oneOf: - - $ref: '#/components/schemas/PlexDateTime' - - type: 'null' - canceled: - type: boolean - example: false - default: false - gracePeriod: - type: boolean - example: false - default: false - onHold: - type: boolean - example: false - default: false - canReactivate: - type: boolean - example: false - default: false - canUpgrade: - type: boolean - example: false - default: false - canDowngrade: - type: boolean - example: false - default: false - canConvert: - type: boolean - example: false - default: false - type: - type: string - example: plexpass - transfer: - type: - - string - - 'null' - state: - example: ended - x-speakeasy-unknown-values: allow - enum: - - ended - billing: - type: object - required: - - internalPaymentMethod - - paymentMethodId - properties: - internalPaymentMethod: - type: object - paymentMethodId: - type: - - integer - - 'null' - trials: - type: array - items: - type: object - '400': - description: 'Bad Request - A parameter was not specified, or was specified incorrectly.' - content: - application/json: - schema: - x-speakeasy-name-override: BadRequest - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1000 - message: - type: string - x-speakeasy-error-message: true - example: X-Plex-Client-Identifier is missing - status: - type: integer - format: int32 - example: 400 - '401': - description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. - content: - application/json: - schema: - x-speakeasy-name-override: Unauthorized - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1001 - message: - type: string - x-speakeasy-error-message: true - example: User could not be authenticated - status: - type: integer - format: int32 - example: 401 - /users: - get: - servers: - - url: 'https://plex.tv/api' + '200': + description: OK + /player/playback/stop: + post: + operationId: playerStop + summary: Player Stop tags: - - Users - security: - - token: - - admin - summary: Get list of all connected users - description: Get list of all users that are friends and have library access with the provided Plex authentication token - operationId: get-users + - Playback + description: Stop playback on the client + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + /player/playback/subtitleStream: + post: + operationId: playerSubtitleStream + summary: Player Subtitle Stream + tags: + - Playback + description: Change the active subtitle stream. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: streamID + in: query + schema: + type: integer + responses: + '200': + description: OK + /player/playback/unmute: + post: + operationId: playerUnmute + summary: Player Unmute + tags: + - Playback + description: Unmute the client audio + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + /player/playback/videoStream: + post: + operationId: playerVideoStream + summary: Player Video Stream + tags: + - Playback + description: Change the active video stream. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: streamID + in: query + schema: + type: integer + responses: + '200': + description: OK + /player/playback/volume: + post: + operationId: playerVolume + summary: Player Volume + tags: + - Playback + description: Set the client volume. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: level + in: query + schema: + type: integer + minimum: 0 + maximum: 100 + responses: + '200': + description: OK + /player/resources: + get: + operationId: getClientResources + summary: Get Client Resources + tags: + - Playback + description: Get client capabilities and device info. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + /player/timeline/poll: + get: + operationId: playerPollTimeline + summary: Player Poll Timeline + tags: + - Playback + description: Poll the client for current playback timeline. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + /playlists: + get: + operationId: listPlaylists + summary: List playlists + tags: + - Playlist + description: Gets a list of playlists and playlist folders for a user. General filters are permitted, such as `sort=lastViewedAt:desc`. A flat playlist list can be retrieved using `type=15` to limit the collection to just playlists. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/smart" + - name: playlistType + description: Limit to a type of playlist + in: query + schema: + type: string + enum: + - audio + - video + - photo + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + post: + operationId: createPlaylist + summary: Create a Playlist + tags: + - Library Playlists + description: Create a new playlist. By default the playlist is blank. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: uri + description: The content URI for what we're playing (e.g. `library://...`). + in: query + schema: + type: string + - name: playQueueID + description: To create a playlist from an existing play queue. + in: query + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + '400': + $ref: "#/components/responses/400" + /playlists/upload: + post: + operationId: uploadPlaylist + summary: Upload + tags: + - Library Playlists + description: Imports m3u playlists by passing a path on the server to scan for m3u-formatted playlist files, or a path to a single playlist file. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: path + description: Absolute path to a directory on the server where m3u files are stored, or the absolute path to a playlist file on the server. If the `path` argument is a directory, that path will be scanned for playlist files to be processed. Each file in that directory creates a separate playlist, with a name based on the filename of the file that created it. The GUID of each playlist is based on the filename. If the `path` argument is a file, that file will be used to create a new playlist, with the name based on the filename of the file that created it. The GUID of each playlist is based on the filename. + in: query + schema: + type: string + example: /home/barkley/playlist.m3u + - name: force + description: Force overwriting of duplicate playlists. By default, a playlist file uploaded with the same path will overwrite the existing playlist. The `force` argument is used to disable overwriting. If the `force` argument is set to 0, a new playlist will be created suffixed with the date and time that the duplicate was uploaded. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + '403': + $ref: "#/components/responses/200" + '500': + description: The playlist could not be imported + content: + text/html: {} + /playQueues: + post: + operationId: createPlayQueue + summary: Create a play queue + tags: + - Play Queue + description: |- + Makes a new play queue for a device. The source of the playqueue can either be a URI, or a playlist. The response is a media container with the initial items in the queue. Each item in the queue will be a regular item but with `playQueueItemID` - a unique ID since the queue could have repeated items with the same `ratingKey`. + Note: Either `uri` or `playlistID` must be specified + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: uri + description: The content URI for what we're playing. + in: query + schema: + type: string + - name: playlistID + description: the ID of the playlist we're playing. + in: query + schema: + type: integer + - name: type + description: The type of play queue to create + in: query + required: true + schema: + type: string + enum: + - audio + - video + - photo + - name: key + description: The key of the first item to play, defaults to the first in the play queue. + in: query + schema: + type: string + - name: shuffle + description: Whether to shuffle the playlist, defaults to 0. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: repeat + description: If the PQ is bigger than the window, fill any empty space with wraparound items, defaults to 0. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: continuous + description: Whether to create a continuous play queue (e.g. from an episode), defaults to 0. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: extrasPrefixCount + description: Number of trailers to prepend a movie with not including the pre-roll. If omitted the pre-roll will not be returned in the play queue. When resuming a movie `extrasPrefixCount` should be omitted as a parameter instead of passing 0. + in: query + schema: + type: integer + - name: recursive + description: Only applies to queues of type photo, whether to retrieve all descendent photos from an album or section, defaults to 1. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: onDeck + description: Only applies to queues of type show or seasons, whether to return a queue that is started on the On Deck episode if one exists. Otherwise begins the play queue on the beginning of the show or season. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + playQueueID: + description: The ID of the play queue, which is used in subsequent requests. + type: integer + playQueueLastAddedItemID: + description: Defines where the "Up Next" region starts + type: string + playQueueSelectedItemID: + description: The queue item ID of the currently selected item. + type: integer + playQueueSelectedItemOffset: + description: The offset of the selected item in the play queue, from the beginning of the queue. + type: integer + playQueueSelectedMetadataItemID: + description: The metadata item ID of the currently selected item (matches `ratingKey` attribute in metadata item if the media provider is a library). + type: integer + playQueueShuffled: + description: Whether or not the queue is shuffled. + type: boolean + playQueueSourceURI: + description: The original URI used to create the play queue. + type: string + playQueueTotalCount: + description: The total number of items in the play queue. + type: integer + playQueueVersion: + description: The version of the play queue. It increments every time a change is made to the play queue to assist clients in knowing when to refresh. + type: integer + '400': + $ref: "#/components/responses/400" + /resources: + get: + operationId: get-server-resources + summary: Get Server Resources + tags: + - Plex + description: Get Plex server access tokens and server connections + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - name: includeHttps + description: Include Https entries in the results + in: query + schema: + allOf: + - $ref: "#/components/schemas/BoolInt" + - default: 0 + example: 1 + - name: includeRelay + description: |- + Include Relay addresses in the results + E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 + in: query + schema: + allOf: + - $ref: "#/components/schemas/BoolInt" + - default: 0 + example: 1 + - name: includeIPv6 + description: Include IPv6 entries in the results + in: query + schema: + allOf: + - $ref: "#/components/schemas/BoolInt" + - default: 0 + example: 1 + responses: + '200': + description: List of Plex Devices. This includes Plex hosted servers and clients + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/PlexDevice" + '400': + $ref: "#/components/responses/400" + '401': + description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + content: + application/json: + schema: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: integer + format: int32 + example: 1001 + message: + type: string + example: User could not be authenticated + x-speakeasy-error-message: true + status: + type: integer + format: int32 + example: 401 + x-speakeasy-name-override: Unauthorized + /security/resources: + get: + operationId: getSourceConnectionInformation + summary: Get Source Connection Information + tags: + - General + description: If a caller requires connection details and a transient token for a source that is known to the server, for example a cloud media provider or shared PMS, then this endpoint can be called. This endpoint is only accessible with either an admin token or a valid transient token generated from an admin token. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: source + description: The source identifier with an included prefix. + in: query + required: true + schema: + type: string + - name: refresh + description: Force refresh + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Device: + type: object + properties: + accessToken: + type: string + clientIdentifier: + type: string + Connection: + type: array + items: + type: object + properties: + address: + type: string + local: + description: Indicates if the connection is the server's LAN address + type: boolean + port: + type: integer + protocol: + type: string + relay: + description: Indicates the connection is over a relayed connection + type: boolean + uri: + type: string + name: + type: string + '400': + description: A query param is missing or the wrong value + content: + text/html: {} + '403': + description: Invalid or no token provided or a transient token could not be created + content: + text/html: {} + /security/token: + post: + operationId: getTransientToken + summary: Get Transient Tokens + tags: + - General + description: |- + This endpoint provides the caller with a temporary token with the same access level as the caller's token. These tokens are valid for up to 48 hours and are destroyed if the server instance is restarted. + Note: This endpoint responds to all HTTP verbs but POST in preferred + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: type + description: The value `delegation` is the only supported `type` parameter. + in: query + required: true + schema: + type: string + enum: + - delegation + - name: scope + description: The value `all` is the only supported `scope` parameter. + in: query + required: true + schema: + type: string + enum: + - all + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + token: + description: The transient token + type: string + '400': + description: A query param is missing or the wrong value + content: + text/html: {} + '403': + description: Invalid or no token provided or a transient token could not be created + content: + text/html: {} + /servers: + get: + operationId: getLocalServers + summary: Get Local Servers + tags: + - General + description: Get a list of local servers. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /services/browse: + get: + operationId: browseFilesystem + summary: Browse Filesystem + tags: + - General + description: Browse filesystem paths accessible to the server. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: includeFiles + in: query + schema: + type: boolean + responses: + '200': + description: OK + /services/ultrablur/colors: + get: + operationId: getColors + summary: Get UltraBlur Colors + tags: + - UltraBlur + description: Retrieves the four colors extracted from an image for clients to use to generate an ultrablur image. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: url + description: Url for image which requires color extraction. Can be relative PMS library path or absolute url. + in: query + schema: + type: string + example: /library/metadata/217745/art/1718931408 + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + UltraBlurColors: + type: array + items: + type: object + properties: + bottomLeft: + description: The color (hex) for the bottom left quadrant. + type: string + bottomRight: + description: The color (hex) for the bottom right quadrant. + type: string + topLeft: + description: The color (hex) for the top left quadrant. + type: string + topRight: + description: The color (hex) for the top right quadrant. + type: string + '404': + description: The image url could not be found. + content: + text/html: {} + '500': + description: The server was unable to successfully extract the UltraBlur colors. + content: + text/html: {} + /services/ultrablur/image: + get: + operationId: getImage + summary: Get UltraBlur Image + tags: + - UltraBlur + description: Retrieves a server-side generated UltraBlur image based on the provided color inputs. Clients should always call this via the photo transcoder endpoint. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: topLeft + description: The base color (hex) for the top left quadrant. + in: query + schema: + type: string + example: 3f280a + - name: topRight + description: The base color (hex) for the top right quadrant. + in: query + schema: + type: string + example: 6b4713 + - name: bottomRight + description: The base color (hex) for the bottom right quadrant. + in: query + schema: + type: string + example: 0f2a43 + - name: bottomLeft + description: The base color (hex) for the bottom left quadrant. + in: query + schema: + type: string + example: 1c425d + - name: width + description: Width in pixels for the image. + in: query + schema: + type: integer + minimum: 320 + maximum: 3840 + example: 1920 + - name: height + description: Height in pixels for the image. + in: query + schema: + type: integer + minimum: 240 + maximum: 2160 + example: 1080 + - name: noise + description: Whether to add noise to the ouput image. Noise can reduce color banding with the gradients. Image sizes with noise will be larger. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + responses: + '200': + description: OK + content: + image/png: + schema: + type: string + format: binary + '400': + description: Requested width and height parameters are out of bounds (maximum 3840 x 2160) + content: + text/html: {} + /shared_servers: + post: + operationId: shareServer + summary: Share Server + tags: + - Users + description: Share a server with a friend or managed user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /statistics/bandwidth: + get: + operationId: getBandwidthStatistics + summary: Get Bandwidth Statistics + tags: + - General + description: Get dashboard bandwidth data. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: timespan + in: query + schema: + type: integer + minimum: 1 + maximum: 6 + responses: + '200': + description: OK + /statistics/resources: + get: + operationId: getResourceStatistics + summary: Get Resource Statistics + tags: + - General + description: Get dashboard resource data. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /status/sessions: + get: + operationId: listSessions + summary: List Sessions + tags: + - Status + description: List all current playbacks on this server + security: + - token: + - admin + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Metadata: + type: array + items: + allOf: + - type: object + properties: + Player: + $ref: "#/components/schemas/Player" + Session: + $ref: "#/components/schemas/Session" + User: + $ref: "#/components/schemas/User" + - $ref: "#/components/schemas/Metadata" + /status/sessions/background: + get: + operationId: getBackgroundTasks + summary: Get background tasks + tags: + - Status + description: Get the list of all background tasks + security: + - token: + - admin + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + TranscodeJob: + type: array + items: + type: object + properties: + title: + type: string + type: + type: string + enum: + - transcode + generatorID: + type: integer + key: + type: string + progress: + type: number + minimum: 0 + maximum: 100 + ratingKey: + type: string + remaining: + description: The number of seconds remaining in this job + type: integer + size: + description: The size of the result so far + type: integer + speed: + description: The speed of the transcode; 1.0 means real-time + type: number + targetTagID: + description: The tag associated with the job. This could be the tag containing the optimizer settings. + type: integer + thumb: + type: string + /status/sessions/history/all: + get: + operationId: listPlaybackHistory + summary: List Playback History + tags: + - Status + description: |- + List all playback history (Admin can see all users, others can only see their own). + Pagination should be used on this endpoint. Additionally this endpoint supports `includeFields`, `excludeFields`, `includeElements`, and `excludeElements` parameters. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: accountID + description: The account id to restrict view history + in: query + schema: + type: integer + - name: viewedAt + description: The time period to restrict history (typically of the form `viewedAt>=12456789`) + in: query + schema: + type: integer + - name: librarySectionID + description: The library section id to restrict view history + in: query + schema: + type: integer + - name: metadataItemID + description: The metadata item to restrict view history (can provide the id for a show to see all of that show's view history). Note this is translated to `metadata_items.id`, `parents.id`, or `grandparents.id` internally depending on the metadata type. + in: query + schema: + type: integer + - name: sort + description: The field on which to sort. Multiple orderings can be specified separated by `,` and the direction specified following a `:` (`desc` or `asc`; `asc` is assumed if not provided). Note `metadataItemID` may not be used here. + in: query + schema: + type: array + items: + type: string + example: viewedAt:desc,accountID + - name: excludeElements + description: Comma-separated list of elements to exclude from the response + in: query + schema: + type: string + - name: excludeFields + description: Comma-separated list of fields to exclude from the response + in: query + schema: + type: string + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Metadata: + type: array + items: + type: object + properties: + title: + description: The title of the item played + type: string + type: + description: The metadata type of the item played + type: string + accountID: + description: The account id of this playback + type: integer + deviceID: + description: The device id which played the item + type: integer + historyKey: + description: The key for this individual history item + type: string + key: + description: The metadata key for the item played + type: string + librarySectionID: + description: The library section id containing the item played + type: string + originallyAvailableAt: + description: The originally available at of the item played + type: string + ratingKey: + description: The rating key for the item played + type: string + thumb: + description: The thumb of the item played + type: string + viewedAt: + description: The time when the item was played + type: integer + /status/sessions/terminate: + post: + operationId: terminateSession + summary: Terminate a session + tags: + - Status + description: Terminate a playback session kicking off the user + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sessionId + description: The session id (found in the `Session` element in [/status/sessions](#tag/Status/operation/statusGetSlash)) + in: query + required: true + schema: + type: string + example: cdefghijklmnopqrstuvwxyz + - name: reason + description: The reason to give to the user (typically displayed in the client) + in: query + schema: + type: string + example: Stop Playing + responses: + '200': + $ref: "#/components/responses/200" + '401': + description: Server does not have the feature enabled + content: + text/html: {} + '403': + description: sessionId is empty + content: + text/html: {} + '404': + description: Session not found + content: + text/html: {} + /sync: + get: + operationId: getSyncStatus + summary: Get Sync Status + tags: + - General + description: Get sync status overview. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /sync/items: + get: + operationId: getSyncItems + summary: Get Sync Items + tags: + - General + description: Get sync items list. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /sync/queue: + get: + operationId: getSyncQueue + summary: Get Sync Queue + tags: + - General + description: Get sync queue. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /sync/refreshContent: + put: + operationId: refreshSyncContent + summary: Refresh Sync Content + tags: + - General + description: Force PMS to refresh content for known SyncLists. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /sync/refreshSynclists: + put: + operationId: refreshSyncLists + summary: Refresh Sync Lists + tags: + - General + description: Force PMS to download new SyncList from plex.tv. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /sync/transcodeQueue: + get: + operationId: getSyncTranscodeQueue + summary: Get Sync Transcode Queue + tags: + - General + description: Get sync transcode queue status. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /system/agents: + get: + operationId: getMetadataAgents + summary: Get Metadata Agents + tags: + - General + description: Get a list of available metadata agents. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /system/settings: + get: + operationId: getSystemSettings + summary: Get System Settings + tags: + - General + description: Get system-level settings. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /system/updates: + get: + operationId: checkForSystemUpdates + summary: Check for System Updates + tags: + - General + description: Check for available PMS updates. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /updater/apply: + put: + operationId: applyUpdates + summary: Applying updates + tags: + - Updater + description: Apply any downloaded updates. Note that the two parameters `tonight` and `skip` are effectively mutually exclusive. The `tonight` parameter takes precedence and `skip` will be ignored if `tonight` is also passed. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: tonight + description: Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install immediately. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: skip + description: Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + description: The update process started correctly + content: + text/html: {} + '400': + description: This system cannot install updates + content: + text/html: {} + '500': + description: The update process failed to start + content: + text/html: {} + /updater/check: + put: + operationId: checkUpdates + summary: Checking for updates + tags: + - Updater + description: Perform an update check and potentially download + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: download + description: Indicate that you want to start download any updates found. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + /updater/status: + get: + operationId: getUpdatesStatus + summary: Querying status of updates + tags: + - Updater + description: Get the status of updating the server + security: + - token: + - admin + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - type: object + properties: + autoUpdateVersion: + description: The version of the updater (currently `1`) + type: integer + canInstall: + description: Indicates whether this install can be updated through these endpoints (typically only on MacOS and Windows) + type: boolean + checkedAt: + description: The last time a check for updates was performed + type: integer + downloadURL: + description: The URL where the update is available + type: string + Release: + type: array + items: + $ref: "#/components/schemas/UpdaterRelease" + status: + description: The current error code (`0` means no error) + type: integer + /user: + get: + operationId: getTokenDetails + summary: Get Token Details + tags: + - Authentication + description: Get the User data from the provided X-Plex-Token + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: Logged in user details + content: + application/json: + schema: + $ref: "#/components/schemas/UserPlexAccount" + '400': + description: Bad Request - A parameter was not specified, or was specified incorrectly. + content: + application/json: + schema: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: integer + format: int32 + example: 1000 + message: + type: string + example: X-Plex-Client-Identifier is missing + x-speakeasy-error-message: true + status: + type: integer + format: int32 + example: 400 + x-speakeasy-name-override: BadRequest + '401': + description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + content: + application/json: + schema: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: integer + format: int32 + example: 1001 + message: + type: string + example: User could not be authenticated + x-speakeasy-error-message: true + status: + type: integer + format: int32 + example: 401 + x-speakeasy-name-override: Unauthorized + /users: + get: + operationId: get-users + summary: Get list of all connected users + tags: + - Users + description: Get list of all users that are friends and have library access with the provided Plex authentication token + servers: + - url: https://plex.tv/api parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -4886,118 +5852,74 @@ paths: type: object properties: MediaContainer: - type: object description: Container holding user and server details. - required: - - friendlyName - - identifier - - machineIdentifier - - totalSize - - size - - User + type: object properties: friendlyName: - type: string description: The friendly name of the Plex instance. + type: string example: myPlex identifier: type: string example: com.plexapp.plugins.myplex machineIdentifier: - type: string description: Unique Machine identifier of the Plex server. + type: string example: 3dff4c4da3b1229a649aa574a9e2b419a684a20e - totalSize: + size: + description: Number of users in the current response. type: integer - description: Total number of users. example: 30 - size: + totalSize: + description: Total number of users. type: integer - description: Number of users in the current response. example: 30 User: - type: array description: List of users with access to the Plex server. + type: array items: type: object - required: - - id - - title - - username - - email - - thumb - - protected - - home - - allowTuners - - allowSync - - allowCameraUpload - - allowChannels - - allowSubtitleAdmin - - restricted - - Server properties: - id: - type: integer - description: User's unique ID. - example: 22526914 title: - type: string description: User's display name. - example: Plex User - username: - type: string - description: User's username. - example: zgfuc7krcqfimrmb9lsl5j - email: - type: string - description: User's email address. - example: zgfuc7krcqfimrmb9lsl5j@protonmail.com - recommendationsPlaylistId: - description: ID of the user's recommendation playlist. - type: - - 'null' - - string - example: '' - thumb: type: string - description: URL to the user's avatar image. - example: 'https://plex.tv/users/3346028014e93acd/avatar?c=1731605021' - protected: + example: Plex User + allowCameraUpload: allOf: - - description: Indicates whether the account is protected. + - description: Indicates if the user is allowed to upload from a camera. - type: integer format: int32 enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE - home: + allowChannels: allOf: - - description: Indicates if the user is part of a home group. + - description: Indicates if the user has access to channels. - type: integer format: int32 enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE - allowTuners: + allowSubtitleAdmin: allOf: - - description: Indicates if the user is allowed to use tuners. + - description: Indicates if the user can manage subtitles. - type: integer format: int32 enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE @@ -5009,174 +5931,420 @@ paths: enum: - 0 - 1 + default: 0 example: 1 + x-speakeasy-enums: + - DISABLE + - ENABLE + allowTuners: + allOf: + - description: Indicates if the user is allowed to use tuners. + - type: integer + format: int32 + enum: + - 0 + - 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE - allowCameraUpload: + email: + description: User's email address. + type: string + example: zgfuc7krcqfimrmb9lsl5j@protonmail.com + filterAll: + description: Filters applied for all content. + type: + - 'null' + - string + example: '' + filterMovies: + description: Filters applied for movies. + type: + - 'null' + - string + example: '' + filterMusic: + description: Filters applied for music. + type: + - 'null' + - string + example: '' + filterPhotos: + description: Filters applied for photos. + type: + - 'null' + - string + example: '' + filterTelevision: + description: Filters applied for television. + type: string + example: '' + home: allOf: - - description: Indicates if the user is allowed to upload from a camera. + - description: Indicates if the user is part of a home group. - type: integer format: int32 enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE - allowChannels: + id: + description: User's unique ID. + type: integer + example: 22526914 + protected: allOf: - - description: Indicates if the user has access to channels. + - description: Indicates whether the account is protected. - type: integer format: int32 enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE - allowSubtitleAdmin: + recommendationsPlaylistId: + description: ID of the user's recommendation playlist. + type: + - 'null' + - string + example: '' + restricted: allOf: - - description: Indicates if the user can manage subtitles. + - description: Indicates if the user has restricted access. - type: integer format: int32 enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE - filterAll: + Server: + description: List of servers owned by the user. + type: array + items: + type: object + properties: + allLibraries: + allOf: + - description: Indicates if the user has access to all libraries. + - type: integer + format: int32 + enum: + - 0 + - 1 + default: 0 + example: 1 + x-speakeasy-enums: + - DISABLE + - ENABLE + id: + description: Unique ID of the server of the connected user + type: integer + example: 907759180 + lastSeenAt: + $ref: "#/components/schemas/PlexDateTime" + machineIdentifier: + description: Machine identifier of the Plex server. + type: string + example: fbb8aa6be6e0c997c6268bc2b4431c8807f70a3 + name: + description: Name of the Plex server of the connected user. + type: string + example: ConnectedUserFlix + numLibraries: + description: Number of libraries in the server this user has access to. + type: integer + example: 16 + owned: + allOf: + - description: Indicates if the user owns the server. + - type: integer + format: int32 + enum: + - 0 + - 1 + default: 0 + example: 1 + x-speakeasy-enums: + - DISABLE + - ENABLE + pending: + allOf: + - description: Indicates if the server is pending approval. + - type: integer + format: int32 + enum: + - 0 + - 1 + default: 0 + example: 1 + x-speakeasy-enums: + - DISABLE + - ENABLE + serverId: + description: ID of the actual Plex server. + type: integer + example: 9999999 + required: + - id + - serverId + - machineIdentifier + - name + - lastSeenAt + - numLibraries + - allLibraries + - owned + - pending + thumb: + description: URL to the user's avatar image. + type: string + example: https://plex.tv/users/3346028014e93acd/avatar?c=1731605021 + username: + description: User's username. + type: string + example: zgfuc7krcqfimrmb9lsl5j + required: + - id + - title + - username + - email + - thumb + - protected + - home + - allowTuners + - allowSync + - allowCameraUpload + - allowChannels + - allowSubtitleAdmin + - restricted + - Server + required: + - friendlyName + - identifier + - machineIdentifier + - totalSize + - size + - User + '400': + description: Bad Request - A parameter was not specified, or was specified incorrectly. + content: + application/json: + schema: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: integer + format: int32 + example: 1000 + message: + type: string + example: X-Plex-Client-Identifier is missing + x-speakeasy-error-message: true + status: + type: integer + format: int32 + example: 400 + x-speakeasy-name-override: BadRequest + '401': + description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + content: + application/json: + schema: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: integer + format: int32 + example: 1001 + message: + type: string + example: User could not be authenticated + x-speakeasy-error-message: true + status: + type: integer + format: int32 + example: 401 + x-speakeasy-name-override: Unauthorized + /users/signin: + post: + operationId: post-users-sign-in-data + summary: Get User Sign In Data + tags: + - Authentication + description: Sign in user with username and password and return user data with Plex authentication token + security: [] + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + requestBody: + description: Login credentials + content: + application/x-www-form-urlencoded: + schema: + type: object + properties: + login: + type: string + format: email + example: username@email.com + password: + type: string + format: password + example: password123 + rememberMe: + type: boolean + default: false + verificationCode: + type: string + example: 123456 + required: + - login + - password + responses: + '201': + description: Returns the user account data with a valid auth token + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/UserPlexAccount" + - type: object + properties: + pastSubscriptions: + type: array + items: + title: PastSubscription + type: object + properties: + type: + type: string + example: plexpass + billing: + type: object + properties: + internalPaymentMethod: + type: object + paymentMethodId: + type: + - integer + - 'null' + required: + - internalPaymentMethod + - paymentMethodId + canceled: + type: boolean + default: false + example: false + canConvert: + type: boolean + default: false + example: false + canDowngrade: + type: boolean + default: false + example: false + canReactivate: + type: boolean + default: false + example: false + canUpgrade: + type: boolean + default: false + example: false + endsAt: + oneOf: + - $ref: "#/components/schemas/PlexDateTime" + - type: 'null' + gracePeriod: + type: boolean + default: false + example: false + id: type: - - 'null' - string - description: Filters applied for all content. - example: '' - filterMovies: - type: - 'null' - - string - description: Filters applied for movies. - example: '' - filterMusic: + mode: type: - - 'null' - string - description: Filters applied for music. - example: '' - filterPhotos: - type: - 'null' + onHold: + type: boolean + default: false + example: false + renewsAt: + oneOf: + - $ref: "#/components/schemas/PlexDateTime" + - type: 'null' + state: + enum: + - ended + example: ended + x-speakeasy-unknown-values: allow + transfer: + type: - string - description: Filters applied for photos. - example: '' - filterTelevision: - type: string - description: Filters applied for television. - example: '' - restricted: - allOf: - - description: Indicates if the user has restricted access. - - type: integer - format: int32 - enum: - - 0 - - 1 - example: 1 - default: 0 - x-speakeasy-enums: - - DISABLE - - ENABLE - Server: - type: array - description: List of servers owned by the user. - items: - type: object - required: - - id - - serverId - - machineIdentifier - - name - - lastSeenAt - - numLibraries - - allLibraries - - owned - - pending - properties: - id: - type: integer - description: Unique ID of the server of the connected user - example: 907759180 - serverId: - type: integer - description: ID of the actual Plex server. - example: 9999999 - machineIdentifier: - type: string - description: Machine identifier of the Plex server. - example: fbb8aa6be6e0c997c6268bc2b4431c8807f70a3 - name: - type: string - description: Name of the Plex server of the connected user. - example: ConnectedUserFlix - lastSeenAt: - $ref: '#/components/schemas/PlexDateTime' - numLibraries: - type: integer - description: Number of libraries in the server this user has access to. - example: 16 - allLibraries: - allOf: - - description: Indicates if the user has access to all libraries. - - type: integer - format: int32 - enum: - - 0 - - 1 - example: 1 - default: 0 - x-speakeasy-enums: - - DISABLE - - ENABLE - owned: - allOf: - - description: Indicates if the user owns the server. - - type: integer - format: int32 - enum: - - 0 - - 1 - example: 1 - default: 0 - x-speakeasy-enums: - - DISABLE - - ENABLE - pending: - allOf: - - description: Indicates if the server is pending approval. - - type: integer - format: int32 - enum: - - 0 - - 1 - example: 1 - default: 0 - x-speakeasy-enums: - - DISABLE - - ENABLE + - 'null' + required: + - id + - mode + - renewsAt + - endsAt + - canceled + - gracePeriod + - onHold + - canReactivate + - canUpgrade + - canDowngrade + - canConvert + - type + - transfer + - state + - billing + trials: + type: array + items: + type: object + required: + - pastSubscriptions + - trials '400': - description: 'Bad Request - A parameter was not specified, or was specified incorrectly.' + description: Bad Request - A parameter was not specified, or was specified incorrectly. content: application/json: schema: - x-speakeasy-name-override: BadRequest type: object properties: errors: @@ -5190,121 +6358,667 @@ paths: example: 1000 message: type: string - x-speakeasy-error-message: true example: X-Plex-Client-Identifier is missing + x-speakeasy-error-message: true status: type: integer format: int32 example: 400 + x-speakeasy-name-override: BadRequest '401': description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. content: application/json: schema: - x-speakeasy-name-override: Unauthorized - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1001 - message: - type: string - x-speakeasy-error-message: true - example: User could not be authenticated - status: - type: integer - format: int32 - example: 401 - /resources: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: integer + format: int32 + example: 1001 + message: + type: string + example: User could not be authenticated + x-speakeasy-error-message: true + status: + type: integer + format: int32 + example: 401 + x-speakeasy-name-override: Unauthorized + /users/signout: + delete: + operationId: signOut + summary: Sign Out + tags: + - Authentication + description: Invalidate the current authentication token. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + /{transcodeType}/:/transcode/universal/decision: + get: + operationId: makeDecision + summary: Make a decision on media playback + tags: + - Transcoder + description: Make a decision on media playback based on client profile, and requested settings such as bandwidth and resolution. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/transcodeType" + - $ref: "#/components/parameters/transcodeSessionId" + - $ref: "#/components/parameters/advancedSubtitles" + - name: audioBoost + description: Percentage of original audio loudness to use when transcoding (100 is equivalent to original volume, 50 is half, 200 is double, etc) + in: query + schema: + type: integer + minimum: 1 + example: 50 + - name: audioChannelCount + description: Target video number of audio channels. + in: query + schema: + type: integer + minimum: 1 + maximum: 8 + example: 5 + - name: autoAdjustQuality + description: Indicates the client supports ABR. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: autoAdjustSubtitle + description: Indicates if the server should adjust subtitles based on Voice Activity Data. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: directPlay + description: Indicates the client supports direct playing the indicated content. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: directStream + description: Indicates the client supports direct streaming the video of the indicated content. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: directStreamAudio + description: Indicates the client supports direct streaming the audio of the indicated content. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: disableResolutionRotation + description: Indicates if resolution should be adjusted for orientation. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: hasMDE + description: Ignore client profiles when determining if direct play is possible. Only has an effect when directPlay=1 and both mediaIndex and partIndex are specified and neither are -1 + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: location + description: Network type of the client, can be used to help determine target bitrate. + in: query + schema: + type: string + enum: + - lan + - wan + - cellular + example: wan + - name: mediaBufferSize + description: Buffer size used in playback (in KB). Clients should specify a lower bound if not known exactly. This value could make the difference between transcoding and direct play on bandwidth constrained networks. + in: query + schema: + type: integer + example: 102400 + - name: mediaIndex + description: Index of the media to transcode. -1 or not specified indicates let the server choose. + in: query + schema: + type: integer + example: 0 + - name: musicBitrate + description: Target bitrate for audio only files (in kbps, used to transcode). + in: query + schema: + type: integer + minimum: 0 + example: 5000 + - name: offset + description: Offset from the start of the media (in seconds). + in: query + schema: + type: number + example: 90.5 + - name: partIndex + description: Index of the part to transcode. -1 or not specified indicates the server should join parts together in a transcode + in: query + schema: + type: integer + example: 0 + - name: path + description: Internal PMS path of the media to transcode. + in: query + schema: + type: string + example: /library/metadata/151671 + - name: peakBitrate + description: Maximum bitrate (in kbps) to use in ABR. + in: query + schema: + type: integer + minimum: 0 + example: 12000 + - name: photoResolution + description: Target photo resolution. + in: query + schema: + type: string + pattern: ^\d[x:]\d$ + example: 1080x1080 + - name: protocol + description: "Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022)" + in: query + schema: + type: string + enum: + - http + - hls + - dash + example: dash + - name: secondsPerSegment + description: Number of seconds to include in each transcoded segment + in: query + schema: + type: integer + example: 5 + - name: subtitleSize + description: Percentage of original subtitle size to use when burning subtitles (100 is equivalent to original size, 50 is half, ect) + in: query + schema: + type: integer + minimum: 1 + example: 50 + - name: subtitles + description: "Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream" + in: query + schema: + type: string + enum: + - auto + - burn + - none + - sidecar + - embedded + - segmented + - unknown + example: Burn + - name: videoBitrate + description: Target video bitrate (in kbps). + in: query + schema: + type: integer + minimum: 0 + example: 12000 + - name: videoQuality + description: Target photo quality. + in: query + schema: + type: integer + minimum: 0 + maximum: 99 + example: 50 + - name: videoResolution + description: Target maximum video resolution. + in: query + schema: + type: string + pattern: ^\d[x:]\d$ + example: 1080x1080 + - name: X-Plex-Client-Identifier + description: Unique per client. + in: header + required: true + schema: + type: string + - name: X-Plex-Client-Profile-Extra + description: See [Profile Augmentations](#section/API-Info/Profile-Augmentations) . + in: header + schema: + type: string + example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) + - name: X-Plex-Client-Profile-Name + description: Which built in Client Profile to use in the decision. Generally should only be used to specify the Generic profile. + in: header + schema: + type: string + example: generic + - name: X-Plex-Device + description: Device the client is running on + in: header + schema: + type: string + example: Windows + - name: X-Plex-Model + description: Model of the device the client is running on + in: header + schema: + type: string + example: standalone + - name: X-Plex-Platform + description: Client Platform + in: header + schema: + type: string + example: Chrome + - name: X-Plex-Platform-Version + description: Client Platform Version + in: header + schema: + type: string + example: 135 + - name: X-Plex-Session-Identifier + description: Unique per client playback session. Used if a client can playback multiple items at a time (such as a browser with multiple tabs) + in: header + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDecision" + /{transcodeType}/:/transcode/universal/fallback: + post: + operationId: triggerFallback + summary: Manually trigger a transcoder fallback + tags: + - Transcoder + description: 'Manually trigger a transcoder fallback ex: HEVC to h.264 or hw to sw' + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/transcodeType" + - $ref: "#/components/parameters/transcodeSessionId" + responses: + '200': + $ref: "#/components/responses/200" + '404': + description: Session ID does not exist + content: + text/html: {} + '412': + description: Transcode could not fallback + content: + text/html: {} + '500': + description: Transcode failed to fallback + content: + text/html: {} + /{transcodeType}/:/transcode/universal/subtitles: get: - servers: - - url: 'https://plex.tv/api/v2' + operationId: transcodeSubtitles + summary: Transcode subtitles tags: - - Plex - security: - - token: - - admin - summary: Get Server Resources - description: Get Plex server access tokens and server connections - operationId: get-server-resources + - Transcoder + description: Only transcode subtitle streams. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - name: includeHttps + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/transcodeType" + - $ref: "#/components/parameters/transcodeSessionId" + - $ref: "#/components/parameters/advancedSubtitles" + - name: audioBoost + description: Percentage of original audio loudness to use when transcoding (100 is equivalent to original volume, 50 is half, 200 is double, etc) in: query - description: Include Https entries in the results schema: - allOf: - - $ref: "#/components/schemas/BoolInt" - - default: 0 + type: integer + minimum: 1 + example: 50 + - name: audioChannelCount + description: Target video number of audio channels. + in: query + schema: + type: integer + minimum: 1 + maximum: 8 + example: 5 + - name: autoAdjustQuality + description: Indicates the client supports ABR. + in: query + schema: + $ref: "#/components/schemas/BoolInt" example: 1 - - name: includeRelay + - name: autoAdjustSubtitle + description: Indicates if the server should adjust subtitles based on Voice Activity Data. in: query - description: | - Include Relay addresses in the results - E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 schema: - allOf: - - $ref: "#/components/schemas/BoolInt" - - default: 0 + $ref: "#/components/schemas/BoolInt" example: 1 - - name: includeIPv6 + - name: directPlay + description: Indicates the client supports direct playing the indicated content. in: query - description: Include IPv6 entries in the results schema: - allOf: - - $ref: "#/components/schemas/BoolInt" - - default: 0 - example: 1 + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: directStream + description: Indicates the client supports direct streaming the video of the indicated content. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: directStreamAudio + description: Indicates the client supports direct streaming the audio of the indicated content. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: disableResolutionRotation + description: Indicates if resolution should be adjusted for orientation. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: hasMDE + description: Ignore client profiles when determining if direct play is possible. Only has an effect when directPlay=1 and both mediaIndex and partIndex are specified and neither are -1 + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: location + description: Network type of the client, can be used to help determine target bitrate. + in: query + schema: + type: string + enum: + - lan + - wan + - cellular + example: wan + - name: mediaBufferSize + description: Buffer size used in playback (in KB). Clients should specify a lower bound if not known exactly. This value could make the difference between transcoding and direct play on bandwidth constrained networks. + in: query + schema: + type: integer + example: 102400 + - name: mediaIndex + description: Index of the media to transcode. -1 or not specified indicates let the server choose. + in: query + schema: + type: integer + example: 0 + - name: musicBitrate + description: Target bitrate for audio only files (in kbps, used to transcode). + in: query + schema: + type: integer + minimum: 0 + example: 5000 + - name: offset + description: Offset from the start of the media (in seconds). + in: query + schema: + type: number + example: 90.5 + - name: partIndex + description: Index of the part to transcode. -1 or not specified indicates the server should join parts together in a transcode + in: query + schema: + type: integer + example: 0 + - name: path + description: Internal PMS path of the media to transcode. + in: query + schema: + type: string + example: /library/metadata/151671 + - name: peakBitrate + description: Maximum bitrate (in kbps) to use in ABR. + in: query + schema: + type: integer + minimum: 0 + example: 12000 + - name: photoResolution + description: Target photo resolution. + in: query + schema: + type: string + pattern: ^\d[x:]\d$ + example: 1080x1080 + - name: protocol + description: "Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022)" + in: query + schema: + type: string + enum: + - http + - hls + - dash + example: dash + - name: secondsPerSegment + description: Number of seconds to include in each transcoded segment + in: query + schema: + type: integer + example: 5 + - name: subtitleSize + description: Percentage of original subtitle size to use when burning subtitles (100 is equivalent to original size, 50 is half, ect) + in: query + schema: + type: integer + minimum: 1 + example: 50 + - name: subtitles + description: "Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream" + in: query + schema: + type: string + enum: + - auto + - burn + - none + - sidecar + - embedded + - segmented + - unknown + example: Burn + - name: videoBitrate + description: Target video bitrate (in kbps). + in: query + schema: + type: integer + minimum: 0 + example: 12000 + - name: videoQuality + description: Target photo quality. + in: query + schema: + type: integer + minimum: 0 + maximum: 99 + example: 50 + - name: videoResolution + description: Target maximum video resolution. + in: query + schema: + type: string + pattern: ^\d[x:]\d$ + example: 1080x1080 + - name: X-Plex-Client-Identifier + description: Unique per client. + in: header + required: true + schema: + type: string + - name: X-Plex-Client-Profile-Extra + description: See [Profile Augmentations](#section/API-Info/Profile-Augmentations) . + in: header + schema: + type: string + example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) + - name: X-Plex-Client-Profile-Name + description: Which built in Client Profile to use in the decision. Generally should only be used to specify the Generic profile. + in: header + schema: + type: string + example: generic + - name: X-Plex-Device + description: Device the client is running on + in: header + schema: + type: string + example: Windows + - name: X-Plex-Model + description: Model of the device the client is running on + in: header + schema: + type: string + example: standalone + - name: X-Plex-Platform + description: Client Platform + in: header + schema: + type: string + example: Chrome + - name: X-Plex-Platform-Version + description: Client Platform Version + in: header + schema: + type: string + example: 135 + - name: X-Plex-Session-Identifier + description: Unique per client playback session. Used if a client can playback multiple items at a time (such as a browser with multiple tabs) + in: header + schema: + type: string responses: '200': - description: List of Plex Devices. This includes Plex hosted servers and clients + description: Transcoded subtitle file content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/PlexDevice' + text/srt: + example: | + 1 + 00:00:02,499 --> 00:00:06,416 + [SERENE MUSIC] + + 2 + 00:00:11,791 --> 00:00:13,958 + [BROOK BABBLES] + [FLY BUZZES] + + 3 + 00:00:16,166 --> 00:00:17,666 + [BIRD TWEETS] + + 4 + 00:00:17,666 --> 00:00:18,708 + [WINGS FLAP] + + 5 + 00:00:19,833 --> 00:00:20,374 + [BIRD TWEETS] + [WINGS FLAP] + + 6 + 00:00:20,374 --> 00:00:21,041 + [THUD] + + 7 + 00:00:21,374 --> 00:00:22,249 + [THUD] + + 8 + 00:00:22,249 --> 00:00:23,083 + [SQUIRREL LAUGHS] + + 9 + 00:00:26,249 --> 00:00:27,541 + [SNORES] + + 10 + 00:00:29,416 --> 00:00:30,708 + [SNORES] + + 11 + 00:00:32,749 --> 00:00:34,041 + [BUNNY SNORES] + + 12 + 00:00:35,916 --> 00:00:37,249 + [BUNNY SNORES] '400': - $ref: '#/components/responses/400' - '401': - description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. - content: - application/json: - schema: - x-speakeasy-name-override: Unauthorized - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1001 - message: - type: string - x-speakeasy-error-message: true - example: User could not be authenticated - status: - type: integer - format: int32 - example: 401 + $ref: "#/components/responses/400" + '403': + $ref: "#/components/responses/403" + '404': + $ref: "#/components/responses/404" /activities/{activityId}: delete: - summary: Cancel a running activity operationId: cancelActivity - description: Cancel a running activity. Admins can cancel all activities but other users can only cancel their own + summary: Cancel a running activity tags: - Activities + description: Cancel a running activity. Admins can cancel all activities but other users can only cancel their own security: - token: - admin @@ -5329,7 +7043,7 @@ paths: example: d6199ba1-fb5e-4cae-bf17-1a5369c1cf1e responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: Activity is not cancellable content: @@ -5340,12 +7054,11 @@ paths: text/html: {} /butler/{butlerTask}: delete: - summary: Stop a single Butler task operationId: stopTask - description: | - This endpoint will stop a currently running task by name, or remove it from the list of scheduled tasks if it exists + summary: Stop a single Butler task tags: - Butler + description: This endpoint will stop a currently running task by name, or remove it from the list of scheduled tasks if it exists security: - token: - admin @@ -5392,18 +7105,17 @@ paths: - UpgradeMediaAnalysis responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '404': description: No task with this name was found or no task with this name was running content: text/html: {} post: - summary: Start a single Butler task operationId: startTask - description: | - This endpoint will attempt to start a specific Butler task by name. + summary: Start a single Butler task tags: - Butler + description: This endpoint will attempt to start a specific Butler task by name. security: - token: - admin @@ -5463,14 +7175,14 @@ paths: text/html: {} /downloadQueue/{queueId}: get: - summary: Get a download queue operationId: getDownloadQueue - description: | + summary: Get a download queue + tags: + - Download Queue + description: |- Available: 0.2.0 Get a download queue by its id - tags: - - Download Queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5498,43 +7210,43 @@ paths: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: DownloadQueue: + type: array items: + type: object properties: id: type: integer itemCount: type: integer status: - description: | + description: |- The state of this queue - deciding: At least one item is still being decided - waiting: At least one item is waiting for transcode and none are currently transcoding - processing: At least one item is being transcoded - done: All items are available (or potentially expired) - error: At least one item has encountered an error + type: string enum: - deciding - waiting - processing - done - error - type: string - type: object - type: array - type: object /downloadQueue/{queueId}/add: post: - summary: Add to download queue operationId: addDownloadQueueItems - description: | + summary: Add to download queue + tags: + - Download Queue + description: |- Available: 0.2.0 Add items to the download queue - tags: - - Download Queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5547,6 +7259,32 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/advancedSubtitles" + - $ref: "#/components/parameters/audioBoost" + - $ref: "#/components/parameters/audioChannelCount" + - $ref: "#/components/parameters/autoAdjustQuality" + - $ref: "#/components/parameters/autoAdjustSubtitle" + - $ref: "#/components/parameters/directPlay" + - $ref: "#/components/parameters/directStream" + - $ref: "#/components/parameters/directStreamAudio" + - $ref: "#/components/parameters/disableResolutionRotation" + - $ref: "#/components/parameters/hasMDE" + - $ref: "#/components/parameters/location" + - $ref: "#/components/parameters/mediaBufferSize" + - $ref: "#/components/parameters/mediaIndex" + - $ref: "#/components/parameters/musicBitrate" + - $ref: "#/components/parameters/offset" + - $ref: "#/components/parameters/partIndex" + - $ref: "#/components/parameters/path" + - $ref: "#/components/parameters/peakBitrate" + - $ref: "#/components/parameters/photoResolution" + - $ref: "#/components/parameters/protocol" + - $ref: "#/components/parameters/secondsPerSegment" + - $ref: "#/components/parameters/subtitleSize" + - $ref: "#/components/parameters/subtitles" + - $ref: "#/components/parameters/videoBitrate" + - $ref: "#/components/parameters/videoQuality" + - $ref: "#/components/parameters/videoResolution" - name: queueId description: The queue id in: path @@ -5565,32 +7303,6 @@ paths: example: - /library/metadata/3 - /library/metadata/6 - - $ref: '#/components/parameters/advancedSubtitles' - - $ref: '#/components/parameters/audioBoost' - - $ref: '#/components/parameters/audioChannelCount' - - $ref: '#/components/parameters/autoAdjustQuality' - - $ref: '#/components/parameters/autoAdjustSubtitle' - - $ref: '#/components/parameters/directPlay' - - $ref: '#/components/parameters/directStream' - - $ref: '#/components/parameters/directStreamAudio' - - $ref: '#/components/parameters/disableResolutionRotation' - - $ref: '#/components/parameters/hasMDE' - - $ref: '#/components/parameters/location' - - $ref: '#/components/parameters/mediaBufferSize' - - $ref: '#/components/parameters/mediaIndex' - - $ref: '#/components/parameters/musicBitrate' - - $ref: '#/components/parameters/offset' - - $ref: '#/components/parameters/partIndex' - - $ref: '#/components/parameters/path' - - $ref: '#/components/parameters/peakBitrate' - - $ref: '#/components/parameters/photoResolution' - - $ref: '#/components/parameters/protocol' - - $ref: '#/components/parameters/secondsPerSegment' - - $ref: '#/components/parameters/subtitleSize' - - $ref: '#/components/parameters/subtitles' - - $ref: '#/components/parameters/videoBitrate' - - $ref: '#/components/parameters/videoQuality' - - $ref: '#/components/parameters/videoResolution' responses: '200': description: OK @@ -5600,10 +7312,13 @@ paths: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: AddedQueueItems: + type: array items: + type: object properties: id: description: The queue item id that was added or the existing one if an item already exists in this queue with the same parameters @@ -5611,19 +7326,16 @@ paths: key: description: The key added to the queue type: string - type: object - type: array - type: object /downloadQueue/{queueId}/items: get: - summary: Get download queue items operationId: listDownloadQueueItems - description: | + summary: Get download queue items + tags: + - Download Queue + description: |- Available: 0.2.0 Get items from a download queue - tags: - - Download Queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5651,76 +7363,151 @@ paths: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: DownloadQueueItem: - items: - properties: - DecisionResult: - properties: - availableBandwidth: - description: The maximum bitrate set when item was added - type: integer - directPlayDecisionCode: - type: integer - directPlayDecisionText: - type: string - generalDecisionCode: - type: integer - generalDecisionText: - type: string - mdeDecisionCode: - description: The code indicating the status of evaluation of playback when client indicates `hasMDE=1` - type: integer - mdeDecisionText: - description: Descriptive text for the above code - type: string - transcodeDecisionCode: - type: integer - transcodeDecisionText: - type: string - type: object - error: - description: The error encountered in transcoding or decision - type: string - id: - type: integer - key: - type: string - queueId: - type: integer - status: - description: | - The state of the item: - - deciding: The item decision is pending - - waiting: The item is waiting for transcode - - processing: The item is being transcoded - - available: The item is available for download - - error: The item encountered an error in the decision or transcode - - expired: The transcoded item has timed out and is no longer available - enum: - - deciding - - waiting - - processing - - available - - error - - expired - type: string - transcode: - description: The transcode session object which is not yet documented otherwise it'd be a $ref here. - type: object - TranscodeSession: - $ref: '#/components/schemas/TranscodeSession' - type: object type: array - type: object + items: + $ref: "#/components/schemas/DownloadQueueItem" + /home/users/{id}/switch: + post: + operationId: switchHomeUser + summary: Switch Home User + tags: + - Authentication + description: Switch to a Plex Home user and return a new auth token. + servers: + - url: https://plex.tv/api + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /home/users/{userId}: + delete: + operationId: deleteHomeUser + summary: Delete Home User + tags: + - Users + description: Remove a Plex Home user. + servers: + - url: https://plex.tv/api + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: userId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + put: + operationId: updateHomeUser + summary: Update Home User + tags: + - Users + description: Update a Plex Home user. + servers: + - url: https://plex.tv/api + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: userId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /home/users/restricted/{userId}: + put: + operationId: updateRestrictedUser + summary: Update Restricted User + tags: + - Users + description: Update restricted (managed) home user settings. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: userId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /hubs/metadata/{metadataId}: get: - summary: Get hubs for section by metadata item operationId: getMetadataHubs - description: Get the hubs for a section by metadata item. Currently only for music sections + summary: Get hubs for section by metadata item tags: - Hubs + description: Get the hubs for a section by metadata item. Currently only for music sections parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5733,13 +7520,13 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/count" - name: metadataId description: The metadata ID for the hubs to fetch in: path required: true schema: type: integer - - $ref: '#/components/parameters/count' - name: onlyTransient description: Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added) in: query @@ -5747,18 +7534,18 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/responses-200' + $ref: "#/components/responses/responses-200" '400': description: No metadata with that id or permission is denied content: text/html: {} /hubs/metadata/{metadataId}/postplay: get: - summary: Get postplay hubs operationId: getPostplayHubs - description: Get the hubs for a metadata to be displayed in post play + summary: Get postplay hubs tags: - Hubs + description: Get the hubs for a metadata to be displayed in post play parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5771,13 +7558,13 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/count" - name: metadataId description: The metadata ID for the hubs to fetch in: path required: true schema: type: integer - - $ref: '#/components/parameters/count' - name: onlyTransient description: Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added) in: query @@ -5785,18 +7572,18 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/responses-200' + $ref: "#/components/responses/responses-200" '400': description: No metadata with that id or permission is denied content: text/html: {} /hubs/metadata/{metadataId}/related: get: - summary: Get related hubs operationId: getRelatedHubs - description: Get the hubs for a metadata related to the provided metadata item + summary: Get related hubs tags: - Hubs + description: Get the hubs for a metadata related to the provided metadata item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5809,13 +7596,13 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/count" - name: metadataId description: The metadata ID for the hubs to fetch in: path required: true schema: type: integer - - $ref: '#/components/parameters/count' - name: onlyTransient description: Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added) in: query @@ -5823,18 +7610,18 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/responses-200' + $ref: "#/components/responses/responses-200" '400': description: No metadata with that id or permission is denied content: text/html: {} /hubs/sections/{sectionId}: get: - summary: Get section hubs operationId: getSectionHubs - description: Get the hubs for a single section + summary: Get section hubs tags: - Hubs + description: Get the hubs for a single section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5847,13 +7634,13 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/count" - name: sectionId description: The section ID for the hubs to fetch in: path required: true schema: type: integer - - $ref: '#/components/parameters/count' - name: onlyTransient description: Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added) in: query @@ -5874,28 +7661,28 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Hub: - items: - $ref: '#/components/schemas/Hub' type: array - type: object - type: object + items: + $ref: "#/components/schemas/Hub" '400': description: No section with that id or permission is denied content: text/html: {} /hubs/sections/{sectionId}/manage: delete: - summary: Reset hubs to defaults operationId: resetSectionDefaults - description: Reset hubs for this section to defaults and delete custom hubs + summary: Reset hubs to defaults tags: - Hubs + description: Reset hubs for this section to defaults and delete custom hubs security: - token: - admin @@ -5919,19 +7706,19 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '403': - $ref: '#/components/responses/403' + $ref: "#/components/responses/403" '404': description: Section id was not found content: text/html: {} get: - summary: Get hubs operationId: listHubs - description: Get the list of hubs including both built-in and custom + summary: Get hubs tags: - Hubs + description: Get the list of hubs including both built-in and custom security: - token: - admin @@ -5973,27 +7760,34 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Hub: + type: array items: + type: object properties: + title: + description: The title of this hub + type: string homeVisibility: - description: | + description: |- Whether this hub is visible on the home screen - all: Visible to all users - none: Visible to no users - admin: Visible to only admin users - shared: Visible to shared users + type: string enum: - all - none - admin - shared - type: string identifier: description: The identifier for this hub type: string @@ -6007,37 +7801,30 @@ paths: description: Whether this hub is visible to shared user's home type: boolean recommendationsVisibility: - description: | + description: |- The visibility of this hub in recommendations: - all: Visible to all users - none: Visible to no users - admin: Visible to only admin users - shared: Visible to shared users + type: string enum: - all - none - admin - shared - type: string - title: - description: The title of this hub - type: string - type: object - type: array - type: object - type: object '403': - $ref: '#/components/responses/403' + $ref: "#/components/responses/403" '404': description: Section id was not found content: text/html: {} post: - summary: Create a custom hub operationId: createCustomHub - description: Create a custom hub based on a metadata item + summary: Create a custom hub tags: - Hubs + description: Create a custom hub based on a metadata item security: - token: - admin @@ -6082,24 +7869,24 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: A hub could not be created with this metadata item content: text/html: {} '403': - $ref: '#/components/responses/403' + $ref: "#/components/responses/403" '404': description: Section id or metadata item was not found content: text/html: {} /hubs/sections/{sectionId}/manage/move: put: - summary: Move Hub operationId: moveHub - description: Changed the ordering of a hub among others hubs + summary: Move Hub tags: - Hubs + description: Changed the ordering of a hub among others hubs security: - token: - admin @@ -6134,20 +7921,20 @@ paths: type: string responses: '200': - $ref: '#/components/responses/get-responses-200' + $ref: "#/components/responses/get-responses-200" '403': - $ref: '#/components/responses/403' + $ref: "#/components/responses/403" '404': description: Section id was not found content: text/html: {} /library/collections/{collectionId}/items: get: - summary: Get items in a collection operationId: getCollectionItems - description: Get items in a collection. Note if this collection contains more than 100 items, paging must be used. + summary: Get items in a collection tags: - Content + description: Get items in a collection. Note if this collection contains more than 100 items, paging must be used. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6172,17 +7959,17 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" '404': description: Collection not found content: text/html: {} put: - summary: Add items to a collection operationId: addCollectionItems - description: Add items to a collection by uri + summary: Add items to a collection tags: - Library Collections + description: Add items to a collection by uri security: - token: - admin @@ -6216,18 +8003,18 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" '404': description: Collection not found content: text/html: {} /library/metadata/{ids}: delete: - summary: Delete a metadata item operationId: deleteMetadataItem - description: Delete a single metadata item from the library, deleting media as well + summary: Delete a metadata item tags: - Library + description: Delete a single metadata item from the library, deleting media as well security: - token: - admin @@ -6255,17 +8042,17 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: Media items could not be deleted content: text/html: {} get: - summary: Get a metadata item operationId: getMetadataItem - description: Get one or more metadata items. + summary: Get a metadata item tags: - Content + description: Get one or more metadata items. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6325,6 +8112,66 @@ paths: in: query schema: $ref: "#/components/schemas/BoolInt" + - name: includeMarkers + description: Include intro/credits markers in the response + in: query + schema: + type: boolean + - name: includeGuids + description: Include external GUIDs (e.g. TMDB, TVDB) in the response + in: query + schema: + type: boolean + - name: includeChapters + description: Include chapter data in the response + in: query + schema: + type: boolean + - name: includeExternalMedia + description: Include external/online media in the response + in: query + schema: + type: boolean + - name: includeExtras + description: Include trailers, behind-the-scenes, and other extras + in: query + schema: + type: boolean + - name: includeRelated + description: Include related items in the response + in: query + schema: + type: boolean + - name: includeOnDeck + description: Include On Deck status in the response + in: query + schema: + type: boolean + - name: includePopularLeaves + description: Include popular episodes in the response + in: query + schema: + type: boolean + - name: includeReviews + description: Include user reviews in the response + in: query + schema: + type: boolean + - name: includeStations + description: Include radio station data in the response + in: query + schema: + type: boolean + - name: excludeElements + description: Comma-separated list of elements to exclude from the response + in: query + schema: + type: string + - name: excludeFields + description: Comma-separated list of fields to exclude from the response + in: query + schema: + type: string responses: '200': description: OK @@ -6340,13 +8187,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" put: - summary: Edit a metadata item operationId: editMetadataItem - description: Edit metadata items setting fields + summary: Edit a metadata item tags: - Library + description: Edit metadata items setting fields security: - token: - admin @@ -6376,18 +8223,18 @@ paths: type: object responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: Media items could not be deleted content: text/html: {} /library/metadata/{ids}/addetect: put: - summary: Ad-detect an item operationId: detectAds - description: Start the detection of ads in a metadata item + summary: Ad-detect an item tags: - Library + description: Start the detection of ads in a metadata item security: - token: - admin @@ -6410,14 +8257,14 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/allLeaves: get: - summary: Get the leaves of an item operationId: getAllItemLeaves - description: Get the leaves for a metadata item such as the episodes in a show + summary: Get the leaves of an item tags: - Library + description: Get the leaves for a metadata item such as the episodes in a show parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6450,14 +8297,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/metadata/{ids}/analyze: put: - summary: Analyze an item operationId: analyzeMetadata - description: Start the analysis of a metadata item + summary: Analyze an item tags: - Library + description: Start the analysis of a metadata item security: - token: - admin @@ -6492,14 +8339,14 @@ paths: type: number responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/chapterThumbs: put: - summary: Generate thumbs of chapters for an item operationId: generateThumbs - description: Start the chapter thumb generation for an item + summary: Generate thumbs of chapters for an item tags: - Library + description: Start the chapter thumb generation for an item security: - token: - admin @@ -6527,14 +8374,14 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/credits: put: - summary: Credit detect a metadata item operationId: detectCredits - description: Start credit detection on a metadata item + summary: Credit detect a metadata item tags: - Library + description: Start credit detection on a metadata item security: - token: - admin @@ -6567,14 +8414,14 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/extras: get: - summary: Get an item's extras operationId: getExtras - description: Get the extras for a metadata item + summary: Get an item's extras tags: - Library + description: Get the extras for a metadata item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6607,13 +8454,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" post: - summary: Add to an item's extras operationId: addExtras - description: Add an extra to a metadata item + summary: Add to an item's extras tags: - Library + description: Add an extra to a metadata item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6626,6 +8473,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/title" - name: ids in: path required: true @@ -6642,21 +8490,20 @@ paths: required: true schema: type: string - - $ref: '#/components/parameters/title' responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '404': description: Either the metadata item is not present or the extra could not be added content: text/html: {} /library/metadata/{ids}/file: get: - summary: Get a file from a metadata or media bundle operationId: getFile - description: Get a bundle file for a metadata or media item. This is either an image or a mp3 (for a show's theme) + summary: Get a file from a metadata or media bundle tags: - Library + description: Get a bundle file for a metadata or media item. This is either an image or a mp3 (for a show's theme) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6685,19 +8532,19 @@ paths: content: audio/mpeg3: schema: - format: binary type: string + format: binary image/jpeg: schema: - format: binary type: string + format: binary /library/metadata/{ids}/index: put: - summary: Start BIF generation of an item operationId: startBifGeneration - description: Start the indexing (BIF generation) of an item + summary: Start BIF generation of an item tags: - Library + description: Start the indexing (BIF generation) of an item security: - token: - admin @@ -6725,14 +8572,14 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/intro: put: - summary: Intro detect an item operationId: detectIntros - description: Start the detection of intros in a metadata item + summary: Intro detect an item tags: - Library + description: Start the detection of intros in a metadata item security: - token: - admin @@ -6767,14 +8614,14 @@ paths: type: number responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/marker: post: - summary: Create a marker operationId: createMarker - description: Create a marker for this user on the metadata item + summary: Create a marker tags: - Library + description: Create a marker for this user on the metadata item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6823,43 +8670,43 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - additionalProperties: true + - $ref: "#/components/schemas/MediaContainer" + - type: object + additionalProperties: true properties: - color: - type: string - endTimeOffset: - type: integer - id: - type: integer - startTimeOffset: - type: integer title: type: string type: + type: string enum: - intro - commercial - bookmark - resume - credit + color: type: string - type: object - type: object + endTimeOffset: + type: integer + id: + type: integer + startTimeOffset: + type: integer '400': description: Request parameters are bad, such as an `endTimeOffset` prior to the `startTimeOffset` content: text/html: {} /library/metadata/{ids}/match: put: - summary: Match a metadata item operationId: matchItem - description: Match a metadata item to a guid + summary: Match a metadata item tags: - Library + description: Match a metadata item to a guid security: - token: - admin @@ -6896,14 +8743,14 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/matches: put: - summary: Get metadata matches for an item operationId: listMatches - description: Get the list of metadata matches for a metadata item + summary: Get metadata matches for an item tags: - Library + description: Get the list of metadata matches for a metadata item security: - token: - admin @@ -6959,14 +8806,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/metadata/{ids}/merge: put: - summary: Merge a metadata item operationId: mergeItems - description: Merge a metadata item with other items + summary: Merge a metadata item tags: - Library + description: Merge a metadata item with other items security: - token: - admin @@ -6996,14 +8843,14 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/nearest: get: - summary: Get nearest tracks to metadata item operationId: listSonicallySimilar - description: Get the nearest tracks, sonically, to the provided track + summary: Get nearest tracks to metadata item tags: - Library + description: Get the nearest tracks, sonically, to the provided track parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7047,14 +8894,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/metadata/{ids}/prefs: put: - summary: Set metadata preferences operationId: setItemPreferences - description: Set the preferences on a metadata item + summary: Set metadata preferences tags: - Library + description: Set the preferences on a metadata item security: - token: - admin @@ -7081,14 +8928,14 @@ paths: type: object responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/refresh: put: - summary: Refresh a metadata item operationId: refreshItemsMetadata - description: Refresh a metadata item from the agent + summary: Refresh a metadata item tags: - Library + description: Refresh a metadata item from the agent security: - token: - admin @@ -7121,14 +8968,14 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/related: get: - summary: Get related items operationId: getRelatedItems - description: Get a hub of related items to a metadata item + summary: Get related items tags: - Library + description: Get a hub of related items to a metadata item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7152,24 +8999,24 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Hub: - items: - $ref: '#/components/schemas/Hub' type: array - type: object - type: object + items: + $ref: "#/components/schemas/Hub" /library/metadata/{ids}/similar: get: - summary: Get similar items operationId: listSimilar - description: Get a list of similar items to a metadata item + summary: Get similar items tags: - Library + description: Get a list of similar items to a metadata item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7182,26 +9029,26 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/count" - name: ids in: path required: true schema: type: string - - $ref: '#/components/parameters/count' responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/metadata/{ids}/split: put: - summary: Split a metadata item operationId: splitItem - description: Split a metadata item into multiple items + summary: Split a metadata item tags: - Library + description: Split a metadata item into multiple items security: - token: - admin @@ -7224,14 +9071,14 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/subtitles: get: - summary: Add subtitles operationId: addSubtitles - description: Add a subtitle to a metadata item + summary: Add subtitles tags: - Library + description: Add a subtitle to a metadata item security: - token: - admin @@ -7290,14 +9137,14 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/tree: get: - summary: Get metadata items as a tree operationId: getItemTree - description: Get a tree of metadata items, such as the seasons/episodes of a show + summary: Get metadata items as a tree tags: - Library + description: Get a tree of metadata items, such as the seasons/episodes of a show parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7321,14 +9168,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithNestedMetadata' + $ref: "#/components/schemas/MediaContainerWithNestedMetadata" /library/metadata/{ids}/unmatch: put: - summary: Unmatch a metadata item operationId: unmatch - description: Unmatch a metadata item to info fetched from the agent + summary: Unmatch a metadata item tags: - Library + description: Unmatch a metadata item to info fetched from the agent security: - token: - admin @@ -7351,14 +9198,14 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/users/top: get: - summary: Get metadata top users operationId: listTopUsers - description: Get the list of users which have played this item starting with the most + summary: Get metadata top users tags: - Library + description: Get the list of users which have played this item starting with the most security: - token: - admin @@ -7385,29 +9232,29 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Account: + type: array items: + type: object properties: globalViewCount: type: integer id: type: integer - type: object - type: array - type: object - type: object /library/metadata/{ids}/voiceActivity: put: - summary: Detect voice activity operationId: detectVoiceActivity - description: Start the detection of voice in a metadata item + summary: Detect voice activity tags: - Library + description: Start the detection of voice in a metadata item security: - token: - admin @@ -7442,14 +9289,14 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/augmentations/{augmentationId}: get: - summary: Get augmentation status operationId: getAugmentationStatus - description: Get augmentation status and potentially wait for completion + summary: Get augmentation status tags: - Library + description: Get augmentation status and potentially wait for completion parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7475,7 +9322,7 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '204': - $ref: '#/components/responses/204' + $ref: "#/components/responses/204" '401': description: This augmentation is not owned by the requesting user content: @@ -7486,11 +9333,11 @@ paths: text/html: {} /library/parts/{partId}: put: - summary: Set stream selection operationId: setStreamSelection - description: Set which streams (audio/subtitle) are selected by this user + summary: Set stream selection tags: - Library + description: Set which streams (audio/subtitle) are selected by this user parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7526,18 +9373,18 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: One of the audio or subtitle streams does not belong to this part content: text/html: {} /library/people/{personId}: get: - summary: Get person details operationId: getPerson - description: Get details for a single actor. + summary: Get person details tags: - Library + description: Get details for a single actor. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7562,26 +9409,26 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Directory: - items: - $ref: '#/components/schemas/Tag' type: array - type: object - type: object + items: + $ref: "#/components/schemas/Tag" '404': - $ref: '#/components/responses/404' + $ref: "#/components/responses/404" /library/people/{personId}/media: get: - summary: Get media for a person operationId: listPersonMedia - description: Get all the media for a single actor. + summary: Get media for a person tags: - Library + description: Get all the media for a single actor. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7606,16 +9453,16 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" '404': - $ref: '#/components/responses/404' + $ref: "#/components/responses/404" /library/sections/{sectionId}: delete: - summary: Delete a library section operationId: deleteLibrarySection - description: Delete a library section by id + summary: Delete a library section tags: - Library + description: Delete a library section by id security: - token: - admin @@ -7644,13 +9491,13 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" get: - summary: Get a library section by id operationId: getLibraryDetails - description: 'Returns details for the library. This can be thought of as an interstitial endpoint because it contains information about the library, rather than content itself. It often contains a list of `Directory` metadata objects: These used to be used by clients to build a menuing system.' + summary: Get a library section by id tags: - Library + description: 'Returns details for the library. This can be thought of as an interstitial endpoint because it contains information about the library, rather than content itself. It often contains a list of `Directory` metadata objects: These used to be used by clients to build a menuing system.' parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7682,7 +9529,12 @@ paths: schema: properties: MediaContainer: + type: object properties: + allowSync: + type: boolean + art: + type: string content: description: |- The flavors of directory found here: @@ -7690,14 +9542,10 @@ paths: - Secondary: These are marked with `"secondary": true` and were used by old clients to provide nested menus allowing for primative (but structured) navigation. - Special: There is a By Folder entry which allows browsing the media by the underlying filesystem structure, and there's a completely obsolete entry marked `"search": true` which used to be used to allow clients to build search dialogs on the fly. type: string - allowSync: - type: boolean - art: - type: string Directory: - items: - $ref: '#/components/schemas/Metadata' type: array + items: + $ref: "#/components/schemas/Metadata" identifier: type: string librarySectionID: @@ -7718,13 +9566,12 @@ paths: type: string viewMode: type: integer - type: object put: - summary: Edit a library section operationId: editSection - description: Edit a library section by id setting parameters + summary: Edit a library section tags: - Library + description: Edit a library section by id setting parameters security: - token: - admin @@ -7793,18 +9640,18 @@ paths: hidden: 0 responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: Section cannot be created due to bad parameters in request content: text/html: {} /library/sections/{sectionId}/albums: get: - summary: Set section albums operationId: getAlbums - description: Get all albums in a music section + summary: Set section albums tags: - Content + description: Get all albums in a music section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7829,7 +9676,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" example: MediaContainer: content: secondary @@ -7853,7 +9700,7 @@ paths: librarySectionTitle: Music librarySectionUUID: d7fd8c81-a345-4e68-8113-92f23cb47e70 loudnessAnalysisVersion: '2' - originallyAvailableAt: '2014-07-15' + originallyAvailableAt: "2014-07-15T00:00:00.000Z" parentGuid: plex://artist/5d07bbfc403c6402904a60e7 parentKey: /library/metadata/251 parentRatingKey: '251' @@ -7877,11 +9724,11 @@ paths: viewGroup: album /library/sections/{sectionId}/all: get: - summary: Get items in the section operationId: listContent - description: Get the items in a section, potentially filtering them + summary: Get items in the section tags: - Content + description: Get the items in a section, potentially filtering them parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7896,17 +9743,15 @@ paths: - $ref: "#/components/parameters/X-Plex-Marketplace" - $ref: "#/components/parameters/X-Plex-Container-Start" - $ref: "#/components/parameters/X-Plex-Container-Size" - - $ref: '#/components/parameters/mediaQuery' + - $ref: "#/components/parameters/mediaQuery" - name: includeMeta + description: Adds the Meta object to the response in: query - description: | - Adds the Meta object to the response schema: $ref: "#/components/schemas/BoolInt" - name: includeGuids + description: Adds the Guid object to the response in: query - description: | - Adds the Guid object to the response schema: $ref: "#/components/schemas/BoolInt" - name: sectionId @@ -7915,22 +9760,73 @@ paths: required: true schema: type: string - + - name: includeExternalMedia + description: Include external/online media in the response + in: query + schema: + type: boolean + - name: includeExtras + description: Include trailers, behind-the-scenes, and other extras + in: query + schema: + type: boolean + - name: includeRelated + description: Include related items in the response + in: query + schema: + type: boolean + - name: includeOnDeck + description: Include On Deck status in the response + in: query + schema: + type: boolean + - name: includePopularLeaves + description: Include popular episodes in the response + in: query + schema: + type: boolean + - name: includeReviews + description: Include user reviews in the response + in: query + schema: + type: boolean + - name: includeStations + description: Include radio station data in the response + in: query + schema: + type: boolean + - name: checkFiles + description: Verify file existence on disk + in: query + schema: + type: boolean + - name: excludeElements + description: Comma-separated list of elements to exclude from the response + in: query + schema: + type: string + - name: excludeFields + description: Comma-separated list of fields to exclude from the response + in: query + schema: + type: string responses: '200': description: OK headers: X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" put: - summary: Set the fields of the filtered items operationId: updateItems + summary: Set the fields of the filtered items + tags: + - Library description: |- This endpoint takes an large possible set of values. Here are some examples. - **Parameters, extra documentation** @@ -7977,8 +9873,6 @@ paths: - Technically square brackets are not allowed in an URI except the Internet Protocol Literal Address - RFC3513: A host identified by an Internet Protocol literal address, version 6 [RFC3513] or later, is distinguished by enclosing the IP literal within square brackets ("[" and "]"). This is the only place where square bracket characters are allowed in the URI syntax. - Escaped square brackets are allowed, but don't render well - tags: - - Library parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8063,7 +9957,7 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: The set of parameters are inconsistent or invalid values content: @@ -8078,11 +9972,11 @@ paths: text/html: {} /library/sections/{sectionId}/allLeaves: get: - summary: Set section leaves operationId: getAllLeaves - description: Get all leaves in a section (such as episodes in a show section) + summary: Set section leaves tags: - Content + description: Get all leaves in a section (such as episodes in a show section) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8107,7 +10001,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" example: MediaContainer: content: secondary @@ -8160,7 +10054,7 @@ paths: videoProfile: main videoResolution: '480' width: 720 - originallyAvailableAt: '1997-02-17' + originallyAvailableAt: "1997-02-17T00:00:00.000Z" parentGuid: plex://season/602e691b66dfdb002c0a5034 parentIndex: 4 parentKey: /library/metadata/149 @@ -8189,11 +10083,11 @@ paths: viewGroup: show /library/sections/{sectionId}/analyze: put: - summary: Analyze a section operationId: startAnalysis - description: Start analysis of all items in a section. If BIF generation is enabled, this will also be started on this section + summary: Analyze a section tags: - Library + description: Start analysis of all items in a section. If BIF generation is enabled, this will also be started on this section security: - token: - admin @@ -8217,14 +10111,14 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/sections/{sectionId}/arts: get: - summary: Set section artwork operationId: getArts - description: Get artwork for a library section + summary: Set section artwork tags: - Content + description: Get artwork for a library section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8249,16 +10143,16 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithArtwork' + $ref: "#/components/schemas/MediaContainerWithArtwork" /library/sections/{sectionId}/autocomplete: get: - summary: Get autocompletions for search operationId: autocomplete + summary: Get autocompletions for search + tags: + - Library description: |- The field to autocomplete on is specified by the `{field}.query` parameter. For example `genre.query` or `title.query`. Returns a set of items from the filtered items whose `{field}` starts with `{field}.query`. In the results, a `{field}.queryRange` will be present to express the range of the match - tags: - - Library parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8271,6 +10165,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/mediaQuery" - name: sectionId description: Section identifier in: path @@ -8287,7 +10182,6 @@ paths: in: query schema: type: string - - $ref: '#/components/parameters/mediaQuery' responses: '200': description: OK @@ -8303,18 +10197,18 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': description: A paramater is either invalid or missing content: text/html: {} /library/sections/{sectionId}/categories: get: - summary: Set section categories operationId: getCategories - description: Get categories in a library section + summary: Set section categories tags: - Content + description: Get categories in a library section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8339,14 +10233,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithArtwork' + $ref: "#/components/schemas/MediaContainerWithArtwork" /library/sections/{sectionId}/cluster: get: - summary: Set section clusters operationId: getCluster - description: Get clusters in a library section (typically for photos) + summary: Set section clusters tags: - Content + description: Get clusters in a library section (typically for photos) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8371,14 +10265,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithArtwork' + $ref: "#/components/schemas/MediaContainerWithArtwork" /library/sections/{sectionId}/collections: get: - summary: Get collections in a section operationId: getCollections - description: Get all collections in a section + summary: Get collections in a section tags: - Library + description: Get all collections in a section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8391,13 +10285,13 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/mediaQuery" - name: sectionId description: Section identifier in: path required: true schema: type: integer - - $ref: '#/components/parameters/mediaQuery' responses: '200': description: OK @@ -8413,16 +10307,16 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/sections/{sectionId}/common: get: - summary: Get common fields for items operationId: getCommon + summary: Get common fields for items + tags: + - Library description: |- Represents a "Common" item. It contains only the common attributes of the items selected by the provided filter Fields which are not common will be expressed in the `mixedFields` field - tags: - - Library parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8435,6 +10329,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/mediaQuery" - name: sectionId description: Section identifier in: path @@ -8446,7 +10341,6 @@ paths: in: query schema: type: integer - - $ref: '#/components/parameters/mediaQuery' responses: '200': description: OK @@ -8462,18 +10356,18 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': - $ref: '#/components/responses/404' + $ref: "#/components/responses/404" /library/sections/{sectionId}/computePath: get: - summary: Similar tracks to transition from one to another operationId: getSonicPath - description: Get a list of audio tracks starting at one and ending at another which are similar across the path + summary: Similar tracks to transition from one to another tags: - Content + description: Get a list of audio tracks starting at one and ending at another which are similar across the path parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8486,6 +10380,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/count" - name: sectionId description: Section identifier in: path @@ -8504,7 +10399,6 @@ paths: required: true schema: type: integer - - $ref: '#/components/parameters/count' - name: maxDistance description: The maximum distance allowed along the path; defaults to 0.25 in: query @@ -8516,14 +10410,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/sections/{sectionId}/emptyTrash: put: - summary: Empty section trash operationId: emptyTrash - description: Empty trash in the section, permanently deleting media/metadata for missing media + summary: Empty section trash tags: - Library + description: Empty trash in the section, permanently deleting media/metadata for missing media security: - token: - admin @@ -8547,14 +10441,14 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/sections/{sectionId}/filters: get: - summary: Get section filters operationId: getSectionFilters - description: Get common filters on a section + summary: Get section filters tags: - Library + description: Get common filters on a section security: - token: - admin @@ -8582,24 +10476,24 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Directory: - items: - $ref: '#/components/schemas/Directory' type: array - type: object - type: object + items: + $ref: "#/components/schemas/Directory" /library/sections/{sectionId}/firstCharacters: get: - summary: Get list of first characters operationId: getFirstCharacters - description: Get list of first characters in this section + summary: Get list of first characters tags: - Library + description: Get list of first characters in this section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8612,6 +10506,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/mediaQuery" - name: sectionId description: Section identifier in: path @@ -8628,39 +10523,38 @@ paths: in: query schema: type: integer - - $ref: '#/components/parameters/mediaQuery' responses: '200': description: OK content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Directory: + type: array items: + type: object properties: + title: + type: string key: type: string size: description: The number of items starting with this character type: integer - title: - type: string - type: object - type: array - type: object - type: object /library/sections/{sectionId}/indexes: delete: - summary: Delete section indexes operationId: deleteIndexes - description: Delete all the indexes in a section + summary: Delete section indexes tags: - Library + description: Delete all the indexes in a section security: - token: - admin @@ -8684,14 +10578,14 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/sections/{sectionId}/intros: delete: - summary: Delete section intro markers operationId: deleteIntros - description: Delete all the intro markers in a section + summary: Delete section intro markers tags: - Library + description: Delete all the intro markers in a section security: - token: - admin @@ -8715,14 +10609,14 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/sections/{sectionId}/location: get: - summary: Get all folder locations operationId: getFolders - description: Get all folder locations of the media in a section + summary: Get all folder locations tags: - Content + description: Get all folder locations of the media in a section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8747,31 +10641,31 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Directory: + type: array items: + type: object properties: + title: + type: string fastKey: type: string key: type: string - title: - type: string - type: object - type: array - type: object - type: object /library/sections/{sectionId}/moment: get: - summary: Set section moments operationId: listMoments - description: Get moments in a library section (typically for photos) + summary: Set section moments tags: - Content + description: Get moments in a library section (typically for photos) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8796,14 +10690,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithArtwork' + $ref: "#/components/schemas/MediaContainerWithArtwork" /library/sections/{sectionId}/nearest: get: - summary: The nearest audio tracks operationId: getSonicallySimilar - description: Get the nearest audio tracks to a particular analysis + summary: The nearest audio tracks tags: - Content + description: Get the nearest audio tracks to a particular analysis parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8835,9 +10729,9 @@ paths: schema: type: array items: - maximum: 50 - minimum: 50 type: integer + minimum: 50 + maximum: 50 - name: limit description: The limit of the number of items to fetch; defaults to 50 in: query @@ -8854,14 +10748,45 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/sections/{sectionId}/onDeck: + get: + operationId: getOnDeck + summary: Get On Deck + tags: + - Library + description: Get On Deck items for a library section. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: On Deck items + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/sections/{sectionId}/prefs: get: - summary: Get section prefs operationId: getSectionPreferences - description: Get the prefs for a section by id and potentially overriding the agent + summary: Get section prefs tags: - Library + description: Get the prefs for a section by id and potentially overriding the agent parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8890,13 +10815,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSettings' + $ref: "#/components/schemas/MediaContainerWithSettings" put: - summary: Set section prefs operationId: setSectionPreferences - description: Set the prefs for a section by id + summary: Set section prefs tags: - Library + description: Set the prefs for a section by id security: - token: - admin @@ -8928,14 +10853,45 @@ paths: hidden: 0 responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + /library/sections/{sectionId}/recentlyAdded: + get: + operationId: getRecentlyAddedBySection + summary: Get Recently Added by Section + tags: + - Library + description: Get recently added items for a specific library section. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: Recently added items + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/sections/{sectionId}/refresh: delete: - summary: Cancel section refresh operationId: cancelRefresh - description: Cancel the refresh of a section + summary: Cancel section refresh tags: - Library + description: Cancel the refresh of a section security: - token: - admin @@ -8959,13 +10915,13 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" post: - summary: Refresh section operationId: refreshSection - description: Start a refresh of this section + summary: Refresh section tags: - Library + description: Start a refresh of this section security: - token: - admin @@ -8999,14 +10955,14 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/sections/{sectionId}/sorts: get: - summary: Get a section sorts operationId: getAvailableSorts - description: Get the sort mechanisms available in a section + summary: Get a section sorts tags: - Library + description: Get the sort mechanisms available in a section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9031,24 +10987,24 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Directory: - items: - $ref: '#/components/schemas/Sort' type: array - type: object - type: object + items: + $ref: "#/components/schemas/Sort" /library/streams/{streamId}/levels: get: - summary: Get loudness about a stream in json operationId: getStreamLevels - description: The the loudness of a stream in db, one entry per 100ms + summary: Get loudness about a stream in json tags: - Library + description: The the loudness of a stream in db, one entry per 100ms parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9078,35 +11034,35 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Level: + type: array items: + type: object properties: v: description: The level in db. type: number - type: object - type: array totalSamples: description: The total number of samples (as a string) type: string - type: object - type: object '403': - $ref: '#/components/responses/responses-403' + $ref: "#/components/responses/responses-403" '404': - $ref: '#/components/responses/responses-404' + $ref: "#/components/responses/responses-404" /library/streams/{streamId}/loudness: get: - summary: Get loudness about a stream operationId: getStreamLoudness - description: The the loudness of a stream in db, one number per line, one entry per 100ms + summary: Get loudness about a stream tags: - Library + description: The the loudness of a stream in db, one number per line, one entry per 100ms parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9147,11 +11103,11 @@ paths: text/html: {} /livetv/dvrs/{dvrId}: delete: - summary: Delete a single DVR operationId: deleteDVR - description: Delete a single DVR by its id (key) + summary: Delete a single DVR tags: - DVRs + description: Delete a single DVR by its id (key) security: - token: - admin @@ -9175,13 +11131,13 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" get: - summary: Get a single DVR operationId: getDVR - description: Get a single DVR by its id (key) + summary: Get a single DVR tags: - DVRs + description: Get a single DVR by its id (key) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9215,18 +11171,22 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: + - $ref: "#/components/schemas/MediaContainerWithStatus" + - type: object + properties: DVR: + type: array items: + type: object properties: Device: - items: - $ref: '#/components/schemas/Device' type: array + items: + $ref: "#/components/schemas/Device" key: type: string language: @@ -9235,17 +11195,13 @@ paths: type: string uuid: type: string - type: object - type: array - type: object - type: object /livetv/dvrs/{dvrId}/lineups: delete: - summary: Delete a DVR Lineup operationId: deleteLineup - description: Deletes a DVR device's lineup. + summary: Delete a DVR Lineup tags: - DVRs + description: Deletes a DVR device's lineup. security: - token: - admin @@ -9288,18 +11244,22 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: + - $ref: "#/components/schemas/MediaContainerWithStatus" + - type: object + properties: DVR: + type: array items: + type: object properties: Device: - items: - $ref: '#/components/schemas/Device' type: array + items: + $ref: "#/components/schemas/Device" key: type: string language: @@ -9308,16 +11268,12 @@ paths: type: string uuid: type: string - type: object - type: array - type: object - type: object put: - summary: Add a DVR Lineup operationId: addLineup - description: Add a lineup to a DVR device's set of lineups. + summary: Add a DVR Lineup tags: - DVRs + description: Add a lineup to a DVR device's set of lineups. security: - token: - admin @@ -9360,18 +11316,22 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: + - $ref: "#/components/schemas/MediaContainerWithStatus" + - type: object + properties: DVR: + type: array items: + type: object properties: Device: - items: - $ref: '#/components/schemas/Device' type: array + items: + $ref: "#/components/schemas/Device" key: type: string language: @@ -9380,17 +11340,13 @@ paths: type: string uuid: type: string - type: object - type: array - type: object - type: object /livetv/dvrs/{dvrId}/prefs: put: - summary: Set DVR preferences operationId: setDVRPreferences - description: Set DVR preferences by name avd value + summary: Set DVR preferences tags: - DVRs + description: Set DVR preferences by name avd value security: - token: - admin @@ -9432,18 +11388,22 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: + - $ref: "#/components/schemas/MediaContainerWithStatus" + - type: object + properties: DVR: + type: array items: + type: object properties: Device: - items: - $ref: '#/components/schemas/Device' type: array + items: + $ref: "#/components/schemas/Device" key: type: string language: @@ -9452,17 +11412,13 @@ paths: type: string uuid: type: string - type: object - type: array - type: object - type: object /livetv/dvrs/{dvrId}/reloadGuide: delete: - summary: Tell a DVR to stop reloading program guide operationId: stopDVRReload - description: Tell a DVR to stop reloading program guide + summary: Tell a DVR to stop reloading program guide tags: - DVRs + description: Tell a DVR to stop reloading program guide security: - token: - admin @@ -9486,13 +11442,13 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" post: - summary: Tell a DVR to reload program guide operationId: reloadGuide - description: Tell a DVR to reload program guide + summary: Tell a DVR to reload program guide tags: - DVRs + description: Tell a DVR to reload program guide security: - token: - admin @@ -9526,11 +11482,11 @@ paths: text/html: {} /livetv/sessions/{sessionId}: get: - summary: Get a single session operationId: getLiveTVSession - description: Get a single livetv session and metadata + summary: Get a single session tags: - Live TV + description: Get a single livetv session and metadata parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9564,14 +11520,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" /media/grabbers/devices/{deviceId}: delete: - summary: Remove a device operationId: removeDevice - description: Remove a devices by its id along with its channel mappings + summary: Remove a device tags: - Devices + description: Remove a devices by its id along with its channel mappings security: - token: - admin @@ -9608,27 +11564,27 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: message: type: string status: type: integer - type: object - type: object '404': description: Device not found content: text/html: {} get: - summary: Get device details operationId: getDeviceDetails - description: Get a device's details by its id + summary: Get device details tags: - Devices + description: Get a device's details by its id security: - token: - admin @@ -9656,17 +11612,17 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDevice' + $ref: "#/components/schemas/MediaContainerWithDevice" '404': description: Device not found content: text/html: {} put: - summary: Enable or disable a device operationId: modifyDevice - description: Enable or disable a device by its id + summary: Enable or disable a device tags: - Devices + description: Enable or disable a device by its id security: - token: - admin @@ -9708,28 +11664,28 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: message: type: string status: type: integer - type: object - type: object '404': description: Device not found content: text/html: {} /media/grabbers/devices/{deviceId}/channelmap: put: - summary: Set a device's channel mapping operationId: setChannelmap - description: Set a device's channel mapping + summary: Set a device's channel mapping tags: - Devices + description: Set a device's channel mapping parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9780,14 +11736,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDevice' + $ref: "#/components/schemas/MediaContainerWithDevice" /media/grabbers/devices/{deviceId}/channels: get: - summary: Get a device's channels operationId: getDevicesChannels - description: Get a device's channels by its id + summary: Get a device's channels tags: - Devices + description: Get a device's channels by its id security: - token: - admin @@ -9824,46 +11780,28 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: DeviceChannel: - items: - properties: - drm: - description: Indicates the channel is DRMed and thus may not be playable - type: boolean - favorite: - type: boolean - hd: - type: boolean - identifier: - type: string - key: - type: string - name: - type: string - signalQuality: - type: integer - signalStrength: - type: integer - type: object type: array - type: object - type: object + items: + $ref: "#/components/schemas/DeviceChannel" '404': description: Device not found content: text/html: {} /media/grabbers/devices/{deviceId}/prefs: put: - summary: Set device preferences operationId: setDevicePreferences - description: Set device preferences by its id + summary: Set device preferences tags: - Devices + description: Set device preferences by its id security: - token: - admin @@ -9892,14 +11830,14 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /media/grabbers/devices/{deviceId}/scan: delete: - summary: Tell a device to stop scanning for channels operationId: stopScan - description: Tell a device to stop scanning for channels + summary: Tell a device to stop scanning for channels tags: - Devices + description: Tell a device to stop scanning for channels parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9924,13 +11862,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDevice' + $ref: "#/components/schemas/MediaContainerWithDevice" post: - summary: Tell a device to scan for channels operationId: scan - description: Tell a device to scan for channels + summary: Tell a device to scan for channels tags: - Devices + description: Tell a device to scan for channels parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9966,16 +11904,16 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDevice' + $ref: "#/components/schemas/MediaContainerWithDevice" /media/grabbers/operations/{operationId}: delete: - summary: Cancel an existing grab operationId: cancelGrab + summary: Cancel an existing grab + tags: + - Subscriptions description: |- Cancels an existing media grab (recording). It can be used to resolve a conflict which exists for a rolling subscription. Note: This cancellation does not persist across a server restart, but neither does a rolling subscription itself. - tags: - - Subscriptions parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9996,20 +11934,20 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '403': description: User is not owner of the grab and not the admin content: text/html: {} '404': - $ref: '#/components/responses/404' + $ref: "#/components/responses/404" /media/providers/{provider}: delete: - summary: Delete a media provider operationId: deleteMediaProvider - description: Deletes a media provider with the given id + summary: Delete a media provider tags: - Provider + description: Deletes a media provider with the given id parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10030,20 +11968,20 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '403': description: Cannot delete a provider which is a child of another provider content: text/html: {} /media/subscriptions/{subscriptionId}: delete: - summary: Delete a subscription operationId: deleteSubscription - description: Delete a subscription, cancelling all of its grabs as well + summary: Delete a subscription tags: - Subscriptions + description: Delete a subscription, cancelling all of its grabs as well parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10063,21 +12001,21 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '403': description: User cannot access DVR on this server or cannot access this subscription content: text/html: {} '404': - $ref: '#/components/responses/404' + $ref: "#/components/responses/404" get: - summary: Get a single subscription operationId: getSubscription - description: Get a single subscription and potentially the grabs too + summary: Get a single subscription tags: - Subscriptions + description: Get a single subscription and potentially the grabs too parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10111,21 +12049,21 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSubscription' + $ref: "#/components/schemas/MediaContainerWithSubscription" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '403': description: User cannot access DVR on this server or cannot access this subscription content: text/html: {} '404': - $ref: '#/components/responses/404' + $ref: "#/components/responses/404" put: - summary: Edit a subscription operationId: editSubscriptionPreferences - description: Edit a subscription's preferences + summary: Edit a subscription tags: - Subscriptions + description: Edit a subscription's preferences parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10156,22 +12094,22 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSubscription' + $ref: "#/components/schemas/MediaContainerWithSubscription" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '403': description: User cannot access DVR on this server or cannot access this subscription content: text/html: {} '404': - $ref: '#/components/responses/404' + $ref: "#/components/responses/404" /media/subscriptions/{subscriptionId}/move: put: - summary: Re-order a subscription operationId: reorderSubscription - description: Re-order a subscription to change its priority + summary: Re-order a subscription tags: - Subscriptions + description: Re-order a subscription to change its priority security: - token: - admin @@ -10203,22 +12141,91 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSubscription' + $ref: "#/components/schemas/MediaContainerWithSubscription" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '403': description: User cannot access DVR on this server or cannot access this subscription content: text/html: {} '404': - $ref: '#/components/responses/404' + $ref: "#/components/responses/404" + /pins/{pinId}: + get: + operationId: getOAuthPin + summary: Get OAuth PIN Status + tags: + - Authentication + description: Poll the PIN status. Returns authToken when the user has linked the device. + security: + - clientIdentifier: [] + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: pinId + in: path + required: true + schema: + type: integer + responses: + '200': + description: PIN status + content: + application/json: + schema: + type: object + properties: + authToken: + type: string + nullable: true + clientIdentifier: + type: string + code: + type: string + createdAt: + type: string + expiresAt: + type: string + expiresIn: + type: integer + id: + type: integer + newRegistration: + type: boolean + pmsIdentifier: + type: string + nullable: true + pmsVersion: + type: string + nullable: true + product: + type: string + qr: + type: string + trusted: + type: boolean + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /playlists/{playlistId}: delete: - summary: Delete a Playlist operationId: deletePlaylist - description: Deletes a playlist by provided id + summary: Delete a Playlist tags: - Library Playlists + description: Deletes a playlist by provided id parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10239,19 +12246,19 @@ paths: type: integer responses: '204': - $ref: '#/components/responses/204' + $ref: "#/components/responses/204" '404': description: Playlist not found (or user may not have permission to access playlist) content: text/html: {} get: - summary: Retrieve Playlist operationId: getPlaylist + summary: Retrieve Playlist + tags: + - Playlist description: |- Gets detailed metadata for a playlist. A playlist for many purposes (rating, editing metadata, tagging), can be treated like a regular metadata item: Smart playlist details contain the `content` attribute. This is the content URI for the generator. This can then be parsed by a client to provide smart playlist editing. - tags: - - Playlist parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10276,17 +12283,17 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithPlaylistMetadata' + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" '404': description: Playlist not found (or user may not have permission to access playlist) content: text/html: {} put: - summary: Editing a Playlist operationId: updatePlaylist - description: Edits a playlist in the same manner as [editing metadata](#tag/Provider/operation/metadataPutItem) + summary: Editing a Playlist tags: - Library Playlists + description: Edits a playlist in the same manner as [editing metadata](#tag/Provider/operation/metadataPutItem) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10307,18 +12314,18 @@ paths: type: integer responses: '204': - $ref: '#/components/responses/204' + $ref: "#/components/responses/204" '404': description: Playlist not found (or user may not have permission to access playlist) content: text/html: {} /playlists/{playlistId}/generators: get: - summary: Get a playlist's generators operationId: getPlaylistGenerators - description: Get all the generators in a playlist + summary: Get a playlist's generators tags: - Library Playlists + description: Get all the generators in a playlist parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10343,52 +12350,52 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: PlayQueueGenerator: + type: array items: + type: object properties: - changedAt: - type: integer - createdAt: - type: integer - id: - type: integer - playlistID: - type: integer type: - description: | + description: |- The type of playlist generator. - -1: A smart playlist generator - 42: A optimized version generator + type: integer enum: - -1 - 42 + changedAt: + type: integer + createdAt: + type: integer + id: + type: integer + playlistID: type: integer updatedAt: type: integer uri: description: The URI indicating the search for this generator type: string - type: object - type: array - type: object - type: object '404': description: Playlist not found (or user may not have permission to access playlist) or generator not found content: text/html: {} /playlists/{playlistId}/items: delete: - summary: Clearing a playlist operationId: clearPlaylistItems - description: Clears a playlist, only works with dumb playlists. Returns the playlist. + summary: Clearing a playlist tags: - Library Playlists + description: Clears a playlist, only works with dumb playlists. Returns the playlist. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10409,19 +12416,19 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Playlist not found (or user may not have permission to access playlist) content: text/html: {} get: - summary: Retrieve Playlist Contents operationId: getPlaylistItems - description: Gets the contents of a playlist. Should be paged by clients via standard mechanisms. By default leaves are returned (e.g. episodes, movies). In order to return other types you can use the `type` parameter. For example, you could use this to display a list of recently added albums vis a smart playlist. Note that for dumb playlists, items have a `playlistItemID` attribute which is used for deleting or moving items. + summary: Retrieve Playlist Contents tags: - Playlist + description: Gets the contents of a playlist. Should be paged by clients via standard mechanisms. By default leaves are returned (e.g. episodes, movies). In order to return other types you can use the `type` parameter. For example, you could use this to display a list of recently added albums vis a smart playlist. Note that for dumb playlists, items have a `playlistItemID` attribute which is used for deleting or moving items. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10463,17 +12470,17 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" '404': description: Playlist not found (or user may not have permission to access playlist) content: text/html: {} put: - summary: Adding to a Playlist operationId: addPlaylistItems - description: Adds a generator to a playlist, same parameters as the POST above. With a dumb playlist, this adds the specified items to the playlist. With a smart playlist, passing a new `uri` parameter replaces the rules for the playlist. Returns the playlist. + summary: Adding to a Playlist tags: - Library Playlists + description: Adds a generator to a playlist, same parameters as the POST above. With a dumb playlist, this adds the specified items to the playlist. With a smart playlist, passing a new `uri` parameter replaces the rules for the playlist. Returns the playlist. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10504,20 +12511,20 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Playlist not found (or user may not have permission to access playlist) content: text/html: {} /playQueues/{playQueueId}: get: - summary: Retrieve a play queue operationId: getPlayQueue - description: Retrieves the play queue, centered at current item. This can be treated as a regular container by play queue-oblivious clients, but they may wish to request a large window onto the queue since they won't know to refresh. + summary: Retrieve a play queue tags: - Play Queue + description: Retrieves the play queue, centered at current item. This can be treated as a regular container by play queue-oblivious clients, but they may wish to request a large window onto the queue since they won't know to refresh. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10563,19 +12570,19 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Play queue not found content: text/html: {} put: - summary: Add a generator or playlist to a play queue operationId: addToPlayQueue - description: Adds an item to a play queue (e.g. party mode). Increments the version of the play queue. Takes the following parameters (`uri` and `playlistID` are mutually exclusive). Returns the modified play queue. + summary: Add a generator or playlist to a play queue tags: - Play Queue + description: Adds an item to a play queue (e.g. party mode). Increments the version of the play queue. Takes the following parameters (`uri` and `playlistID` are mutually exclusive). Returns the modified play queue. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10611,20 +12618,20 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Play queue not found content: text/html: {} /playQueues/{playQueueId}/items: delete: - summary: Clear a play queue operationId: clearPlayQueue - description: Deletes all items in the play queue, and increases the version of the play queue. + summary: Clear a play queue tags: - Play Queue + description: Deletes all items in the play queue, and increases the version of the play queue. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10649,14 +12656,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithPlaylistMetadata' + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" /playQueues/{playQueueId}/reset: put: - summary: Reset a play queue operationId: resetPlayQueue - description: Reset a play queue to the first item being the current item + summary: Reset a play queue tags: - Play Queue + description: Reset a play queue to the first item being the current item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10677,20 +12684,20 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Play queue not found content: text/html: {} /playQueues/{playQueueId}/shuffle: put: - summary: Shuffle a play queue operationId: shuffle - description: Shuffle a play queue (or reshuffles if already shuffled). The currently selected item is maintained. Note that this is currently only supported for play queues *without* an Up Next area. Returns the modified play queue. + summary: Shuffle a play queue tags: - Play Queue + description: Shuffle a play queue (or reshuffles if already shuffled). The currently selected item is maintained. Note that this is currently only supported for play queues *without* an Up Next area. Returns the modified play queue. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10715,20 +12722,20 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithPlaylistMetadata' + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Play queue not found or current item not found content: text/html: {} /playQueues/{playQueueId}/unshuffle: put: - summary: Unshuffle a play queue operationId: unshuffle - description: Unshuffles a play queue and restores "natural order". Note that this is currently only supported for play queues *without* an Up Next area. Returns the modified play queue. + summary: Unshuffle a play queue tags: - Play Queue + description: Unshuffles a play queue and restores "natural order". Note that this is currently only supported for play queues *without* an Up Next area. Returns the modified play queue. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10749,20 +12756,228 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Play queue not found or current item not found content: text/html: {} + /servers/{machineId}: + get: + operationId: getServerDetails + summary: Get Server Details + tags: + - Users + description: Get server details for sharing. + servers: + - url: https://plex.tv/api + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: machineId + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /servers/{machineId}/shared_servers: + post: + operationId: shareServerLegacy + summary: Share Server (Legacy v1) + tags: + - Users + description: Share a library with a friend (legacy v1 XML endpoint). + servers: + - url: https://plex.tv/api + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: machineId + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /services/browse/{base64path}: + get: + operationId: browseFilesystemPath + summary: Browse Filesystem Path + tags: + - General + description: Browse a specific filesystem path. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: base64path + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + /sharings/{userId}: + delete: + operationId: removeShare + summary: Remove Share + tags: + - Users + description: Remove a share / friend. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: userId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + put: + operationId: updateShare + summary: Update Share + tags: + - Users + description: Update friend filters (allowSync, filterMovies, etc.). + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: userId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /status/sessions/history/{historyId}: delete: - summary: Delete Single History Item operationId: deleteHistory + summary: Delete Single History Item + tags: + - Status description: Delete a single history item by id + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: historyId + description: The id of the history item (the `historyKey` from above) + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainer" + '404': + description: History item not found + content: + text/html: {} + get: + operationId: getHistoryItem + summary: Get Single History Item tags: - Status + description: Get a single history item by id security: - token: - admin @@ -10778,8 +12993,39 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: historyId - description: The id of the history item (the `historyKey` from above) + - name: historyId + description: The id of the history item (the `historyKey` from above) + in: path + required: true + schema: + type: integer + responses: + '200': + $ref: "#/components/responses/historyAll-get-responses-200" + '404': + description: History item not found + content: + text/html: {} + /sync/items/{syncId}: + get: + operationId: getSyncItem + summary: Get Sync Item + tags: + - General + description: Get sync item details. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: syncId in: path required: true schema: @@ -10787,29 +13033,13 @@ paths: responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer - content: - application/json: - schema: - $ref: '#/components/schemas/MediaContainer' - '404': - description: History item not found - content: - text/html: {} + /system/agents/{agentId}: get: - summary: Get Single History Item - operationId: getHistoryItem - description: Get a single history item by id + operationId: getMetadataAgentDetails + summary: Get Metadata Agent Details tags: - - Status + - General + description: Get details and settings for a specific metadata agent. security: - token: - admin @@ -10825,27 +13055,22 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: historyId - description: The id of the history item (the `historyKey` from above) + - name: agentId in: path required: true schema: - type: integer + type: string responses: '200': - $ref: '#/components/responses/historyAll-get-responses-200' - '404': - description: History item not found - content: - text/html: {} + description: OK /{transcodeType}/:/transcode/universal/start.{extension}: get: - summary: Start A Transcoding Session operationId: startTranscodeSession - x-speakeasy-usage-example: true - description: Starts the transcoder and returns the corresponding streaming resource document. + summary: Start A Transcoding Session tags: - Transcoder + x-speakeasy-usage-example: true + description: Starts the transcoder and returns the corresponding streaming resource document. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10858,10 +13083,11 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/transcodeType' - - $ref: '#/components/parameters/transcodeSessionId' + - $ref: "#/components/parameters/transcodeType" + - $ref: "#/components/parameters/transcodeSessionId" + - $ref: "#/components/parameters/advancedSubtitles" - name: extension - description: "Extension \n" + description: Extension in: path required: true schema: @@ -10869,21 +13095,20 @@ paths: enum: - m3u8 - mpd - - $ref: '#/components/parameters/advancedSubtitles' - name: audioBoost description: Percentage of original audio loudness to use when transcoding (100 is equivalent to original volume, 50 is half, 200 is double, etc) in: query schema: - minimum: 1 type: integer + minimum: 1 example: 50 - name: audioChannelCount description: Target video number of audio channels. in: query schema: - maximum: 8 - minimum: 1 type: integer + minimum: 1 + maximum: 8 example: 5 - name: autoAdjustQuality description: Indicates the client supports ABR. @@ -10953,8 +13178,8 @@ paths: description: Target bitrate for audio only files (in kbps, used to transcode). in: query schema: - minimum: 0 type: integer + minimum: 0 example: 5000 - name: offset description: Offset from the start of the media (in seconds). @@ -10978,8 +13203,8 @@ paths: description: Maximum bitrate (in kbps) to use in ABR. in: query schema: - minimum: 0 type: integer + minimum: 0 example: 12000 - name: photoResolution description: Target photo resolution. @@ -10989,8 +13214,7 @@ paths: pattern: ^\d[x:]\d$ example: 1080x1080 - name: protocol - description: | - Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022) + description: "Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022)" in: query schema: type: string @@ -11009,12 +13233,11 @@ paths: description: Percentage of original subtitle size to use when burning subtitles (100 is equivalent to original size, 50 is half, ect) in: query schema: - minimum: 1 type: integer + minimum: 1 example: 50 - name: subtitles - description: | - Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream + description: "Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream" in: query schema: type: string @@ -11031,16 +13254,16 @@ paths: description: Target video bitrate (in kbps). in: query schema: - minimum: 0 type: integer + minimum: 0 example: 12000 - name: videoQuality description: Target photo quality. in: query schema: - maximum: 99 - minimum: 0 type: integer + minimum: 0 + maximum: 99 example: 50 - name: videoResolution description: Target maximum video resolution. @@ -11135,24 +13358,24 @@ paths: video/x-matroska: schema: - format: binary type: string + format: binary '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '403': - $ref: '#/components/responses/403' + $ref: "#/components/responses/403" '404': - $ref: '#/components/responses/404' + $ref: "#/components/responses/404" /downloadQueue/{queueId}/item/{itemId}/decision: get: - summary: Grab download queue item decision operationId: getItemDecision - description: | + summary: Grab download queue item decision + tags: + - Download Queue + description: |- Available: 0.2.0 Grab the decision for a download queue item - tags: - - Download Queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11184,21 +13407,21 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDecision' + $ref: "#/components/schemas/MediaContainerWithDecision" '400': description: The item is not in a state where a decision is available content: text/html: {} /downloadQueue/{queueId}/item/{itemId}/media: get: - summary: Grab download queue media operationId: getDownloadQueueMedia - description: | + summary: Grab download queue media + tags: + - Download Queue + description: |- Available: 0.2.0 Grab the media for a download queue item - tags: - - Download Queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11228,7 +13451,7 @@ paths: '200': description: The raw media file '503': - description: | + description: |- ![503](https://http.cat/503.jpg) The queue item is not yet complete and is currently transcoding or waiting to transcode @@ -11239,11 +13462,11 @@ paths: type: integer /downloadQueue/{queueId}/items/{itemId}: delete: - summary: Delete download queue items operationId: removeDownloadQueueItems - description: delete items from a download queue + summary: Delete download queue items tags: - Download Queue + description: delete items from a download queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11277,16 +13500,16 @@ paths: - 23 responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" get: - summary: Get download queue items operationId: getDownloadQueueItems - description: | + summary: Get download queue items + tags: + - Download Queue + description: |- Available: 0.2.0 Get items from a download queue - tags: - - Download Queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11327,12 +13550,16 @@ paths: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: DownloadQueueItem: + type: array items: + type: object properties: DecisionResult: + type: object properties: availableBandwidth: description: The maximum bitrate set when item was added @@ -11355,7 +13582,6 @@ paths: type: integer transcodeDecisionText: type: string - type: object error: description: The error encountered in transcoding or decision type: string @@ -11366,7 +13592,7 @@ paths: queueId: type: integer status: - description: | + description: |- The state of the item: - deciding: The item decision is pending - waiting: The item is waiting for transcode @@ -11374,6 +13600,7 @@ paths: - available: The item is available for download - error: The item encountered an error in the decision or transcode - expired: The transcoded item has timed out and is no longer available + type: string enum: - deciding - waiting @@ -11381,25 +13608,21 @@ paths: - available - error - expired - type: string transcode: description: The transcode session object which is not yet documented otherwise it'd be a $ref here. type: object TranscodeSession: - $ref: '#/components/schemas/TranscodeSession' - type: object - type: array - type: object + $ref: "#/components/schemas/TranscodeSession" /downloadQueue/{queueId}/items/{itemId}/restart: post: - summary: Restart processing of items from the decision operationId: restartProcessingDownloadQueueItems - description: | + summary: Restart processing of items from the decision + tags: + - Download Queue + description: |- Available: 0.2.0 Reprocess download queue items with previous decision parameters - tags: - - Download Queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11433,14 +13656,14 @@ paths: - 23 responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /hubs/sections/{sectionId}/manage/{identifier}: delete: - summary: Delete a custom hub operationId: deleteCustomHub - description: Delete a custom hub from the server + summary: Delete a custom hub tags: - Hubs + description: Delete a custom hub from the server security: - token: - admin @@ -11470,23 +13693,23 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: The hub is not a custom hub content: text/html: {} '403': - $ref: '#/components/responses/403' + $ref: "#/components/responses/403" '404': description: The section or hub was not found content: text/html: {} put: - summary: Change hub visibility operationId: updateHubVisibility - description: Changed the visibility of a hub for both the admin and shared users + summary: Change hub visibility tags: - Hubs + description: Changed the visibility of a hub for both the admin and shared users security: - token: - admin @@ -11531,20 +13754,20 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '403': - $ref: '#/components/responses/403' + $ref: "#/components/responses/403" '404': description: Section id was not found content: text/html: {} /library/collections/{collectionId}/composite/{updatedAt}: get: - summary: Get a collection's image operationId: getCollectionImage - description: Get an image for the collection based on the items within + summary: Get a collection's image tags: - Content + description: Get an image for the collection based on the items within parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11557,6 +13780,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/composite" - name: collectionId description: The collection id in: path @@ -11569,26 +13793,25 @@ paths: required: true schema: type: integer - - $ref: '#/components/parameters/composite' responses: '200': description: OK content: image/jpeg: schema: - format: binary type: string + format: binary '404': description: Collection not found content: text/html: {} /library/collections/{collectionId}/items/{itemId}: put: - summary: Delete an item from a collection operationId: deleteCollectionItem - description: Delete an item from a collection + summary: Delete an item from a collection tags: - Library Collections + description: Delete an item from a collection security: - token: - admin @@ -11622,7 +13845,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': description: Item not found content: @@ -11633,11 +13856,11 @@ paths: text/html: {} /library/collections/{collectionId}/items/{itemId}/move: put: - summary: Reorder an item in the collection operationId: moveCollectionItem - description: Reorder items in a collection with one item after another + summary: Reorder an item in the collection tags: - Library Collections + description: Reorder items in a collection with one item after another security: - token: - admin @@ -11676,7 +13899,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': description: Item not found content: @@ -11687,11 +13910,11 @@ paths: text/html: {} /library/media/{mediaId}/chapterImages/{chapter}: get: - summary: Get a chapter image operationId: getChapterImage - description: Get a single chapter image for a piece of media + summary: Get a chapter image tags: - Library + description: Get a single chapter image for a piece of media parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11722,21 +13945,21 @@ paths: content: image/jpeg: schema: - format: binary type: string + format: binary '404': description: Either the media item or the chapter image was not found content: text/html: {} /library/metadata/{ids}/{element}: post: - summary: Set an item's artwork, theme, etc operationId: setItemArtwork + summary: Set an item's artwork, theme, etc + tags: + - Library description: |- Set the artwork, thumb, element for a metadata item Generally only the admin can perform this action. The exception is if the metadata is a playlist created by the user - tags: - - Library parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11773,15 +13996,15 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" put: - summary: Set an item's artwork, theme, etc operationId: updateItemArtwork + summary: Set an item's artwork, theme, etc + tags: + - Library description: |- Set the artwork, thumb, element for a metadata item Generally only the admin can perform this action. The exception is if the metadata is a playlist created by the user - tags: - - Library parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11818,14 +14041,14 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/metadata/{ids}/marker/{marker}: delete: - summary: Delete a marker operationId: deleteMarker - description: Delete a marker for this user on the metadata item + summary: Delete a marker tags: - Library + description: Delete a marker for this user on the metadata item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11850,7 +14073,7 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: Marker is not a bookmark content: @@ -11860,11 +14083,11 @@ paths: content: text/html: {} put: - summary: Edit a marker operationId: editMarker - description: Edit a marker for this user on the metadata item + summary: Edit a marker tags: - Library + description: Edit a marker for this user on the metadata item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11915,20 +14138,20 @@ paths: title: My favorite spot responses: '200': - $ref: '#/components/responses/post-responses-200' + $ref: "#/components/responses/post-responses-200" '400': - $ref: '#/components/responses/responses-400' + $ref: "#/components/responses/responses-400" '404': description: The marker could not be found content: text/html: {} /library/metadata/{ids}/media/{mediaItem}: delete: - summary: Delete a media item operationId: deleteMediaItem - description: Delete a single media from a metadata item in the library + summary: Delete a media item tags: - Library + description: Delete a single media from a metadata item in the library security: - token: - admin @@ -11961,7 +14184,7 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': description: Media item could not be deleted content: @@ -11972,11 +14195,11 @@ paths: text/html: {} /library/parts/{partId}/indexes/{index}: get: - summary: Get BIF index for a part operationId: getPartIndex - description: Get BIF index for a part by index type + summary: Get BIF index for a part tags: - Library + description: Get BIF index for a part by index type parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12014,19 +14237,19 @@ paths: content: application/octet-stream: schema: - format: binary type: string + format: binary '404': description: The part or the index doesn't exist or the interval is too small content: text/html: {} /library/sections/{sectionId}/collection/{collectionId}: delete: - summary: Delete a collection operationId: deleteCollection - description: Delete a library collection from the PMS + summary: Delete a collection tags: - Library + description: Delete a library collection from the PMS security: - token: - admin @@ -12056,18 +14279,18 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '404': description: Collection not found content: text/html: {} /library/sections/{sectionId}/composite/{updatedAt}: get: - summary: Get a section composite image operationId: getSectionImage - description: Get a composite image of images in this section + summary: Get a section composite image tags: - Library + description: Get a composite image of images in this section security: - token: - admin @@ -12083,6 +14306,8 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/mediaQuery" + - $ref: "#/components/parameters/composite" - name: sectionId description: Section identifier in: path @@ -12095,18 +14320,16 @@ paths: required: true schema: type: integer - - $ref: '#/components/parameters/mediaQuery' - - $ref: '#/components/parameters/composite' responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" /library/streams/{streamId}.{ext}: delete: - summary: Delete a stream operationId: deleteStream - description: Delete a stream. Only applies to downloaded subtitle streams or a sidecar subtitle when media deletion is enabled. + summary: Delete a stream tags: - Library + description: Delete a stream. Only applies to downloaded subtitle streams or a sidecar subtitle when media deletion is enabled. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12133,7 +14356,7 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '403': description: This user cannot delete this stream content: @@ -12143,11 +14366,11 @@ paths: content: text/html: {} get: - summary: Get a stream operationId: getStream - description: Get a stream (such as a sidecar subtitle stream) + summary: Get a stream tags: - Library + description: Get a stream (such as a sidecar subtitle stream) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12206,11 +14429,11 @@ paths: content: text/html: {} put: - summary: Set a stream offset operationId: setStreamOffset - description: Set a stream offset in ms. This may not be respected by all clients + summary: Set a stream offset tags: - Library + description: Set a stream offset in ms. This may not be respected by all clients parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12250,11 +14473,11 @@ paths: text/html: {} /livetv/dvrs/{dvrId}/channels/{channel}/tune: post: - summary: Tune a channel on a DVR operationId: tuneChannel - description: Tune a channel on a DVR to the provided channel + summary: Tune a channel on a DVR tags: - DVRs + description: Tune a channel on a DVR to the provided channel parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12295,18 +14518,18 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" '500': description: Tuning failed content: text/html: {} /livetv/dvrs/{dvrId}/devices/{deviceId}: delete: - summary: Remove a device from an existing DVR operationId: removeDeviceFromDVR - description: Remove a device from an existing DVR + summary: Remove a device from an existing DVR tags: - DVRs + description: Remove a device from an existing DVR security: - token: - admin @@ -12349,18 +14572,22 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: + - $ref: "#/components/schemas/MediaContainerWithStatus" + - type: object + properties: DVR: + type: array items: + type: object properties: Device: - items: - $ref: '#/components/schemas/Device' type: array + items: + $ref: "#/components/schemas/Device" key: type: string language: @@ -12369,16 +14596,12 @@ paths: type: string uuid: type: string - type: object - type: array - type: object - type: object put: - summary: Add a device to an existing DVR operationId: addDeviceToDVR - description: Add a device to an existing DVR + summary: Add a device to an existing DVR tags: - DVRs + description: Add a device to an existing DVR security: - token: - admin @@ -12421,18 +14644,22 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: + - $ref: "#/components/schemas/MediaContainerWithStatus" + - type: object + properties: DVR: + type: array items: + type: object properties: Device: - items: - $ref: '#/components/schemas/Device' type: array + items: + $ref: "#/components/schemas/Device" key: type: string language: @@ -12441,17 +14668,13 @@ paths: type: string uuid: type: string - type: object - type: array - type: object - type: object /livetv/epg/countries/{country}/{epgId}/lineups: get: - summary: Get lineups for a country via postal code operationId: getCountriesLineups - description: Returns a list of lineups for a given country, EPG provider and postal code + summary: Get lineups for a country via postal code tags: - EPG + description: Returns a list of lineups for a given country, EPG provider and postal code parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12487,18 +14710,18 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithLineup' + $ref: "#/components/schemas/MediaContainerWithLineup" '404': description: No provider with the identifier was found content: text/html: {} /livetv/epg/countries/{country}/{epgId}/regions: get: - summary: Get regions for a country operationId: getCountryRegions - description: Get regions for a country within an EPG provider + summary: Get regions for a country tags: - EPG + description: Get regions for a country within an EPG provider parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12538,37 +14761,37 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Country: + type: array items: + type: object properties: - key: - type: string - national: - type: boolean title: type: string type: type: string - type: object - type: array - type: object - type: object + key: + type: string + national: + type: boolean '404': description: No provider with the identifier was found content: text/html: {} /livetv/sessions/{sessionId}/{consumerId}/index.m3u8: get: - summary: Get a session playlist index operationId: getSessionPlaylistIndex - description: Get a playlist index for playing this session + summary: Get a session playlist index tags: - Live TV + description: Get a playlist index for playing this session parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12602,11 +14825,11 @@ paths: description: Session or consumer not found /media/grabbers/devices/{deviceId}/thumb/{version}: get: - summary: Get device thumb operationId: getThumb - description: Get a device's thumb for display to the user + summary: Get device thumb tags: - Devices + description: Get a device's thumb for display to the user security: - token: - admin @@ -12645,11 +14868,11 @@ paths: text/html: {} /playlists/{playlistId}/items/{generatorId}: delete: - summary: Delete a Generator operationId: deletePlaylistItem - description: Deletes an item from a playlist. Only works with dumb playlists. + summary: Delete a Generator tags: - Library Playlists + description: Deletes an item from a playlist. Only works with dumb playlists. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12676,19 +14899,19 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Playlist not found (or user may not have permission to access playlist) or generator not found content: text/html: {} get: - summary: Get a playlist generator operationId: getPlaylistGenerator - description: Get a playlist's generator. Only used for optimized versions + summary: Get a playlist generator tags: - Library Playlists + description: Get a playlist's generator. Only used for optimized versions parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12719,34 +14942,48 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Item: + type: array items: + type: object properties: + title: + type: string + type: + description: The type of this generator + type: integer + enum: + - -1 + - 42 composite: description: The composite thumbnail image path type: string Device: + type: object properties: profile: type: string - type: object id: type: integer Location: + type: object properties: librarySectionID: type: integer uri: type: string - type: object MediaSettings: + type: object properties: advancedSubtitles: + type: string enum: - auto - burn @@ -12754,7 +14991,6 @@ paths: - sidecar - embedded - segmented - type: string audioBoost: type: integer audioChannelCount: @@ -12778,14 +15014,15 @@ paths: peakBitrate: type: integer photoQuality: - maximum: 100 - minimum: 0 type: integer + minimum: 0 + maximum: 100 photoResolution: type: string secondsPerSegment: type: integer subtitles: + type: string enum: - auto - burn @@ -12793,33 +15030,32 @@ paths: - sidecar - embedded - segmented - type: string subtitleSize: type: integer videoBitrate: type: integer videoQuality: - maximum: 100 - minimum: 0 type: integer + minimum: 0 + maximum: 100 videoResolution: type: string - type: object Policy: + type: object properties: scope: + type: string enum: - all - count - type: string unwatched: description: True if only unwatched items are optimized type: boolean value: description: If the scope is count, the number of items to optimize type: integer - type: object Status: + type: object properties: itemsCompleteCount: type: integer @@ -12828,43 +15064,30 @@ paths: itemsSuccessfulCount: type: integer state: + type: string enum: - pending - complete - failed - type: string totalSize: type: integer - type: object target: type: string targetTagID: description: The tag of this generator's settings type: integer - title: - type: string - type: - description: The type of this generator - enum: - - -1 - - 42 - type: integer - type: object - type: array - type: object - type: object '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Playlist not found (or user may not have permission to access playlist) or generator not found content: text/html: {} put: - summary: Modify a Generator operationId: modifyPlaylistGenerator - description: Modify a playlist generator. Only used for optimizer + summary: Modify a Generator tags: - Library Playlists + description: Modify a playlist generator. Only used for optimizer parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12890,7 +15113,7 @@ paths: schema: type: integer - name: Item - description: | + description: |- Note: OpenAPI cannot properly render this query parameter example ([See GHI](https://github.com/OAI/OpenAPI-Specification/issues/1706)). It should be rendered as: Item[type]=42&Item[title]=Jack-Jack Attack&Item[target]=&Item[targetTagID]=1&Item[locationID]=-1&Item[Location][uri]=library://82503060-0d68-4603-b594-8b071d54819e/item//library/metadata/146&Item[Policy][scope]=all&Item[Policy][value]=&Item[Policy][unwatched]=0 @@ -12900,6 +15123,10 @@ paths: schema: type: object properties: + title: + type: string + type: + type: integer Location: type: object properties: @@ -12910,8 +15137,6 @@ paths: Policy: type: object properties: - value: - type: integer scope: type: string enum: @@ -12919,14 +15144,12 @@ paths: - count unwatched: $ref: "#/components/schemas/BoolInt" + value: + type: integer target: type: string targetTagID: type: integer - title: - type: string - type: - type: integer example: Location: uri: library://82503060-0d68-4603-b594-8b071d54819e/item/%2Flibrary%2Fmetadata%2F146 @@ -12941,20 +15164,20 @@ paths: type: 42 responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Playlist not found (or user may not have permission to access playlist) or generator not found content: text/html: {} /playlists/{playlistId}/items/{generatorId}/items: get: - summary: Get a playlist generator's items operationId: getPlaylistGeneratorItems - description: Get a playlist generator's items + summary: Get a playlist generator's items tags: - Library Playlists + description: Get a playlist generator's items parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12985,17 +15208,21 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Metadata: allOf: - - $ref: '#/components/schemas/Metadata' - - properties: + - $ref: "#/components/schemas/Metadata" + - type: object + properties: processingState: description: The state of processing if this generator is part of an optimizer playlist + type: string enum: - processed - completed @@ -13003,9 +15230,9 @@ paths: - disabled - error - pending - type: string processingStateContext: description: The error which could have occurred (or `good`) + type: string enum: - good - sourceFileUnavailable @@ -13019,23 +15246,19 @@ paths: - accessDenied - cannotTranscode - codecInstallError - type: string - type: object - type: object - type: object '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Playlist not found (or user may not have permission to access playlist) or generator not found content: text/html: {} /playlists/{playlistId}/items/{playlistItemId}/move: put: - summary: Moving items in a playlist operationId: movePlaylistItem - description: Moves an item in a playlist. Only works with dumb playlists. + summary: Moving items in a playlist tags: - Library Playlists + description: Moves an item in a playlist. Only works with dumb playlists. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13067,20 +15290,20 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Playlist not found (or user may not have permission to access playlist) content: text/html: {} /playQueues/{playQueueId}/items/{playQueueItemId}: delete: - summary: Delete an item from a play queue operationId: deletePlayQueueItem - description: Deletes an item in a play queue. Increments the version of the play queue. Returns the modified play queue. + summary: Delete an item from a play queue tags: - Play Queue + description: Deletes an item in a play queue. Increments the version of the play queue. Returns the modified play queue. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13107,20 +15330,20 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Play queue not found content: text/html: {} /playQueues/{playQueueId}/items/{playQueueItemId}/move: put: - summary: Move an item in a play queue operationId: movePlayQueueItem - description: Moves an item in a play queue, and increases the version of the play queue. Returns the modified play queue. + summary: Move an item in a play queue tags: - Play Queue + description: Moves an item in a play queue, and increases the version of the play queue. Returns the modified play queue. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13152,20 +15375,20 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Play queue or queue item not found content: text/html: {} /library/metadata/{ids}/{element}/{timestamp}: get: - summary: Get an item's artwork, theme, etc operationId: getItemArtwork - description: Get the artwork, thumb, element for a metadata item + summary: Get an item's artwork, theme, etc tags: - Library + description: Get the artwork, thumb, element for a metadata item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13207,22 +15430,22 @@ paths: content: audio/mpeg3: schema: - format: binary type: string + format: binary image/jpeg: schema: - format: binary type: string + format: binary /library/parts/{partId}/{changestamp}/{filename}: get: - summary: Get a media part operationId: getMediaPart - description: | + summary: Get a media part + tags: + - Library + description: |- Get a media part for streaming or download. - streaming: This is the default scenario. Bandwidth usage on this endpoint will be guaranteed (on the server's end) to be at least the bandwidth reservation given in the decision. If no decision exists, an ad-hoc decision will be created if sufficient bandwidth exists. Clients should not rely on ad-hoc decisions being made as this may be removed in the future. - download: Indicated if the query parameter indicates this is a download. Bandwidth will be prioritized behind playbacks and will get a fair share of what remains. - tags: - - Library parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13284,11 +15507,11 @@ paths: text/html: {} /library/parts/{partId}/indexes/{index}/{offset}: get: - summary: Get an image from part BIF operationId: getImageFromBif - description: Extract an image from the BIF for a part at a particular offset + summary: Get an image from part BIF tags: - Library + description: Extract an image from the BIF for a part at a particular offset parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13327,19 +15550,19 @@ paths: content: image/jpeg: schema: - format: binary type: string + format: binary '404': description: The part or the index doesn't exist content: text/html: {} /livetv/epg/countries/{country}/{epgId}/regions/{region}/lineups: get: - summary: Get lineups for a region operationId: listLineups - description: Get lineups for a region within an EPG provider + summary: Get lineups for a region tags: - EPG + description: Get lineups for a region within an EPG provider parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13385,18 +15608,18 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithLineup' + $ref: "#/components/schemas/MediaContainerWithLineup" '404': description: No provider with the identifier was found content: text/html: {} /livetv/sessions/{sessionId}/{consumerId}/{segmentId}: get: - summary: Get a single session segment operationId: getSessionSegment - description: Get a single LiveTV session segment + summary: Get a single session segment tags: - Live TV + description: Get a single LiveTV session segment parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13434,11 +15657,11 @@ paths: description: Session, consumer, or segment not found /playlists/{playlistId}/items/{generatorId}/{metadataId}/{action}: put: - summary: Reprocess a generator operationId: refreshPlaylist - description: Make a generator reprocess (refresh) + summary: Reprocess a generator tags: - Library Playlists + description: Make a generator reprocess (refresh) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13481,18 +15704,25 @@ paths: - enable responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" '404': description: Playlist not found (or user may not have permission to access playlist) or generator or metadata item not found content: text/html: {} components: securitySchemes: + clientIdentifier: + name: X-Plex-Client-Identifier + description: |- + An opaque identifier unique to the client. Required for OAuth PIN flows + and JWT device registration endpoints. + type: apiKey + in: header token: name: X-Plex-Token - description: | + description: |- The token which identifies the user accessing the PMS. This can be either: - A traditional access token obtained from plex.tv - A JWT token obtained through the JWT authentication flow @@ -13517,8 +15747,7 @@ components: - application/xml advancedSubtitles: name: advancedSubtitles - description: | - Indicates how incompatible advanced subtitles (such as ass/ssa) should be included: * 'burn' - Burn incompatible advanced text subtitles into the video stream * 'text' - Transcode incompatible advanced text subtitles to a compatible text format, even if some markup is lost + description: "Indicates how incompatible advanced subtitles (such as ass/ssa) should be included: * 'burn' - Burn incompatible advanced text subtitles into the video stream * 'text' - Transcode incompatible advanced text subtitles to a compatible text format, even if some markup is lost" in: query schema: type: string @@ -13675,9 +15904,9 @@ components: example: 0 mediaQuery: name: mediaQuery - description: | + description: |- A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. - + The query supports: - Fields: integer, boolean, tag, string, date, language - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) @@ -13685,18 +15914,18 @@ components: - Sorting: sort parameter with :desc, :nullsLast modifiers - Grouping: group parameter - Limits: limit parameter - + Examples: - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 - + See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. in: query - schema: - $ref: '#/components/schemas/MediaQuery' style: form explode: true + schema: + $ref: "#/components/schemas/MediaQuery" musicBitrate: name: musicBitrate description: Target bitrate for audio only files (in kbps, used to transcode). @@ -13744,8 +15973,7 @@ components: example: 1080x1080 protocol: name: protocol - description: | - Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022) + description: "Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022)" in: query schema: type: string @@ -13769,8 +15997,7 @@ components: type: boolean subtitles: name: subtitles - description: | - Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream + description: "Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream" in: query schema: type: string @@ -13817,9 +16044,9 @@ components: - subtitles type: name: type - description: | + description: |- The type of media to retrieve or filter by. - + 1 = movie 2 = show 3 = season @@ -13829,11 +16056,11 @@ components: 7 = track 8 = photo_album 9 = photo - + E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries in: query schema: - $ref: '#/components/schemas/MediaType' + $ref: "#/components/schemas/MediaType" example: 2 videoBitrate: name: videoBitrate @@ -13862,148 +16089,148 @@ components: example: 1080x1080 X-Plex-Client-Identifier: name: X-Plex-Client-Identifier - x-speakeasy-name-override: Client-Identifier - in: header description: An opaque identifier unique to the client + in: header required: true schema: type: string example: abc123 example: abc123 + x-speakeasy-name-override: Client-Identifier X-Plex-Client-Profile-Extra: name: X-Plex-Client-Profile-Extra - x-speakeasy-name-override: Client-Profile-Extra description: See [Profile Augmentations](#section/API-Info/Profile-Augmentations) . in: header schema: type: string example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) + x-speakeasy-name-override: Client-Profile-Extra X-Plex-Client-Profile-Name: name: X-Plex-Client-Profile-Name - x-speakeasy-name-override: Client-Profile-Name description: Which built in Client Profile to use in the decision. Generally should only be used to specify the Generic profile. in: header schema: type: string example: generic example: generic - X-Plex-Session-Identifier: - name: X-Plex-Session-Identifier - x-speakeasy-name-override: Session-Identifier - description: Unique per client playback session. Used if a client can playback multiple items at a time (such as a browser with multiple tabs) + x-speakeasy-name-override: Client-Profile-Name + X-Plex-Container-Size: + name: X-Plex-Container-Size + description: |- + The number of items to return. If not specified, all items will be returned. + If the number of items exceeds the limit, the response will be paginated. + By default this is 50 + in: query + required: false + schema: + type: integer + format: int32 + default: 50 + example: 50 + X-Plex-Container-Start: + name: X-Plex-Container-Start + description: |- + The index of the first item to return. If not specified, the first item will be returned. + If the number of items exceeds the limit, the response will be paginated. + By default this is 0 + in: query + required: false + schema: + type: integer + format: int32 + default: 0 + example: 0 + X-Plex-Device: + name: X-Plex-Device + description: A relatively friendly name for the client device in: header schema: type: string - example: abc123 - example: abc123 - X-Plex-Product: - name: X-Plex-Product - x-speakeasy-name-override: Product + example: Roku 3 + example: Roku 3 + x-speakeasy-name-override: Device + X-Plex-Device-Name: + name: X-Plex-Device-Name + description: A friendly name for the client in: header - description: The name of the client product schema: type: string - example: Plex for Roku - example: Plex for Roku - X-Plex-Version: - name: X-Plex-Version - x-speakeasy-name-override: Version + example: Living Room TV + example: Living Room TV + x-speakeasy-name-override: Device-Name + X-Plex-Device-Vendor: + name: X-Plex-Device-Vendor + description: The device vendor in: header - description: The version of the client application schema: type: string - example: 2.4.1 - example: 2.4.1 + example: Roku + example: Roku + x-speakeasy-name-override: Device-Vendor + X-Plex-Marketplace: + name: X-Plex-Marketplace + description: The marketplace on which the client application is distributed + in: header + schema: + type: string + example: googlePlay + example: googlePlay + x-speakeasy-name-override: Marketplace + X-Plex-Model: + name: X-Plex-Model + description: A potentially less friendly identifier for the device model + in: header + schema: + type: string + example: 4200X + example: 4200X + x-speakeasy-name-override: Model X-Plex-Platform: name: X-Plex-Platform - x-speakeasy-name-override: Platform - in: header description: The platform of the client + in: header schema: type: string example: Roku example: Roku + x-speakeasy-name-override: Platform X-Plex-Platform-Version: name: X-Plex-Platform-Version - x-speakeasy-name-override: Platform-Version - in: header description: The version of the platform + in: header schema: type: string example: 4.3 build 1057 example: 4.3 build 1057 - X-Plex-Device: - name: X-Plex-Device - x-speakeasy-name-override: Device - in: header - description: A relatively friendly name for the client device - schema: - type: string - example: Roku 3 - example: Roku 3 - X-Plex-Model: - name: X-Plex-Model - x-speakeasy-name-override: Model - in: header - description: A potentially less friendly identifier for the device model - schema: - type: string - example: 4200X - example: 4200X - X-Plex-Device-Vendor: - name: X-Plex-Device-Vendor - x-speakeasy-name-override: Device-Vendor + x-speakeasy-name-override: Platform-Version + X-Plex-Product: + name: X-Plex-Product + description: The name of the client product in: header - description: The device vendor schema: type: string - example: Roku - example: Roku - X-Plex-Device-Name: - name: X-Plex-Device-Name - x-speakeasy-name-override: Device-Name + example: Plex for Roku + example: Plex for Roku + x-speakeasy-name-override: Product + X-Plex-Session-Identifier: + name: X-Plex-Session-Identifier + description: Unique per client playback session. Used if a client can playback multiple items at a time (such as a browser with multiple tabs) in: header - description: A friendly name for the client schema: type: string - example: Living Room TV - example: Living Room TV - X-Plex-Marketplace: - name: X-Plex-Marketplace - x-speakeasy-name-override: Marketplace + example: abc123 + example: abc123 + x-speakeasy-name-override: Session-Identifier + X-Plex-Version: + name: X-Plex-Version + description: The version of the client application in: header - description: The marketplace on which the client application is distributed schema: type: string - example: googlePlay - example: googlePlay - X-Plex-Container-Start: - name: X-Plex-Container-Start - in: query - description: | - The index of the first item to return. If not specified, the first item will be returned. - If the number of items exceeds the limit, the response will be paginated. - By default this is 0 - schema: - type: integer - format: int32 - default: 0 - example: 0 - required: false - X-Plex-Container-Size: - name: X-Plex-Container-Size - in: query - description: | - The number of items to return. If not specified, all items will be returned. - If the number of items exceeds the limit, the response will be paginated. - By default this is 50 - schema: - type: integer - format: int32 - default: 50 - example: 50 - required: false + example: 2.4.1 + example: 2.4.1 + x-speakeasy-name-override: Version headers: X-Plex-Container-Start: description: Provided on all MediaContainer objects indicating the offset of where this container page starts @@ -14013,8 +16240,8 @@ components: description: Provided on all MediaContainer objects indicating the total size of the collection schema: type: integer - minimum: 0 example: 100 + minimum: 0 responses: '200': description: OK @@ -14028,6 +16255,30 @@ components: description: Bad Request content: text/html: {} + '401': + description: Unauthorized + content: + application/json: + schema: + properties: + errors: + items: + properties: + code: + example: 1001 + format: int32 + type: integer + message: + example: User could not be authenticated + type: string + x-speakeasy-error-message: true + status: + example: 401 + format: int32 + type: integer + type: object + type: array + type: object '403': description: Forbidden content: @@ -14044,23 +16295,23 @@ components: description: OK headers: X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' + - $ref: "#/components/schemas/MediaContainerWithStatus" - properties: DVR: items: properties: Device: items: - $ref: '#/components/schemas/Device' + $ref: "#/components/schemas/Device" type: array key: type: string @@ -14078,22 +16329,22 @@ components: description: OK headers: X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - properties: Hub: items: properties: homeVisibility: - description: | + description: |- Whether this hub is visible on the home screen - all: Visible to all users - none: Visible to no users @@ -14118,7 +16369,7 @@ components: description: Whether this hub is visible to shared user's home type: boolean recommendationsVisibility: - description: | + description: |- The visibility of this hub in recommendations: - all: Visible to all users - none: Visible to no users @@ -14141,16 +16392,16 @@ components: description: OK headers: X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - properties: Metadata: items: @@ -14192,6 +16443,30 @@ components: type: array type: object type: object + LibrarySections: + description: OK + content: + application/json: + schema: + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/ServerConfiguration" + - properties: + Directory: + items: + properties: + count: + type: integer + key: + description: The key where this directory is found + type: string + title: + type: string + type: object + type: array + type: object + type: object post-responses-200: description: OK content: @@ -14200,7 +16475,7 @@ components: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - additionalProperties: true properties: color: @@ -14223,41 +16498,17 @@ components: type: string type: object type: object - LibrarySections: - description: OK - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/ServerConfiguration' - - properties: - Directory: - items: - properties: - count: - type: integer - key: - description: The key where this directory is found - type: string - title: - type: string - type: object - type: array - type: object - type: object responses-200: description: OK headers: X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithHubs' + $ref: "#/components/schemas/MediaContainerWithHubs" responses-400: description: Request parameters are bad, such as an `endTimeOffset` prior to the `startTimeOffset` content: @@ -14291,7 +16542,7 @@ components: type: string Directory: items: - $ref: '#/components/schemas/Metadata' + $ref: "#/components/schemas/Metadata" type: array identifier: type: string @@ -14319,8 +16570,42 @@ components: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithPlaylistMetadata' + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" schemas: + Activity: + type: object + properties: + title: + description: A user-friendly title for this activity + type: string + type: + description: The type of activity + type: string + cancellable: + description: Indicates whether this activity can be cancelled + type: boolean + Context: + description: An object with additional values + type: object + additionalProperties: true + progress: + description: A progress percentage. A value of -1 means the progress is indeterminate + type: number + minimum: -1 + maximum: 100 + Response: + description: An object with the response to the async opperation + type: object + additionalProperties: true + subtitle: + description: A user-friendly sub-title for this activity + type: string + userID: + description: The user this activity belongs to + type: integer + uuid: + description: The ID of the activity + type: string AllowSync: type: boolean BoolInt: @@ -14329,75 +16614,32 @@ components: enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - - FALSE - - TRUE - MediaType: - description: | - The type of media to retrieve or filter by. - - 1 = movie - 2 = show - 3 = season - 4 = episode - 5 = artist - 6 = album - 7 = track - 8 = photo_album - 9 = photo - - E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries - type: integer - enum: - - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - - 9 - example: 2 - x-speakeasy-enums: - - MOVIE - - TV_SHOW - - SEASON - - EPISODE - - ARTIST - - ALBUM - - TRACK - - PHOTO_ALBUM - - PHOTO - MediaTypeString: - description: | - The type of media content in the Plex library. This can represent videos, music, or photos. - type: string - enum: - - movie - - show - - season - - episode - - artist - - album - - track - - photoalbum - - photo - - collection - example: "movie" - x-speakeasy-enums: - - MOVIE - - TV_SHOW - - SEASON - - EPISODE - - ARTIST - - ALBUM - - TRACK - - PHOTO_ALBUM - - PHOTO - - COLLECTION + - false + - true + ButlerTask: + type: object + properties: + title: + description: A user-friendly title of the task + type: string + description: + description: A user-friendly description of the task + type: string + enabled: + description: Whether this task is enabled or not + type: boolean + interval: + description: The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. + type: integer + name: + description: The name of the task + type: string + scheduleRandomized: + description: Indicates whether the timing of the task is randomized within the butler interval + type: boolean Channel: type: object properties: @@ -14434,7 +16676,7 @@ components: ChannelMapping: type: array items: - $ref: '#/components/schemas/ChannelMapping' + $ref: "#/components/schemas/ChannelMapping" key: type: string lastSeenAt: @@ -14459,6 +16701,26 @@ components: type: string uuid: type: string + DeviceChannel: + type: object + properties: + drm: + description: Indicates the channel is DRMed and thus may not be playable + type: boolean + favorite: + type: boolean + hd: + type: boolean + identifier: + type: string + key: + type: string + name: + type: string + signalQuality: + type: integer + signalStrength: + type: integer Directory: type: object additionalProperties: true @@ -14508,11 +16770,92 @@ components: type: string titleBar: type: string + DownloadQueue: + type: array + items: + type: object + properties: + id: + type: integer + itemCount: + type: integer + status: + description: |- + The state of this queue + - deciding: At least one item is still being decided + - waiting: At least one item is waiting for transcode and none are currently transcoding + - processing: At least one item is being transcoded + - done: All items are available (or potentially expired) + - error: At least one item has encountered an error + type: string + enum: + - deciding + - waiting + - processing + - done + - error + DownloadQueueItem: + type: object + properties: + DecisionResult: + type: object + properties: + availableBandwidth: + description: The maximum bitrate set when item was added + type: integer + directPlayDecisionCode: + type: integer + directPlayDecisionText: + type: string + generalDecisionCode: + type: integer + generalDecisionText: + type: string + mdeDecisionCode: + description: The code indicating the status of evaluation of playback when client indicates `hasMDE=1` + type: integer + mdeDecisionText: + description: Descriptive text for the above code + type: string + transcodeDecisionCode: + type: integer + transcodeDecisionText: + type: string + error: + description: The error encountered in transcoding or decision + type: string + id: + type: integer + key: + type: string + queueId: + type: integer + status: + description: |- + The state of the item: + - deciding: The item decision is pending + - waiting: The item is waiting for transcode + - processing: The item is being transcoded + - available: The item is available for download + - error: The item encountered an error in the decision or transcode + - expired: The transcoded item has timed out and is no longer available + type: string + enum: + - deciding + - waiting + - processing + - available + - error + - expired + transcode: + description: The transcode session object which is not yet documented otherwise it'd be a $ref here. + type: object + TranscodeSession: + $ref: "#/components/schemas/TranscodeSession" Filter: allOf: - - $ref: '#/components/schemas/Directory' - - description: | - Each `Filter` object contains a description of the filter. Note that it is not an exhaustive list of the full media query language, but an important subset useful for top-level API. + - $ref: "#/components/schemas/Directory" + - description: Each `Filter` object contains a description of the filter. Note that it is not an exhaustive list of the full media query language, but an important subset useful for top-level API. type: object properties: title: @@ -14546,8 +16889,7 @@ components: type: string example: home.onDeck hubKey: - description: | - A key at which the exact content currently displayed can be fetched again. This is particularly important when a hub is marked as random and requesting the `key` may get different results. It's otherwise optional. + description: A key at which the exact content currently displayed can be fetched again. This is particularly important when a hub is marked as random and requesting the `key` may get different results. It's otherwise optional. type: string key: description: The key at which all of the content for this hub can be retrieved @@ -14556,10 +16898,9 @@ components: Metadata: type: array items: - $ref: '#/components/schemas/Metadata' + $ref: "#/components/schemas/Metadata" more: - description: | - "A boolean indicating that the hub contains more than what's included in the current response." + description: '"A boolean indicating that the hub contains more than what''s included in the current response."' type: boolean promoted: description: Indicating if the hub should be promoted to the user's homescreen @@ -14581,8 +16922,7 @@ components: type: integer example: 8 Image: - description: | - Images such as movie posters and background artwork are represented by Image elements. + description: Images such as movie posters and background artwork are represented by Image elements. type: object properties: type: @@ -14604,30 +16944,26 @@ components: Items: type: object allOf: - - $ref: '#/components/schemas/Metadata' + - $ref: "#/components/schemas/Metadata" - type: object properties: MetadataItem: type: array items: - $ref: '#/components/schemas/Items' + $ref: "#/components/schemas/Items" description: Nested metadata items type: object Key: type: string LibrarySection: type: object - required: - - uuid - - language - - type properties: title: + description: The title of the library type: string - description: "The title of the library" - example: "Movies" + example: Movies type: - $ref: '#/components/schemas/MediaTypeString' + $ref: "#/components/schemas/MediaTypeString" agent: type: string allowSync: @@ -14640,10 +16976,10 @@ components: type: boolean contentChangedAt: allOf: - - $ref: '#/components/schemas/PlexDateTime' + - $ref: "#/components/schemas/PlexDateTime" createdAt: allOf: - - $ref: '#/components/schemas/PlexDateTime' + - $ref: "#/components/schemas/PlexDateTime" directory: type: boolean filters: @@ -14652,13 +16988,9 @@ components: hidden: type: boolean key: - $ref: '#/components/schemas/Key' + $ref: "#/components/schemas/Key" language: type: string - uuid: - type: string - description: "The universally unique identifier for the library." - example: "e69655a2-ef48-4aba-bb19-d3cc3401e7d6" Location: type: array items: @@ -14674,14 +17006,22 @@ components: type: boolean scannedAt: allOf: - - $ref: '#/components/schemas/PlexDateTime' + - $ref: "#/components/schemas/PlexDateTime" scanner: type: string thumb: - $ref: '#/components/schemas/Thumb' + $ref: "#/components/schemas/Thumb" updatedAt: allOf: - - $ref: '#/components/schemas/PlexDateTime' + - $ref: "#/components/schemas/PlexDateTime" + uuid: + description: The universally unique identifier for the library. + type: string + example: e69655a2-ef48-4aba-bb19-d3cc3401e7d6 + required: + - uuid + - language + - type Lineup: type: object properties: @@ -14691,7 +17031,7 @@ components: description: The type of this object (`lineup` in this case) type: string lineupType: - description: | + description: |- - `-1`: N/A - `0`: Over the air - `1`: Cable @@ -14712,12 +17052,9 @@ components: description: The uuid of this lineup type: string Media: - description: | - `Media` represents an one or more media files (parts) and is a child of a metadata item. There aren't necessarily any guaranteed attributes on media elements since the attributes will vary based on the type. The possible attributes are not documented here, but they typically have self-evident names. High-level media information that can be used for badging and flagging, such as `videoResolution` and codecs, is included on the media element. + description: "`Media` represents an one or more media files (parts) and is a child of a metadata item. There aren't necessarily any guaranteed attributes on media elements since the attributes will vary based on the type. The possible attributes are not documented here, but they typically have self-evident names. High-level media information that can be used for badging and flagging, such as `videoResolution` and codecs, is included on the media element." type: object additionalProperties: true - required: - - id properties: aspectRatio: type: number @@ -14748,16 +17085,16 @@ components: type: boolean example: false hasVoiceActivity: + description: |- + Voice activity detection availability flag returned by PMS. + PMS may return this as a boolean or as string values (`"0"` or `"1"`). + example: '0' oneOf: - type: boolean - type: string enum: - '0' - '1' - example: '0' - description: | - Voice activity detection availability flag returned by PMS. - PMS may return this as a boolean or as string values (`"0"` or `"1"`). height: type: integer format: int32 @@ -14772,7 +17109,7 @@ components: Part: type: array items: - $ref: '#/components/schemas/Part' + $ref: "#/components/schemas/Part" videoCodec: type: string example: h264 @@ -14789,8 +17126,10 @@ components: type: integer format: int32 example: 1280 + required: + - id MediaContainer: - description: | + description: |- `MediaContainer` is the root element of most Plex API responses. It serves as a generic container for various types of content (Metadata, Hubs, Directories, etc.) and includes pagination information (offset, size, totalSize) when applicable. Common attributes: - identifier: Unique identifier for this container - size: Number of items in this response page - totalSize: Total number of items available (for pagination) - offset: Starting index of this page (for pagination) The container often "hoists" common attributes from its children. For example, if all tracks in a container share the same album title, the `parentTitle` attribute may appear on the MediaContainer rather than being repeated on each track. @@ -14799,21 +17138,19 @@ components: identifier: type: string offset: - description: | - The offset of where this container page starts among the total objects available. Also provided in the `X-Plex-Container-Start` header. + description: The offset of where this container page starts among the total objects available. Also provided in the `X-Plex-Container-Start` header. type: integer size: type: integer totalSize: - description: | - The total size of objects available. Also provided in the `X-Plex-Container-Total-Size` header. + description: The total size of objects available. Also provided in the `X-Plex-Container-Total-Size` header. type: integer MediaContainerWithArtwork: type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Metadata: @@ -14833,7 +17170,7 @@ components: description: The path to the artwork type: string MediaContainerWithDecision: - description: | + description: |- `MediaContainer` is commonly found as the root of a response and is a pretty generic container. Common attributes include `identifier` and things related to paging (`offset`, `size`, `totalSize`). It is also common for a `MediaContainer` to contain attributes "hoisted" from its children. If every element in the container would have had the same attribute, then that attribute can be present on the container instead of being repeated on every element. For example, an album's list of tracks might include `parentTitle` on the container since all of the tracks have the same album title. A container may have a `source` attribute when all of the items came from the same source. Generally speaking, when looking for an attribute on an item, if the attribute wasn't found then the container should be checked for that attribute as well. @@ -14841,7 +17178,7 @@ components: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: availableBandwidth: @@ -14866,14 +17203,14 @@ components: type: array items: allOf: - - $ref: '#/components/schemas/Metadata' + - $ref: "#/components/schemas/Metadata" - type: object properties: Media: type: array items: allOf: - - $ref: '#/components/schemas/Media' + - $ref: "#/components/schemas/Media" - type: object properties: abr: @@ -14882,7 +17219,7 @@ components: type: array items: allOf: - - $ref: '#/components/schemas/Part' + - $ref: "#/components/schemas/Part" - type: object properties: decision: @@ -14897,7 +17234,7 @@ components: type: array items: allOf: - - $ref: '#/components/schemas/Stream' + - $ref: "#/components/schemas/Stream" - type: object properties: decision: @@ -14933,7 +17270,7 @@ components: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Device: @@ -14944,7 +17281,7 @@ components: ChannelMapping: type: array items: - $ref: '#/components/schemas/ChannelMapping' + $ref: "#/components/schemas/ChannelMapping" key: type: string lastSeenAt: @@ -14974,37 +17311,37 @@ components: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Directory: type: array items: - $ref: '#/components/schemas/Directory' + $ref: "#/components/schemas/Directory" MediaContainerWithHubs: type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Hub: type: array items: - $ref: '#/components/schemas/Hub' + $ref: "#/components/schemas/Hub" MediaContainerWithLineup: type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Lineup: type: array items: - $ref: '#/components/schemas/Lineup' + $ref: "#/components/schemas/Lineup" uuid: description: The UUID of this set lineups type: string @@ -15013,19 +17350,19 @@ components: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Metadata: type: array items: - $ref: '#/components/schemas/Metadata' + $ref: "#/components/schemas/Metadata" MediaContainerWithNestedMetadata: type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: MetadataItem: @@ -15033,13 +17370,13 @@ components: items: type: object allOf: - - $ref: '#/components/schemas/Metadata' + - $ref: "#/components/schemas/Metadata" - type: object properties: MetadataItem: type: array items: - $ref: '#/components/schemas/Items' + $ref: "#/components/schemas/Items" description: Nested metadata items type: object MediaContainerWithPlaylistMetadata: @@ -15047,7 +17384,7 @@ components: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Metadata: @@ -15084,25 +17421,25 @@ components: specialPlaylistType: description: If this is a special playlist, this returns its type (e.g. favorites). type: string - - $ref: '#/components/schemas/Metadata' + - $ref: "#/components/schemas/Metadata" MediaContainerWithSettings: type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Setting: type: array items: - $ref: '#/components/schemas/Setting' + $ref: "#/components/schemas/Setting" MediaContainerWithStatus: type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: status: @@ -15113,16 +17450,24 @@ components: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: MediaSubscription: type: array items: - $ref: '#/components/schemas/MediaSubscription' + $ref: "#/components/schemas/MediaSubscription" + MediaGrabber: + type: object + properties: + title: + type: string + identifier: + type: string + protocol: + type: string MediaGrabOperation: - description: | - A media grab opration represents a scheduled or active recording of media + description: A media grab opration represents a scheduled or active recording of media type: object properties: currentSize: @@ -15140,7 +17485,7 @@ components: mediaSubscriptionID: type: integer Metadata: - $ref: '#/components/schemas/Metadata' + $ref: "#/components/schemas/Metadata" percent: type: number provider: @@ -15156,9 +17501,35 @@ components: - error - postprocessing - paused + MediaQuery: + description: |- + A querystring-based filtering language used to select subsets of media. When provided as an object, properties are serialized as a querystring using form style with explode. + + Only the defined properties below are allowed. The object serializes to a querystring format like: `type=4&sourceType=2&sort=duration:desc,index` + type: object + example: + type: 4 + sourceType: 2 + sort: duration:desc,index + additionalProperties: false + properties: + type: + $ref: "#/components/schemas/MediaType" + description: The type of media to retrieve or filter by. + group: + description: Field to group results by (similar to SQL GROUP BY) + type: string + limit: + description: Maximum number of results to return + type: integer + sort: + description: Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") + type: string + sourceType: + description: Change the default level to which fields refer (used with type for hierarchical queries) + type: integer MediaSubscription: - description: | - A media subscription contains a representation of metadata desired to be recorded + description: A media subscription contains a representation of metadata desired to be recorded type: object properties: title: @@ -15188,14 +17559,14 @@ components: MediaGrabOperation: type: array items: - $ref: '#/components/schemas/MediaGrabOperation' + $ref: "#/components/schemas/MediaGrabOperation" Playlist: description: Media Matching Hints additionalProperties: true Setting: type: array items: - $ref: '#/components/schemas/Setting' + $ref: "#/components/schemas/Setting" storageTotal: description: Only included if `includeStorage` is specified type: integer @@ -15208,8 +17579,71 @@ components: Video: description: Media Matching Hints additionalProperties: true + MediaType: + description: |- + The type of media to retrieve or filter by. + + 1 = movie + 2 = show + 3 = season + 4 = episode + 5 = artist + 6 = album + 7 = track + 8 = photo_album + 9 = photo + + E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries + type: integer + enum: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + example: 2 + x-speakeasy-enums: + - MOVIE + - TV_SHOW + - SEASON + - EPISODE + - ARTIST + - ALBUM + - TRACK + - PHOTO_ALBUM + - PHOTO + MediaTypeString: + description: The type of media content in the Plex library. This can represent videos, music, or photos. + type: string + enum: + - movie + - show + - season + - episode + - artist + - album + - track + - photoalbum + - photo + - collection + example: movie + x-speakeasy-enums: + - MOVIE + - TV_SHOW + - SEASON + - EPISODE + - ARTIST + - ALBUM + - TRACK + - PHOTO_ALBUM + - PHOTO + - COLLECTION Metadata: - description: | + description: |- Items in a library are referred to as "metadata items." These metadata items are distinct from "media items" which represent actual instances of media that can be consumed. Consider a TV library that has a single video file in it for a particular episode of a show. The library has a single media item, but it has three metadata items: one for the show, one for the season, and one for the episode. Consider a movie library that has two video files in it: the same movie, but two different resolutions. The library has a single metadata item for the movie, but that metadata item has two media items, one for each resolution. Additionally a "media item" will have one or more "media parts" where the the parts are intended to be watched together, such as a CD1 and CD2 parts of the same movie. Note that when a metadata item has multiple media items, those media items should be isomorphic. That is, a 4K version and 1080p version of a movie are different versions of the same movie. They have the same duration, same summary, same rating, etc. and they can generally be considered interchangeable. A theatrical release vs. director's cut vs. unrated version on the other hand would be separate metadata items. @@ -15217,11 +17651,6 @@ components: Metadata items can often live in a hierarchy with relationships between them. For example, the metadata item for an episodes is associated with a season metadata item which is associated with a show metadata item. A similar hierarchy exists with track, album, and artist and photos and photo album. The relationships may be expressed via relative terms and absolute terms. For example, "leaves" refer to metadata items which has associated media (there is no media for a season nor show). A show will have "children" in the form of seasons and a season will have "children" in the form of episodes and episodes have "parent" in the form of a season which has a "parent" in the form of a show. Similarly, a show has "grandchildren" in the form of episodse and an episode has a "grandparent" in the form of a show. type: object additionalProperties: true - required: - - addedAt - - key - - title - - type properties: title: description: The title of the item (e.g. “300” or “The Simpsons”) @@ -15240,7 +17669,7 @@ components: art: description: When present, the URL for the background artwork for the item. type: string - example: "/library/metadata/58683/art/1703239236" + example: /library/metadata/58683/art/1703239236 audienceRating: description: Some rating systems separate reviewer ratings from audience ratings type: number @@ -15253,18 +17682,18 @@ components: Autotag: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" banner: description: When present, the URL for a banner graphic for the item. type: string chapterSource: description: When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). type: string - example: "media" + example: media childCount: + description: The number of child items associated with this media item. type: integer format: int32 - description: "The number of child items associated with this media item." example: 1 composite: description: When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). @@ -15275,11 +17704,11 @@ components: Country: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" Director: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" duration: description: When present, the duration for the item, in units of milliseconds. type: integer @@ -15288,18 +17717,18 @@ components: description: Typically only seen in metadata at a library's top level type: array items: - $ref: '#/components/schemas/Filter' + $ref: "#/components/schemas/Filter" Genre: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" grandparentArt: description: The `art` of the grandparent type: string grandparentGuid: + description: The GUID of the grandparent media item. type: string - description: "The GUID of the grandparent media item." - example: "plex://show/5d9c081b170e24001f2a7be4" + example: plex://show/5d9c081b170e24001f2a7be4 grandparentHero: description: The `hero` of the grandparent type: string @@ -15319,22 +17748,17 @@ components: description: The `title` of the grandparent type: string guid: + description: The globally unique identifier for the media item. type: string - description: "The globally unique identifier for the media item." - example: "plex://movie/5d7768ba96b655001fdc0408" + example: plex://movie/5d7768ba96b655001fdc0408 Guid: - x-speakeasy-name-override: guids type: array items: type: object - required: - - id properties: id: + description: The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// type: string - description: | - The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// - pattern: "^(imdb|tmdb|tvdb)://.+$" example: imdbExample: summary: IMDB example @@ -15345,13 +17769,17 @@ components: tvdbExample: summary: TVDB example value: tvdb://7945991 + pattern: ^(imdb|tmdb|tvdb)://.+$ + required: + - id + x-speakeasy-name-override: guids hero: description: When present, the URL for a hero image for the item. type: string Image: type: array items: - $ref: '#/components/schemas/Image' + $ref: "#/components/schemas/Image" index: description: When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. type: integer @@ -15361,8 +17789,8 @@ components: type: string lastViewedAt: allOf: - - $ref: '#/components/schemas/PlexDateTime' - - description: When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. + - $ref: "#/components/schemas/PlexDateTime" + - description: When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. leafCount: description: For shows and seasons, contains the number of total episodes. type: integer @@ -15370,19 +17798,19 @@ components: Media: type: array items: - $ref: '#/components/schemas/Media' + $ref: "#/components/schemas/Media" originallyAvailableAt: description: When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. type: string format: date - example: "2022-12-14" + example: "2022-12-14T00:00:00.000Z" originalTitle: description: When present, used to indicate an item's original title, e.g. a movie's foreign title. type: string parentGuid: + description: The GUID of the parent media item. type: string - description: "The GUID of the parent media item." - example: "plex://show/5d9c081b170e24001f2a7be4" + example: plex://show/5d9c081b170e24001f2a7be4 parentHero: description: The `hero` of the parent type: string @@ -15417,7 +17845,7 @@ components: Rating: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" x-speakeasy-name-override: RatingArray ratingCount: description: Number of ratings under this metadata @@ -15432,7 +17860,7 @@ components: Role: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" search: description: Indicates this is a search directory type: boolean @@ -15459,7 +17887,7 @@ components: description: Typically only seen in metadata at a library's top level type: array items: - $ref: '#/components/schemas/Sort' + $ref: "#/components/schemas/Sort" studio: description: When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). type: string @@ -15475,11 +17903,11 @@ components: theme: description: When present, the URL for theme music for the item (usually only for TV shows). type: string - example: "/library/metadata/1/theme/1705636920" + example: /library/metadata/1/theme/1705636920 thumb: description: When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. type: string - example: "/library/metadata/58683/thumb/1703239236" + example: /library/metadata/58683/thumb/1703239236 titleSort: description: Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). type: string @@ -15507,23 +17935,49 @@ components: Writer: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" year: description: When present, the year associated with the item's release (e.g. release year for a movie). type: integer format: int32 + required: + - addedAt + - key + - title + - type + NotificationContainer: + type: object + properties: + type: + description: The notification type + type: string + PlaySessionStateNotification: + type: array + items: + $ref: "#/components/schemas/PlaySessionStateNotification" + ReachabilityNotification: + type: array + items: + $ref: "#/components/schemas/ReachabilityNotification" + size: + description: Number of notifications + type: integer + StatusNotification: + type: array + items: + $ref: "#/components/schemas/StatusNotification" + TimelineEntry: + type: array + items: + $ref: "#/components/schemas/TimelineEntry" Part: - description: | - `Part` represents a particular file or "part" of a media item. The part is the playable unit of the media hierarchy. Suppose that a movie library contains a movie that is broken up into files, reminiscent of a movie split across two BDs. The metadata item represents information about the movie, the media item represents this instance of the movie at this resolution and quality, and the part items represent the two playable files. If another media were added which contained the joining of these two parts transcoded down to a lower resolution, then this metadata would contain 2 medias, one with 2 parts and one with 1 part. + description: '`Part` represents a particular file or "part" of a media item. The part is the playable unit of the media hierarchy. Suppose that a movie library contains a movie that is broken up into files, reminiscent of a movie split across two BDs. The metadata item represents information about the movie, the media item represents this instance of the movie at this resolution and quality, and the part items represent the two playable files. If another media were added which contained the joining of these two parts transcoded down to a lower resolution, then this metadata would contain 2 medias, one with 2 parts and one with 1 part.' type: object additionalProperties: true - required: - - id - - key properties: accessible: + description: Indicates if the part is accessible. type: boolean - description: "Indicates if the part is accessible." example: true audioProfile: type: string @@ -15538,8 +17992,8 @@ components: format: int32 example: 150192 exists: + description: Indicates if the part exists. type: boolean - description: "Indicates if the part exists." example: true file: description: The local file path at which the part is stored on the server @@ -15554,7 +18008,7 @@ components: example: 1 indexes: type: string - example: "sd" + example: sd key: description: The key from which the media can be streamed type: string @@ -15570,10 +18024,13 @@ components: Stream: type: array items: - $ref: '#/components/schemas/Stream' + $ref: "#/components/schemas/Stream" videoProfile: type: string example: main + required: + - id + - key Player: description: Information about the player being used for playback type: object @@ -15623,20 +18080,154 @@ components: version: description: The version of the client type: string + PlaySessionStateNotification: + description: Real-time playback state change notification + type: object + properties: + controllable: + type: string + guid: + type: string + key: + type: string + playQueueID: + type: integer + playQueueItemID: + type: integer + ratingKey: + type: string + sessionKey: + type: string + state: + type: string + enum: + - playing + - paused + - stopped + transcodeSession: + type: string + url: + type: string + viewOffset: + type: integer + PlexDateTime: + description: Unix epoch datetime in seconds + type: + - integer + format: int64 + example: 1556281940 PlexDateTimeISO: type: string format: date-time - example: '2019-06-24T11:38:02Z' + example: "2019-06-24T11:38:02Z" PlexDevice: title: PlexDevice type: object + properties: + accessToken: + type: string + clientIdentifier: + type: string + connections: + type: array + items: + type: object + properties: + address: + description: The (ip) address or domain name used for the connection + type: string + IPv6: + description: If the connection is using IPv6 + type: boolean + local: + description: If the connection is local address + type: boolean + port: + description: The port used for the connection + type: integer + format: int32 + protocol: + description: The protocol used for the connection (http, https, etc) + type: string + enum: + - http + - https + example: http + relay: + description: If the connection is relayed through plex.direct + type: boolean + uri: + description: The full URI of the connection + type: string + required: + - protocol + - address + - port + - uri + - local + - relay + - IPv6 + createdAt: + allOf: + - $ref: "#/components/schemas/PlexDateTimeISO" + - description: The time the device was created/registered + device: + type: + - 'null' + - string + dnsRebindingProtection: + type: boolean + home: + type: boolean + httpsRequired: + type: boolean + lastSeenAt: + allOf: + - $ref: "#/components/schemas/PlexDateTimeISO" + - description: The last time the device was seen + name: + type: string + natLoopbackSupported: + type: boolean + owned: + type: boolean + ownerId: + description: ownerId is null when the device is owned by the token used to send the request + type: + - 'null' + - integer + platform: + type: + - 'null' + - string + platformVersion: + type: + - 'null' + - string + presence: + type: boolean + product: + type: string + productVersion: + type: string + provides: + type: string + publicAddress: + type: string + publicAddressMatches: + type: boolean + relay: + type: boolean + sourceTitle: + type: + - 'null' + - string + synced: + type: boolean required: - name - product - productVersion - - platform - - platformVersion - - device - clientIdentifier - createdAt - lastSeenAt @@ -15655,110 +18246,15 @@ components: - dnsRebindingProtection - natLoopbackSupported - connections + ReachabilityNotification: + description: Server reachability status change notification + type: object properties: - name: - type: string - product: - type: string - productVersion: - type: string - platform: - type: - - "null" - - string - platformVersion: - type: - - "null" - - string - device: - type: - - "null" - - string - clientIdentifier: - type: string - createdAt: - allOf: - - $ref: '#/components/schemas/PlexDateTimeISO' - - description: The time the device was created/registered - lastSeenAt: - allOf: - - $ref: '#/components/schemas/PlexDateTimeISO' - - description: The last time the device was seen - provides: - type: string - ownerId: - description: ownerId is null when the device is owned by the token used to send the request - type: - - "null" - - integer - sourceTitle: - type: - - "null" - - string - publicAddress: - type: string - accessToken: + status: type: string - owned: - type: boolean - home: - type: boolean - synced: - type: boolean - relay: - type: boolean - presence: - type: boolean - httpsRequired: - type: boolean - publicAddressMatches: - type: boolean - dnsRebindingProtection: - type: boolean - natLoopbackSupported: - type: boolean - connections: - type: array - items: - type: object - required: - - protocol - - address - - port - - uri - - local - - relay - - IPv6 - properties: - protocol: - description: The protocol used for the connection (http, https, etc) - example: "http" - type: string - enum: - - http - - https - address: - description: The (ip) address or domain name used for the connection - type: string - port: - description: The port used for the connection - type: integer - format: int32 - uri: - description: The full URI of the connection - type: string - local: - description: If the connection is local address - type: boolean - relay: - description: If the connection is relayed through plex.direct - type: boolean - IPv6: - description: If the connection is using IPv6 - type: boolean ServerConfiguration: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: allowCameraUpload: @@ -15782,6 +18278,7 @@ components: countryCode: type: string diagnostics: + description: A comma-separated list of enabled diagnostics modules type: string eventStream: type: boolean @@ -15795,6 +18292,7 @@ components: type: integer example: 7 machineIdentifier: + type: string example: 0123456789abcdef0123456789abcdef012345678 mediaProviders: type: boolean @@ -15806,14 +18304,17 @@ components: myPlex: type: boolean myPlexMappingState: + type: string example: mapped myPlexSigninState: + type: string example: ok myPlexSubscription: type: boolean myPlexUsername: type: string offlineTranscode: + type: integer example: 1 ownerFeatures: description: A comma-separated list of features which are enabled for the server owner @@ -15847,11 +18348,14 @@ components: transcoderVideo: type: boolean transcoderVideoBitrates: - description: The suggested video quality bitrates to present to the user + description: A comma-separated list of suggested video quality bitrates to present to the user + type: string transcoderVideoQualities: + description: A comma-separated list of suggested video quality labels type: string transcoderVideoResolutions: - description: The suggested video resolutions to the above quality bitrates + description: A comma-separated list of suggested video resolutions to the above quality bitrates + type: string updatedAt: type: integer updater: @@ -15923,9 +18427,8 @@ components: - type: boolean Sort: allOf: - - $ref: '#/components/schemas/Directory' - - description: | - Each `Sort` object contains a description of the sort field. + - $ref: "#/components/schemas/Directory" + - description: Each `Sort` object contains a description of the sort field. type: object properties: title: @@ -15952,146 +18455,175 @@ components: key: description: The key to use in the sort field to make items sort by this item type: string + StatusNotification: + description: Server status notification (e.g. library scan complete) + type: object + properties: + title: + type: string + description: + type: string + type: + type: string Stream: - description: | - `Stream` represents a particular stream from a media item, such as the video stream, audio stream, or subtitle stream. The stream may either be part of the file represented by the parent `Part` or, especially for subtitles, an external file. The stream contains more detailed information about the specific stream. For example, a video may include the `aspectRatio` at the `Media` level, but detailed information about the video stream like the color space will be included on the `Stream` for the video stream. Note that photos do not have streams (mostly as an optimization). + description: '`Stream` represents a particular stream from a media item, such as the video stream, audio stream, or subtitle stream. The stream may either be part of the file represented by the parent `Part` or, especially for subtitles, an external file. The stream contains more detailed information about the specific stream. For example, a video may include the `aspectRatio` at the `Media` level, but detailed information about the video stream like the color space will be included on the `Stream` for the video stream. Note that photos do not have streams (mostly as an optimization).' type: object additionalProperties: true - required: - - id - - key - - codec - - displayTitle - - streamType properties: + title: + description: Optional title for the stream (e.g., language variant). + type: string + example: SDH + format: + description: Format of the stream (e.g., srt). + type: string + example: srt default: - type: boolean description: Indicates if this stream is default. + type: boolean example: true audioChannelLayout: - type: string description: Audio channel layout. + type: string example: 5.1(side) - channels: - type: integer - format: int32 - description: Number of audio channels (for audio streams). - example: 6 bitDepth: - type: integer - format: int32 description: Bit depth of the video stream. - example: 10 - DOVIBLCompatID: - type: integer - format: int32 - description: Dolby Vision BL compatibility ID. - example: 1 - DOVIBLPresent: - type: boolean - description: Indicates if Dolby Vision BL is present. - example: true - DOVIELPresent: - type: boolean - description: Indicates if Dolby Vision EL is present. - example: false - DOVILevel: - type: integer - format: int32 - description: Dolby Vision level. - example: 6 - DOVIPresent: - type: boolean - description: Indicates if Dolby Vision is present. - example: true - DOVIProfile: type: integer format: int32 - description: Dolby Vision profile. - example: 8 - DOVIRPUPresent: - type: boolean - description: Indicates if Dolby Vision RPU is present. - example: true - DOVIVersion: - type: string - description: Dolby Vision version. - example: '1.0' + example: 10 bitrate: + description: Bitrate of the stream. type: integer format: int32 - description: Bitrate of the stream. example: 24743 canAutoSync: - type: boolean description: Indicates if the stream can auto-sync. + type: boolean example: false + channels: + description: Number of audio channels (for audio streams). + type: integer + format: int32 + example: 6 chromaLocation: - type: string description: Chroma sample location. + type: string example: topleft chromaSubsampling: - type: string description: Chroma subsampling format. - example: '4:2:0' + type: string + example: 14520 + closedCaptions: + type: boolean + example: true + codec: + description: Codec used by the stream. + type: string + example: hevc codedHeight: + description: Coded video height. type: integer format: int32 - description: Coded video height. example: 1608 codedWidth: + description: Coded video width. type: integer format: int32 - description: Coded video width. example: 3840 - closedCaptions: - type: boolean - example: true - codec: - description: Codec used by the stream. - type: string - example: hevc colorPrimaries: - type: string description: Color primaries used. + type: string example: bt2020 colorRange: - type: string description: Color range (e.g., tv). + type: string example: tv colorSpace: - type: string description: Color space. + type: string example: bt2020nc colorTrc: - type: string description: Color transfer characteristics. + type: string example: smpte2084 displayTitle: description: Display title for the stream. type: string - example: 4K DoVi/HDR10 (HEVC Main 10) + example: 4K DoVi/HDR10 (HEVC Main 10) + DOVIBLCompatID: + description: Dolby Vision BL compatibility ID. + type: integer + format: int32 + example: 1 + DOVIBLPresent: + description: Indicates if Dolby Vision BL is present. + type: boolean + example: true + DOVIELPresent: + description: Indicates if Dolby Vision EL is present. + type: boolean + example: false + DOVILevel: + description: Dolby Vision level. + type: integer + format: int32 + example: 6 + DOVIPresent: + description: Indicates if Dolby Vision is present. + type: boolean + example: true + DOVIProfile: + description: Dolby Vision profile. + type: integer + format: int32 + example: 8 + DOVIRPUPresent: + description: Indicates if Dolby Vision RPU is present. + type: boolean + example: true + DOVIVersion: + description: Dolby Vision version. + type: string + example: '1.0' + dub: + description: Indicates if the stream is a dub. + type: boolean + example: true + embeddedInVideo: + type: string + example: progressive extendedDisplayTitle: - type: string description: Extended display title for the stream. + type: string example: 4K DoVi/HDR10 (HEVC Main 10) + forced: + type: boolean + example: true frameRate: + description: Frame rate of the stream. type: number format: float - description: Frame rate of the stream. example: 23.976 hasScalingMatrix: type: boolean example: false + headerCompression: + description: Indicates whether header compression is enabled. + type: boolean + example: true + hearingImpaired: + description: Indicates if the stream is for the hearing impaired. + type: boolean + example: true height: + description: Height of the video stream. type: integer format: int32 - description: Height of the video stream. example: 1602 id: + description: Unique stream identifier. type: integer format: int32 - description: Unique stream identifier. example: 1002625 index: description: Index of the stream. @@ -16103,73 +18635,47 @@ components: type: string example: /library/streams/216389 language: - type: string description: Language of the stream. + type: string example: English languageCode: description: ISO language code. type: string example: eng languageTag: - type: string description: Language tag (e.g., en). - example: en - format: type: string - description: Format of the stream (e.g., srt). - example: srt - headerCompression: - type: boolean - description: Indicates whether header compression is enabled. - example: true + example: en level: + description: Video level. type: integer format: int32 - description: Video level. example: 150 original: - type: boolean description: Indicates if this is the original stream. + type: boolean example: true profile: - type: string description: Video profile. + type: string example: main 10 refFrames: + description: Number of reference frames. type: integer format: int32 - description: Number of reference frames. example: 1 samplingRate: + description: Sampling rate for the audio stream. type: integer format: int32 - description: Sampling rate for the audio stream. example: 48000 scanType: type: string example: progressive - embeddedInVideo: - type: string - example: progressive selected: - type: boolean description: Indicates if this stream is selected (applicable for audio streams). - example: true - forced: - type: boolean - example: true - hearingImpaired: - type: boolean - description: Indicates if the stream is for the hearing impaired. - example: true - dub: type: boolean - description: Indicates if the stream is a dub. example: true - title: - type: string - description: Optional title for the stream (e.g., language variant). - example: SDH streamIdentifier: type: integer format: int32 @@ -16187,23 +18693,25 @@ components: - VIDEO - AUDIO - SUBTITLE - - description: | + - description: |- Stream type: - VIDEO = 1 (Video stream) - AUDIO = 2 (Audio stream) - SUBTITLE = 3 (Subtitle stream) - width: + description: Width of the video stream. type: integer format: int32 - description: Width of the video stream. example: 3840 + required: + - id + - key + - codec + - displayTitle + - streamType Tag: - description: | - A variety of extra information about a metadata item is included as tags. These tags use their own element names such as `Genre`, `Writer`, `Directory`, and `Role`. Individual tag types may introduce their own extra attributes. + description: A variety of extra information about a metadata item is included as tags. These tags use their own element names such as `Genre`, `Writer`, `Directory`, and `Role`. Individual tag types may introduce their own extra attributes. type: object - required: - - tag properties: confidence: description: Measure of the confidence of an automatic tag @@ -16218,9 +18726,9 @@ components: type: integer format: int32 ratingKey: - description: "The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API." + description: 'The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API.' type: string - example: "58683" + example: '58683' role: description: The role this actor played type: string @@ -16239,8 +18747,26 @@ components: thumb: type: string example: http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg + required: + - tag Thumb: type: string + TimelineEntry: + description: A timeline update entry delivered via WebSocket or EventSource + type: object + properties: + title: + type: string + type: + type: integer + itemID: + type: integer + metadataState: + type: string + playQueueItemID: + type: integer + state: + type: integer Title: type: string TranscodeSession: @@ -16279,117 +18805,170 @@ components: type: boolean Type: type: string + UpdaterRelease: + type: object + properties: + added: + description: A list of what has been added in this version + type: string + downloadURL: + description: The URL of where this update is available + type: string + fixed: + description: A list of what has been fixed in this version + type: string + key: + description: The URL key of the update + type: string + state: + description: |- + The status of this update. + + - available - This release is available + - downloading - This release is downloading + - downloaded - This release has been downloaded + - installing - This release is installing + - tonight - This release will be installed tonight + - skipped - This release has been skipped + - error - This release has an error + - notify - This release is only notifying it is available (typically because it cannot be installed on this setup) + - done - This release is complete + type: string + enum: + - available + - downloading + - downloaded + - installing + - tonight + - skipped + - error + - notify + - done + version: + description: The version available + type: string + User: + description: The user playing the content + type: object + properties: + title: + description: The username + type: string + id: + description: The id of the user + type: string + thumb: + description: Thumb image to display for the user + type: string UserPlexAccount: title: UserPlexAccount type: object - required: - - authToken - - email - - friendlyName - - hasPassword - - id - - joinedAt - - title - - twoFactorEnabled - - username - - uuid properties: + title: + description: The title of the account (username or friendly name) + type: string + example: UsernameTitle adsConsent: + description: Unknown type: - boolean - 'null' - description: Unknown adsConsentReminderAt: oneOf: - - $ref: '#/components/schemas/PlexDateTime' + - $ref: "#/components/schemas/PlexDateTime" - type: 'null' adsConsentSetAt: oneOf: - - $ref: '#/components/schemas/PlexDateTime' + - $ref: "#/components/schemas/PlexDateTime" - type: 'null' anonymous: + description: Unknown type: - boolean - 'null' - description: Unknown default: false + attributionPartner: + type: + - string + - 'null' + example: null authToken: - type: string description: The account token + type: string example: CxoUzBTSV5hsxjTpFKaf backupCodesCreated: - type: boolean description: If the two-factor authentication backup codes have been created + type: boolean default: false confirmed: - type: boolean description: If the account has been confirmed + type: boolean default: false country: - type: string description: The account country + type: string example: US - maxLength: 2 minLength: 2 + maxLength: 2 email: - type: string description: The account email address + type: string format: email example: username@email.com emailOnlyAuth: - type: boolean description: If login with email only is enabled + type: boolean default: false + entitlements: + description: List of devices your allowed to use with this account + type: array + example: '[]' + items: + type: string experimentalFeatures: - type: boolean description: If experimental features are enabled + type: boolean default: false friendlyName: - type: string description: Your account full name + type: string example: friendlyUsername - entitlements: - type: array - description: List of devices your allowed to use with this account - items: - type: string - example: '[]' guest: - type: boolean description: If the account is a Plex Home guest user + type: boolean default: false hasPassword: - type: boolean description: If the account has a password + type: boolean default: true home: - type: boolean description: If the account is a Plex Home user + type: boolean default: false homeAdmin: - type: boolean description: If the account is the Plex Home admin + type: boolean default: false homeSize: - type: integer description: The number of accounts in the Plex Home - example: 1 + type: integer format: int32 + example: 1 id: - type: integer description: The Plex account ID - example: 13692262 + type: integer format: int32 + example: 13692262 joinedAt: - $ref: '#/components/schemas/PlexDateTime' + $ref: "#/components/schemas/PlexDateTime" locale: + description: The account locale type: - string - 'null' - description: The account locale mailingListActive: - type: boolean description: If you are subscribed to the Plex newsletter + type: boolean default: false mailingListStatus: description: Your current mailing list status @@ -16397,87 +18976,90 @@ components: - active - unsubscribed - removed + example: active x-speakeasy-enums: - ACTIVE - UNSUBSCRIBED - REMOVED - example: active maxHomeSize: - type: integer description: The maximum number of accounts allowed in the Plex Home - example: 15 + type: integer format: int32 + example: 15 pin: - type: string - description: '[Might be removed] The hashed Plex Home PIN ' + description: '[Might be removed] The hashed Plex Home PIN' deprecated: true + type: string profile: - $ref: '#/components/schemas/UserProfile' + $ref: "#/components/schemas/UserProfile" protected: - type: boolean description: If the account has a Plex Home PIN enabled + type: boolean default: false rememberExpiresAt: - $ref: '#/components/schemas/PlexDateTime' + $ref: "#/components/schemas/PlexDateTime" restricted: - type: boolean description: If the account is a Plex Home managed user + type: boolean default: false roles: - type: array description: '[Might be removed] List of account roles. Plexpass membership listed here' + type: array items: type: string scrobbleTypes: - type: string description: Unknown + type: string services: type: array items: type: object - required: - - identifier - - endpoint - - token - - secret - - status properties: - identifier: - type: string - example: metadata-dev endpoint: type: string - example: 'https://epg.provider.plex.tv' format: uri - token: - type: - - string - - 'null' - example: DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv + example: https://epg.provider.plex.tv + identifier: + type: string + example: metadata-dev secret: type: - string - 'null' status: - example: online - x-speakeasy-unknown-values: allow enum: - online - offline + example: online x-speakeasy-enums: - ONLINE - OFFLINE + x-speakeasy-unknown-values: allow + token: + type: + - string + - 'null' + example: DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv + required: + - identifier + - endpoint + - token + - secret + - status subscription: - description: If the account's Plex Pass subscription is active title: Subscription + description: If the account's Plex Pass subscription is active type: object properties: + active: + description: If the account's Plex Pass subscription is active + type: boolean + example: true features: description: List of features allowed on your Plex Pass subscription type: array items: - type: string - description: | + description: |- - Android - Dolby Vision - Android - PiP - CU Sunset @@ -16582,53 +19164,53 @@ components: - Subtitles on Demand - ultrablur - web-desktop-gracenote-banner - active: - description: If the account's Plex Pass subscription is active - type: boolean - example: true - subscribedAt: - description: Date the account subscribed to Plex Pass + type: string + paymentService: + description: Payment service used for your Plex Pass subscription + type: + - string + - 'null' + plan: + description: Name of Plex Pass subscription plan type: - string - 'null' - example: '2021-04-12T18:21:12Z' status: description: String representation of subscriptionActive - example: Inactive - x-speakeasy-unknown-values: allow enum: - Inactive - Active + example: Inactive x-speakeasy-enums: - INACTIVE - ACTIVE - paymentService: - description: Payment service used for your Plex Pass subscription - type: - - string - - 'null' - plan: - description: Name of Plex Pass subscription plan + x-speakeasy-unknown-values: allow + subscribedAt: + description: Date the account subscribed to Plex Pass type: - string - 'null' + example: "2021-04-12T18:21:12Z" subscriptionDescription: + description: Description of the Plex Pass subscription type: - string - 'null' - description: Description of the Plex Pass subscription subscriptions: type: array items: title: Subscription type: object properties: + active: + description: If the account's Plex Pass subscription is active + type: boolean + example: true features: description: List of features allowed on your Plex Pass subscription type: array items: - type: string - description: | + description: |- - Android - Dolby Vision - Android - PiP - CU Sunset @@ -16733,89 +19315,82 @@ components: - Subtitles on Demand - ultrablur - web-desktop-gracenote-banner - active: - description: If the account's Plex Pass subscription is active - type: boolean - example: true - subscribedAt: - description: Date the account subscribed to Plex Pass + type: string + paymentService: + description: Payment service used for your Plex Pass subscription + type: + - string + - 'null' + plan: + description: Name of Plex Pass subscription plan type: - string - 'null' - example: '2021-04-12T18:21:12Z' status: description: String representation of subscriptionActive - example: Inactive - x-speakeasy-unknown-values: allow enum: - Inactive - Active - paymentService: - description: Payment service used for your Plex Pass subscription - type: - - string - - 'null' - plan: - description: Name of Plex Pass subscription plan + example: Inactive + x-speakeasy-unknown-values: allow + subscribedAt: + description: Date the account subscribed to Plex Pass type: - string - 'null' + example: "2021-04-12T18:21:12Z" thumb: - type: string description: URL of the account thumbnail - format: uri - example: 'https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101' - title: type: string - description: The title of the account (username or friendly name) - example: UsernameTitle + format: uri + example: https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101 twoFactorEnabled: - type: boolean description: If two-factor authentication is enabled + type: boolean default: false username: - type: string description: The account username + type: string example: Username uuid: - type: string description: The account UUID + type: string example: dae343c1f45beb4f - attributionPartner: - type: - - string - - 'null' - example: null - PlexDateTime: - type: - - integer - example: 1556281940 - description: Unix epoch datetime in seconds - format: int64 + required: + - authToken + - email + - friendlyName + - hasPassword + - id + - joinedAt + - title + - twoFactorEnabled + - username + - uuid UserProfile: title: UserProfile type: object - required: - - autoSelectAudio - - defaultAudioLanguage - - defaultSubtitleLanguage - - autoSelectSubtitle - - defaultSubtitleAccessibility - - defaultSubtitleForced - - watchedIndicator - - mediaReviewsVisibility properties: autoSelectAudio: description: If the account has automatically select audio and subtitle tracks enabled type: boolean - example: true default: true - defaultAudioLanguage: - description: The preferred audio language for the account - type: - - string - - 'null' - example: ja + example: true + autoSelectSubtitle: + allOf: + - type: integer + format: int32 + enum: + - 0 + - 1 + - 2 + default: 0 + example: 1 + x-speakeasy-enums: + - MANUALLY_SELECTED + - SHOWN_WITH_FOREIGN_AUDIO + - ALWAYS_ENABLED + - description: The auto-select subtitle mode (0 = Manually selected, 1 = Shown with foreign audio, 2 = Always enabled) defaultAudioAccessibility: allOf: - type: integer @@ -16825,51 +19400,28 @@ components: - 1 - 2 - 3 - example: 0 default: 0 + example: 0 x-speakeasy-enums: - PREFER_NON_ACCESSIBILITY - PREFER_ACCESSIBILITY - ONLY_ACCESSIBILITY - ONLY_NON_ACCESSIBILITY - - description: 'The audio accessibility mode (0 = Prefer non-accessibility audio, 1 = Prefer accessibility audio, 2 = Only show accessibility audio, 3 = Only show non-accessibility audio)' - defaultAudioLanguages: - description: The preferred audio languages for the account - type: - - array - - 'null' - items: - type: string - example: null - defaultSubtitleLanguage: - description: The preferred subtitle language for the account + - description: The audio accessibility mode (0 = Prefer non-accessibility audio, 1 = Prefer accessibility audio, 2 = Only show accessibility audio, 3 = Only show non-accessibility audio) + defaultAudioLanguage: + description: The preferred audio language for the account type: - string - 'null' - example: en - defaultSubtitleLanguages: - description: The preferred subtitle languages for the account + example: ja + defaultAudioLanguages: + description: The preferred audio languages for the account type: - array - 'null' + example: null items: type: string - example: null - autoSelectSubtitle: - allOf: - - type: integer - format: int32 - enum: - - 0 - - 1 - - 2 - example: 1 - default: 0 - x-speakeasy-enums: - - MANUALLY_SELECTED - - SHOWN_WITH_FOREIGN_AUDIO - - ALWAYS_ENABLED - - description: 'The auto-select subtitle mode (0 = Manually selected, 1 = Shown with foreign audio, 2 = Always enabled)' defaultSubtitleAccessibility: allOf: - type: integer @@ -16879,14 +19431,14 @@ components: - 1 - 2 - 3 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - PREFER_NON_SDH - PREFER_SDH - ONLY_SDH - ONLY_NON_SDH - - description: 'The subtitles for the deaf or hard-of-hearing (SDH) searches mode (0 = Prefer non-SDH subtitles, 1 = Prefer SDH subtitles, 2 = Only show SDH subtitles, 3 = Only show non-SDH subtitles)' + - description: The subtitles for the deaf or hard-of-hearing (SDH) searches mode (0 = Prefer non-SDH subtitles, 1 = Prefer SDH subtitles, 2 = Only show SDH subtitles, 3 = Only show non-SDH subtitles) defaultSubtitleForced: allOf: - type: integer @@ -16896,15 +19448,37 @@ components: - 1 - 2 - 3 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - PREFER_NON_FORCED - PREFER_FORCED - ONLY_FORCED - ONLY_NON_FORCED - - description: 'The forced subtitles searches mode (0 = Prefer non-forced subtitles, 1 = Prefer forced subtitles, 2 = Only show forced subtitles, 3 = Only show non-forced subtitles)' - watchedIndicator: + - description: The forced subtitles searches mode (0 = Prefer non-forced subtitles, 1 = Prefer forced subtitles, 2 = Only show forced subtitles, 3 = Only show non-forced subtitles) + defaultSubtitleLanguage: + description: The preferred subtitle language for the account + type: + - string + - 'null' + example: en + defaultSubtitleLanguages: + description: The preferred subtitle languages for the account + type: + - array + - 'null' + example: null + items: + type: string + mediaReviewsLanguages: + description: The languages for media reviews visibility + type: + - array + - 'null' + example: null + items: + type: string + mediaReviewsVisibility: allOf: - type: integer format: int32 @@ -16913,15 +19487,15 @@ components: - 1 - 2 - 3 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - - NONE - - MOVIES_AND_TV_SHOWS - - MOVIES - - TV_SHOWS - - description: Whether or not media watched indicators are enabled (little orange dot on media) - mediaReviewsVisibility: + - NO_ONE + - CRITICS_ONLY + - PLEX_USERS_ONLY + - PLEX_USERS_AND_CRITICS + - description: Whether or not the account has media reviews visibility enabled + watchedIndicator: allOf: - type: integer format: int32 @@ -16930,60 +19504,20 @@ components: - 1 - 2 - 3 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - - NO_ONE - - CRITICS_ONLY - - PLEX_USERS_ONLY - - PLEX_USERS_AND_CRITICS - - description: Whether or not the account has media reviews visibility enabled - mediaReviewsLanguages: - description: The languages for media reviews visibility - type: - - array - - 'null' - items: - type: string - example: null - MediaQuery: - description: | - A querystring-based filtering language used to select subsets of media. When provided as an object, properties are serialized as a querystring using form style with explode. - - Only the defined properties below are allowed. The object serializes to a querystring format like: `type=4&sourceType=2&sort=duration:desc,index` - type: object - additionalProperties: false - properties: - type: - description: | - The type of media to retrieve or filter by. - $ref: '#/components/schemas/MediaType' - sourceType: - description: Change the default level to which fields refer (used with type for hierarchical queries) - type: integer - sort: - description: Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") - type: string - group: - description: Field to group results by (similar to SQL GROUP BY) - type: string - limit: - description: Maximum number of results to return - type: integer - example: - type: 4 - sourceType: 2 - sort: "duration:desc,index" - User: - description: The user playing the content - type: object - properties: - title: - description: The username - type: string - id: - description: The id of the user - type: string - thumb: - description: Thumb image to display for the user - type: string + - NONE + - MOVIES_AND_TV_SHOWS + - MOVIES + - TV_SHOWS + - description: Whether or not media watched indicators are enabled (little orange dot on media) + required: + - autoSelectAudio + - defaultAudioLanguage + - defaultSubtitleLanguage + - autoSelectSubtitle + - defaultSubtitleAccessibility + - defaultSubtitleForced + - watchedIndicator + - mediaReviewsVisibility diff --git a/review/PLEX_API_SPEC_FULL_REVIEW.md b/review/PLEX_API_SPEC_FULL_REVIEW.md new file mode 100644 index 000000000..298dead03 --- /dev/null +++ b/review/PLEX_API_SPEC_FULL_REVIEW.md @@ -0,0 +1,828 @@ +# Plex OpenAPI Specification — Full Review & Gap Analysis + +**Date:** 2026-06-03 +**Spec Analyzed:** `plex-api-spec.yaml` (≈17,000 lines, OpenAPI 3.1.1) +**Research Inputs:** 10 domain reports from Phase 1 (SDK gap analysis, integration ecosystem survey, undocumented endpoint research) and Phase 2 (domain-specific reviews). +**Scope:** PMS local server API, plex.tv cloud API, client remote-control protocol, cloud providers, real-time event streams, and webhook payloads. + +--- + +## Table of Contents + +1. [Executive Summary](#1-executive-summary) +2. [Missing Endpoints](#2-missing-endpoints) +3. [Schema Corrections](#3-schema-corrections) +4. [Parameter & Query String Corrections](#4-parameter--query-string-corrections) +5. [Response Corrections](#5-response-corrections) +6. [Security & Auth Improvements](#6-security--auth-improvements) +7. [Documentation Improvements](#7-documentation-improvements) +8. [Speakeasy / SDK Generator Improvements](#8-speakeasy--sdk-generator-improvements) +9. [Appendix: Raw Research Files](#9-appendix-raw-research-files) + +--- + +## 1. Executive Summary + +### High-Level Stats + +| Metric | Count | +|--------|-------| +| **Endpoints present in spec (reviewed)** | ~235 | +| **Missing endpoints identified** | ~175 | +| **Schema components with issues** | ~32 | +| **Individual schema field/type gaps** | ~75 | +| **Parameter / query gaps** | ~80 | +| **Response / status-code issues** | ~15 | +| **Auth / security gaps** | ~18 | +| **Documentation issues (typos, missing desc, examples, tags)** | ~45 | + +### Coverage by Domain + +| Domain | Present | Missing | Priority | +|--------|---------|---------|----------| +| plex.tv Auth & Account | 6 | ~40 | **CRITICAL / HIGH** | +| Plex Cloud Providers (Discover, VOD, Music) | 0 | ~7 | **HIGH** | +| Server Management & System | ~35 | ~20 | MEDIUM | +| Library & Metadata | ~85 | ~35 | MEDIUM / HIGH | +| Playback & Sessions | ~25 | ~30 | HIGH | +| Live TV & DVR | ~25 | ~7 | MEDIUM | +| Devices & Download Queue | ~20 | ~10 | MEDIUM | +| Client Remote-Control | 0 | ~25 | **HIGH** | +| Webhooks & Real-Time | 1 (WS path, no schema) | ~3 | MEDIUM / HIGH | + +### Key Takeaways + +1. **The spec is PMS-centric and omits the entire plex.tv v2 surface.** Authentication (OAuth PIN, JWT device registration, sign-out), account management, sharing, Plex Home, and webhooks are almost entirely absent. This blocks every modern third-party integration from generating a working auth flow. +2. **Client remote control is undocumented.** The `/player/playback/*` and `/player/timeline/poll` endpoints are the backbone of Plex client control but do not appear in the spec. +3. **Cloud provider endpoints (Discover, VOD, Music) are missing.** Watchlist, search, and add/remove actions on `discover.provider.plex.tv` are now canonical but undocumented. +4. **Schema reuse is poor.** `Activity`, `ButlerTask`, `UpdaterStatus`, `DeviceChannel`, `DownloadQueue`, `DownloadQueueItem`, `DVR`, `HistoryItem`, `PlayQueue`, and others are defined inline or duplicated instead of using `$ref`. +5. **The include/exclude parameter matrix is missing.** Critical parameters such as `includeMarkers`, `includeGuids`, `includeChapters`, `includeExtras`, `includeRelated`, and `excludeFields` are mentioned only in descriptions or missing entirely. +6. **XML-first behavior is not explained.** Many fields (blur hashes, loudness ramps, sync states) only appear in XML responses and are absent from JSON unless explicitly requested. + +--- + +## 2. Missing Endpoints + +### 2.1 plex.tv Authentication & Account + +| Endpoint | Method | Priority | Source(s) | Why it matters | +|----------|--------|----------|-----------|----------------| +| `https://plex.tv/api/v2/pins` | `POST` | **CRITICAL** | Tautulli, Overseerr, Bazarr, python-plexapi, undocumented endpoints | OAuth PIN generation — entry point for every modern integration | +| `https://plex.tv/api/v2/pins/{pinId}` | `GET` | **CRITICAL** | Tautulli, Overseerr, Bazarr, python-plexapi | Poll PIN status; returns `authToken` when claimed | +| `https://plex.tv/api/v2/pins/link` | `PUT` | **CRITICAL** | python-plexapi, undocumented endpoints | Link a PIN to an account (OAuth completion) | +| `https://clients.plex.tv/api/v2/pins` | `POST` | **CRITICAL** | python-plexapi, undocumented endpoints | Alternative PIN endpoint (clients subdomain) | +| `https://plex.tv/api/v2/users/signout` | `DELETE` | **HIGH** | python-plexapi, undocumented endpoints | Invalidate token | +| `https://plex.tv/api/v2/ping` | `GET` | **HIGH** | Tautulli, Overseerr, python-plexapi, undocumented endpoints | Token refresh / health check (no auth required) | +| `https://plex.tv/api/v2/features` | `GET` | **HIGH** | Plex Forum, undocumented endpoints | Plex Pass feature flags | +| `https://plex.tv/api/v2/friends` | `GET` | **HIGH** | Plex Forum, undocumented endpoints | Friends & shared users (v2 JSON) | +| `https://plex.tv/api/v2/home` | `GET` | **HIGH** | Plex Forum, undocumented endpoints | Plex Home user list | +| `https://plex.tv/api/v2/server` | `GET` | **HIGH** | Plex Forum, undocumented endpoints | Server association info for logged-in user | +| `https://plex.tv/api/v2/users/password` | `POST` | **HIGH** | Plex Forum, undocumented endpoints | Change / reset password | +| `https://plex.tv/api/v2/user/view_state_sync` | `PUT` | **HIGH** | python-plexapi, undocumented endpoints | Enable/disable watch-state sync consent | +| `https://plex.tv/api/v2/user/{uuid}/settings/opt_outs` | `GET` | **HIGH** | python-plexapi, undocumented endpoints | Online-media-source opt-outs | +| `https://plex.tv/users/account` | `GET` | **HIGH** | Tautulli, Overseerr, undocumented endpoints | Own account details (XML) | +| `https://plex.tv/users/account.json` | `GET` | **HIGH** | Tautulli, Overseerr | Own account details (JSON) | +| `https://plex.tv/api/v2/shared_servers` | `POST` | **HIGH** | python-plexapi, Plexopedia, undocumented endpoints | Share a server with a user | +| `https://plex.tv/api/v2/sharings/{userId}` | `PUT` | **HIGH** | python-plexapi, undocumented endpoints | Update friend filters (allowSync, filterMovies, etc.) | +| `https://plex.tv/api/v2/sharings/{userId}` | `DELETE` | **HIGH** | python-plexapi, undocumented endpoints | Remove a share / friend | +| `https://plex.tv/api/v2/home/users/restricted/{userId}` | `PUT` | **HIGH** | python-plexapi, undocumented endpoints | Update restricted (managed) home user settings | +| `https://plex.tv/api/home/users` | `GET` / `POST` | **HIGH** | python-plexapi | List / create Plex Home users | +| `https://plex.tv/api/home/users/{userId}` | `DELETE` / `PUT` | **HIGH** | python-plexapi | Remove / update home user | +| `https://plex.tv/api/home/users/{id}/switch` | `POST` | **HIGH** | python-plexapi | Switch to home user (returns new auth token) | +| `https://plex.tv/api/servers/{machineId}/shared_servers` | `POST` | **HIGH** | python-plexapi, Tautulli, undocumented endpoints | Share library with friend (legacy v1) | +| `https://plex.tv/api/servers/{machineId}` | `GET` | **HIGH** | python-plexapi, undocumented endpoints | Server details for sharing | +| `https://plex.tv/api/claim/token.json` | `GET` | **HIGH** | python-plexapi | Claim token for new servers | +| `POST /myplex/claim` | `POST` | **HIGH** | python-plexapi, devices review | Claim server on PMS using claim token | +| `https://plex.tv/api/v2/server/access_tokens` | `GET` | **MEDIUM** | CVE-2025-34158 write-up, undocumented endpoints | List access tokens for the server | +| `https://plex.tv/api/v2/server/users/features` | `GET` | **MEDIUM** | Plex Forum, undocumented endpoints | Features enabled per shared user | +| `https://plex.tv/api/v2/cloud_server` | `GET` | **MEDIUM** | Tautulli | Plex Cloud status | +| `https://plex.tv/api/v2/geoip` | `GET` | **MEDIUM** | Tautulli | GeoIP lookup | +| `https://plex.tv/:/ip` | `GET` | **MEDIUM** | Tautulli | Public IP detection | +| `https://plex.tv/api/downloads/{channel}.json` | `GET` | **LOW** | Tautulli | Plex update downloads | +| `https://plex.tv/pins.xml` | `POST` | **LOW** | plexargod, undocumented endpoints | Legacy PIN creation (XML) | +| `https://plex.tv/pins/{pinId}` | `GET` | **LOW** | plexargod, undocumented endpoints | Legacy PIN check (XML) | +| `https://plex.tv/api/resources` | `GET` | **LOW** | plexargod, undocumented endpoints | Legacy published server connections (XML) | +| `https://plex.tv/api/users/` | `GET` | **LOW** | python-plexapi, undocumented endpoints | Legacy friends list (XML) | +| `https://clients.plex.tv/devices.xml` | `GET` | **LOW** | CVE-2025-34158 write-up, undocumented endpoints | Authorized devices with tokens (XML) | + +### 2.2 JWT Device Registration (new 2025) + +| Endpoint | Method | Priority | Source(s) | Why it matters | +|----------|--------|----------|-----------|----------------| +| `https://clients.plex.tv/api/v2/auth/jwk` | `POST` | **MEDIUM** | Plex Pro Week blog, JonnyWong16 gist | Register device public key (JWK) | +| `https://clients.plex.tv/api/v2/auth/nonce` | `GET` | **MEDIUM** | JonnyWong16 gist | Get nonce to sign in client JWT | +| `https://clients.plex.tv/api/v2/auth/token` | `POST` | **MEDIUM** | JonnyWong16 gist | Exchange signed client JWT for Plex JWT | +| `https://clients.plex.tv/api/v2/auth/keys` | `GET` | **MEDIUM** | JonnyWong16 gist | Plex public JWKs for signature verification | + +### 2.3 Plex Cloud Providers (Discover, VOD, Music, Metadata) + +| Endpoint | Method | Priority | Source(s) | Why it matters | +|----------|--------|----------|-----------|----------------| +| `https://discover.provider.plex.tv/library/search` | `GET` | **HIGH** | python-plexapi, Overseerr, Jellyseerr, undocumented endpoints | Discover search (movies & shows) | +| `https://discover.provider.plex.tv/library/sections/watchlist/all` | `GET` | **HIGH** | Overseerr, Jellyseerr, undocumented endpoints | Plex Discover watchlist | +| `https://discover.provider.plex.tv/actions/addToWatchlist` | `POST` | **HIGH** | pd_zurg, undocumented endpoints | Add to watchlist | +| `https://discover.provider.plex.tv/actions/removeFromWatchlist` | `POST` | **HIGH** | pd_zurg, undocumented endpoints | Remove from watchlist | +| `https://metadata.provider.plex.tv/library/sections/watchlist/all` *(deprecated)* | `GET` | **LOW** | Tautulli, undocumented endpoints | Legacy watchlist (deprecated Oct 2025) | +| `https://metadata.provider.plex.tv/actions/addToWatchlist` *(deprecated)* | `POST` | **LOW** | undocumented endpoints | Legacy add (deprecated) | +| `https://metadata.provider.plex.tv/actions/removeFromWatchlist` *(deprecated)* | `POST` | **LOW** | undocumented endpoints | Legacy remove (deprecated) | +| `https://vod.provider.plex.tv/hubs` | `GET` | **HIGH** | python-plexapi, Netify, undocumented endpoints | VOD hub items | +| `https://music.provider.plex.tv/hubs` | `GET` | **HIGH** | python-plexapi, undocumented endpoints | Tidal / music hub items | + +### 2.4 Server Management & System + +| Endpoint | Method | Priority | Source(s) | Why it matters | +|----------|--------|----------|-----------|----------------| +| `/library` | `GET` | **MEDIUM** | python-plexapi | Root Library object | +| `/library/sections/` | `GET` | **MEDIUM** | python-plexapi | Fallback for non-owners to list sections | +| `/servers` | `GET` | **MEDIUM** | Tautulli | Local server list | +| `/accounts` | `GET` | **MEDIUM** | python-plexapi, Home Assistant | Local system accounts | +| `/devices` | `GET` | **MEDIUM** | python-plexapi | Local system devices | +| `/clients` | `GET` | **MEDIUM** | python-plexapi, Home Assistant | Lists connected Plex clients | +| `/system/agents` | `GET` | **MEDIUM** | python-plexapi, undocumented endpoints | Lists available metadata agents | +| `/system/agents/{agentId}` | `GET` | **MEDIUM** | undocumented endpoints | Agent details & settings | +| `/system/settings` | `GET` | **MEDIUM** | undocumented endpoints | System-level settings | +| `/system/updates` | `GET` | **MEDIUM** | undocumented endpoints | Check for PMS updates | +| `/services/browse` | `GET` | **MEDIUM** | python-plexapi | Browse filesystem paths | +| `/services/browse/{base64path}` | `GET` | **MEDIUM** | python-plexapi | Browse specific filesystem path | +| `/diagnostics` | `GET` | **MEDIUM** | undocumented endpoints | Server diagnostics overview | +| `/diagnostics/databases` | `GET` | **MEDIUM** | python-plexapi | Download server DB diagnostics | +| `/diagnostics/logs` | `GET` | **MEDIUM** | python-plexapi | Download server logs bundle | +| `/statistics/bandwidth` | `GET` | **MEDIUM** | python-plexapi | Dashboard bandwidth data | +| `/statistics/resources` | `GET` | **MEDIUM** | python-plexapi | Dashboard resource data | +| `/myplex/account` | `GET` | **MEDIUM** | Tautulli | Linked MyPlex account info on PMS | +| `/myplex/refreshReachability` | `PUT` | **MEDIUM** | Tautulli | Refresh remote access port mapping | +| `/sync` | `GET` | **MEDIUM** | undocumented endpoints | Sync status overview | +| `/sync/items` | `GET` | **MEDIUM** | undocumented endpoints | Sync items list | +| `/sync/items/{syncId}` | `GET` | **MEDIUM** | Tautulli | Sync item details | +| `/sync/queue` | `GET` | **MEDIUM** | undocumented endpoints | Sync queue | +| `/sync/transcodeQueue` | `GET` | **MEDIUM** | Tautulli | Sync transcode queue status | +| `/sync/refreshSynclists` | `PUT` | **MEDIUM** | python-plexapi | Force PMS to download new SyncList from plex.tv | +| `/sync/refreshContent` | `PUT` | **MEDIUM** | python-plexapi | Force PMS to refresh content for known SyncLists | +| `/transcode/sessions` | `GET` | **MEDIUM** | undocumented endpoints, server review | Active transcode sessions | + +### 2.5 Library & Metadata + +| Endpoint | Method | Priority | Source(s) | Why it matters | +|----------|--------|----------|-----------|----------------| +| `/library/sections/{id}/onDeck` | `GET` | **MEDIUM** | client traffic, undocumented endpoints | On-deck items for this section | +| `/library/sections/{id}/unwatched` | `GET` | **MEDIUM** | client traffic | Unwatched items | +| `/library/sections/{id}/newest` | `GET` | **MEDIUM** | client traffic | Newest additions | +| `/library/sections/{id}/recentlyAdded` | `GET` | **MEDIUM** | Tautulli | Per-library recently added | +| `/library/sections/{id}/byYear` | `GET` | **LOW** | client traffic | Browse by year | +| `/library/sections/{id}/byDecade` | `GET` | **LOW** | client traffic | Browse by decade | +| `/library/sections/{id}/byContentRating` | `GET` | **LOW** | client traffic | Browse by content rating | +| `/library/sections/{id}/byResolution` | `GET` | **LOW** | client traffic | Browse by resolution | +| `/library/sections/{id}/byFolder` | `GET` | **LOW** | client traffic | Browse by folder | +| `/library/sections/{id}/agents` | `GET` | **LOW** | client traffic | Available agents for this section | +| `/library/sections/{id}/match` | `GET` | **LOW** | client traffic | Match items in section | +| `/library/sections/{id}/unmatch` | `GET` | **LOW** | client traffic | Unmatch items in section | +| `/library/sections/{id}/edit` | `GET` / `PUT` | **LOW** | client traffic | Edit section metadata | +| `/library/sections/{id}/move` | `PUT` | **LOW** | client traffic | Move section paths | +| `/library/sections/{id}/settings` | `GET` | **LOW** | client traffic | Section-specific settings | +| `/library/sections/{id}/playlists` | `GET` | **LOW** | client traffic | Playlists belonging to section | +| `/library/sections/{id}/hubs` | `GET` | **LOW** | client traffic | Hubs for this section | +| `/library/sections/{id}/timeline` | `GET` | **LOW** | client traffic | Section timeline | +| `/library/sections/{id}/search` | `GET` | **LOW** | client traffic | Section-scoped search | +| `/library/sections/{id}/tags` | `GET` | **LOW** | client traffic | Tags in section | +| `/library/sections/{id}/label` | `GET` | **MEDIUM** | Tautulli, Kometa | Labels for a library | +| `/library/sections/{id}/artists` | `GET` | **LOW** | client traffic | Artists (music) | +| `/library/sections/{id}/shows` | `GET` | **LOW** | client traffic | Shows (TV) | +| `/library/sections/{id}/episodes` | `GET` | **LOW** | client traffic | Episodes | +| `/library/sections/{id}/movies` | `GET` | **LOW** | client traffic | Movies | +| `/library/sections/{id}/clips` | `GET` | **LOW** | client traffic | Clips | +| `/library/sections/{id}/photos` | `GET` | **LOW** | client traffic | Photos | +| `/library/sections/{id}/refresh` | `GET` / `POST` | **MEDIUM** | Kometa | Trigger library refresh | +| `/library/sections/{id}/emptyTrash` | `GET` / `POST` | **MEDIUM** | Kometa | Empty library trash | +| `/library/sections/{id}/optimize` | `GET` / `POST` | **MEDIUM** | Kometa | Optimize database for a library | +| `/library/optimize` | `GET` / `POST` | **MEDIUM** | Kometa | Global database optimize | +| `/library/recentlyAdded` | `GET` | **MEDIUM** | Tautulli | Global recently added | +| `/library/metadata/{id}/children` | `GET` | **MEDIUM** | SDK, client traffic | Children of show/season/artist/album | +| `/library/metadata/{id}/grandchildren` | `GET` | **MEDIUM** | Tautulli | Grandchildren (episodes under show) | +| `/library/metadata/{id}/onDeck` | `GET` | **LOW** | client traffic | On-deck for this show/season | +| `/library/metadata/{id}/reviews` | `GET` | **LOW** | client traffic | User reviews | +| `/library/metadata/{id}/parent` | `GET` | **LOW** | client traffic | Parent metadata shortcut | +| `/library/metadata/{id}/grandparent` | `GET` | **LOW** | client traffic | Grandparent metadata shortcut | +| `/library/metadata/{id}/nearest` | `GET` | **MEDIUM** | python-plexapi | Sonically similar items | +| `/library/metadata/{id}/posters` | `POST` | **MEDIUM** | Kometa | Upload custom poster image | +| `/library/metadata/{id}/arts` | `POST` | **MEDIUM** | Kometa | Upload custom background art | +| `/library/sections/{id}/computePath` | `GET` | **MEDIUM** | python-plexapi | Sonic adventure path | +| `/hubs/home/recentlyAdded` | `GET` | **MEDIUM** | Tautulli | Hub-centric recently added | +| `/hubs/continueWatching/items` | `GET` | **MEDIUM** | python-plexapi | Direct access to Continue Watching items | + +### 2.6 Playback & Sessions + +| Endpoint | Method | Priority | Source(s) | Why it matters | +|----------|--------|----------|-----------|----------------| +| `/:/websockets/notifications` | `WS` | **HIGH** | Tautulli, Home Assistant | Real-time event bus (sessions, timeline, status) | +| `/playlists?type=42` | `GET` / `DELETE` | **MEDIUM** | python-plexapi | Optimized / Conversion items | +| `/playQueues/1` | `GET` | **MEDIUM** | python-plexapi | Conversion queue | +| `/:/progress` | `GET` | **MEDIUM** | python-plexapi | Updates watch progress | +| `/actions/removeFromContinueWatching` | `PUT` | **MEDIUM** | python-plexapi | Removes item from Continue Watching | +| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s` | `GET` | **MEDIUM** | UnicornTranscoder, undocumented endpoints | DASH segment delivery | +| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts` | `GET` | **MEDIUM** | undocumented endpoints | HLS TS segment delivery | +| `/music/:/transcode` | `GET` | **MEDIUM** | undocumented endpoints | Audio transcode endpoint | +| `/player/timeline/poll` | `GET` | **HIGH** | python-plexapi | Poll client playback timeline | +| `/player/playback/playMedia` | `POST` | **HIGH** | python-plexapi | Play specific media on client | +| `/player/playback/setParameters` | `POST` | **HIGH** | python-plexapi | Set shuffle/repeat/volume | +| `/player/playback/setStreams` | `POST` | **HIGH** | python-plexapi | Set active audio/subtitle/video streams | +| `/player/playback/play` | `POST` | **HIGH** | undocumented endpoints | Start playback on client | +| `/player/playback/pause` | `POST` | **HIGH** | undocumented endpoints | Pause client | +| `/player/playback/stop` | `POST` | **HIGH** | undocumented endpoints | Stop client | +| `/player/playback/seek` | `POST` | **HIGH** | undocumented endpoints | Seek to time | +| `/player/playback/skipTo` | `POST` | **HIGH** | undocumented endpoints | Skip to item | +| `/player/playback/skipBy` | `POST` | **HIGH** | undocumented endpoints | Skip forward/backward | +| `/player/playback/stepForward` | `POST` | **HIGH** | undocumented endpoints | Step forward | +| `/player/playback/stepBack` | `POST` | **HIGH** | undocumented endpoints | Step back | +| `/player/playback/subtitleStream` | `POST` | **MEDIUM** | undocumented endpoints | Change subtitle stream | +| `/player/playback/audioStream` | `POST` | **MEDIUM** | undocumented endpoints | Change audio stream | +| `/player/playback/videoStream` | `POST` | **MEDIUM** | undocumented endpoints | Change video stream | +| `/player/playback/volume` | `POST` | **MEDIUM** | undocumented endpoints | Set volume | +| `/player/playback/mute` | `POST` | **MEDIUM** | undocumented endpoints | Mute | +| `/player/playback/unmute` | `POST` | **MEDIUM** | undocumented endpoints | Unmute | +| `/player/playback/setTextStream` | `POST` | **MEDIUM** | undocumented endpoints | Set text stream | +| `/player/playback/setRating` | `POST` | **MEDIUM** | undocumented endpoints | Rate item | +| `/player/playback/setViewOffset` | `POST` | **MEDIUM** | undocumented endpoints | Set resume offset | +| `/player/playback/setState` | `POST` | **MEDIUM** | undocumented endpoints | Set playback state | +| `/player/playback/refreshPlayQueue` | `POST` | **MEDIUM** | undocumented endpoints | Refresh play queue | +| `/resources` *(on client)* | `GET` | **MEDIUM** | python-plexapi | Client capabilities and device info | + +### 2.7 Live TV & DVR + +| Endpoint | Method | Priority | Source(s) | Why it matters | +|----------|--------|----------|-----------|----------------| +| *(session creation)* | — | **MEDIUM** | live-tv review | No documented way to create/start a Live TV session | +| `/livetv/dvrs/{dvrId}` | `PUT` / `PATCH` | **LOW** | live-tv review | Update DVR (only prefs endpoint exists) | +| `/livetv/dvrs/{dvrId}/channels` | `GET` | **LOW** | live-tv review | List channels directly associated with a DVR | +| `/livetv/dvrs/{dvrId}/guide` or `/livetv/epg/guide` | `GET` | **LOW** | live-tv review | Fetch program guide / schedule | +| `/livetv/sessions/{sessionId}` | `DELETE` | **LOW** | live-tv review | Terminate a Live TV session | +| `/livetv/dvrs/{dvrId}/recordings` or `/livetv/recordings` | `GET` | **LOW** | live-tv review | List completed DVR recordings | +| `/livetv/epg/search` | `GET` | **LOW** | live-tv review | Search EPG for upcoming airings | + +### 2.8 Webhooks & Real-Time + +| Endpoint | Method | Priority | Source(s) | Why it matters | +|----------|--------|----------|-----------|----------------| +| `https://plex.tv/api/v2/user/webhooks` | `GET` | **MEDIUM** | python-plexapi, undocumented endpoints | List configured webhook URLs | +| `https://plex.tv/api/v2/user/webhooks` | `POST` | **MEDIUM** | python-plexapi, undocumented endpoints | Add a webhook URL | +| *(webhook payload schema)* | `POST` *(inbound)* | **MEDIUM** | Bazarr, Home Assistant, Tautulli | Standardize `multipart/form-data` JSON payload + thumbnail | +| `/:/websockets/notifications` *(plural)* | `WS` | **HIGH** | Tautulli, Home Assistant | Widely-used plural alias for WebSocket event bus | + +--- + +## 3. Schema Corrections + +### 3.1 ServerConfiguration + +| Field | Current Spec | Issue | Recommended Fix | +|-------|--------------|-------|-----------------| +| `diagnostics` | `string` | SDK parses as `list` (comma-separated diagnostics modules) | Change to `array` of `string`, or document parsing rule | +| `transcoderVideoBitrates` | untyped / description only | SDK parses as `list` | Add `type: array` with `items: string` or `integer` | +| `transcoderVideoQualities` | `string` | SDK parses as `list` | Change to `array` of `string` / `integer` | +| `transcoderVideoResolutions` | description only | SDK parses as `list` | Add `type: array` of `string` | +| `ownerFeatures` | `string` (comma-separated) | SDK parses as `list` | Change to `array` of `string`, or document parsing rule | +| `offlineTranscode` | `example: 1`, no `type` | Missing type | Should be `integer` or `boolean` (BoolInt pattern) | + +**Additional issue:** The root `/` endpoint is documented as returning `MediaContainerWithDirectory`, but the actual response is a `ServerConfiguration`-shaped object with a `Directory` array. Update schema to `allOf: [ServerConfiguration, { Directory: ... }]`. + +### 3.2 Metadata + +| Field | Found In | Notes | +|-------|----------|-------| +| `artBlurHash` | `video.py`, `audio.py` | Blur hash for background art | +| `thumbBlurHash` | `video.py`, `audio.py` | Blur hash for thumbnail | +| `lastRatedAt` | `video.py`, `audio.py` | Timestamp of last user rating | +| `editionTitle` | `video.py` (Movie) | Edition string (e.g. "Director's Cut") | +| `languageOverride` | `video.py` (Movie, Show) | Per-item language override | +| `enableCreditsMarkerGeneration` | `video.py` (Movie, Show) | Credits marker flag | +| `useOriginalTitle` | `video.py` (Movie, Show) | Display original title flag | +| `slug` | `video.py` (Movie, Show) | URL-friendly slug | +| `skipCount` | `audio.py` (Track) | Number of times skipped | +| `musicAnalysisVersion` | `audio.py` (Audio base) | Analysis version for music | +| `distance` | `audio.py` (Audio base) | Sonic similarity distance | +| `sourceURI` | `video.py`, `audio.py`, `playlist.py` | Remote/shared server item URI | +| `playlistItemID` | `base.py` (Playable) | Item ID within a playlist | +| `playQueueItemID` | `base.py` (Playable) | Item ID within a play queue | + +**Type-specific gap:** The `Metadata` schema is a flat union. It does not distinguish type-specific required/optional fields (e.g. `year` is optional for episodes, `parentIndex` is season number, `grandparentTitle` is show name). + +### 3.3 Media + +| Field | Found In | Notes | +|-------|----------|-------| +| `uuid` | `media.py` | Media instance UUID | +| `selected` | `media.py` | Whether this media version is selected | + +### 3.4 Part + +| Field | Found In | Notes | +|-------|----------|-------| +| `protocol` | `media.py` | Streaming protocol (e.g. `dash`, `hls`) | +| `packetLength` | `media.py` | RTP packet length | +| `requiredBandwidths` | `media.py` | Bandwidth requirements list | +| `syncItemId` | `media.py` | Mobile sync item association | +| `syncState` | `media.py` | Sync state (e.g. `pending`, `downloaded`) | +| `deepAnalysisVersion` | `media.py` | Deep analysis version | + +### 3.5 Stream (Video, Audio, Subtitle, Lyric) + +**AudioStream gaps** + +| Field | Notes | +|-------|-------| +| `bitrateMode` | e.g. `cbr`, `vbr` | +| `visualImpaired` | Audio description track flag | +| `albumGain` | ReplayGain album gain | +| `albumPeak` | ReplayGain album peak | +| `albumRange` | ReplayGain album range | +| `endRamp` | Loudness ramp end | +| `gain` | Track replay gain | +| `loudness` | Integrated loudness (LUFS) | +| `lra` | Loudness range | +| `peak` | Track peak | +| `startRamp` | Loudness ramp start | + +**SubtitleStream gaps** + +| Field | Notes | +|-------|-------| +| `providerTitle` | Subtitle provider name | +| `score` | Match confidence score | +| `sourceKey` | Source identifier | +| `transient` | Temporary/downloaded subtitle | +| `userID` | User who added subtitle | +| `perfectMatch` | Exact match flag | + +**LyricStream gaps** + +| Field | Notes | +|-------|-------| +| `minLines` | Minimum lines in lyric file | +| `provider` | Lyric provider | +| `timed` | Whether lyrics are timestamped | + +### 3.6 Collection + +**There is no dedicated `Collection` schema.** Collections reuse `Metadata` (or are returned inside `MediaContainerWithMetadata`). Missing collection-specific fields: + +| Field | Notes | +|-------|-------| +| `collectionFilterBasedOnUser` | Smart-collection user filter | +| `collectionMode` | Display mode (`default`, `hideItems`, `showItems`) | +| `collectionPublished` | Whether published to Plex Discover | +| `collectionSort` | Sort order for collection | +| `artBlurHash` | Blur hash for collection art | +| `thumbBlurHash` | Blur hash for collection thumb | +| `userRating` | User star rating | +| `lastRatedAt` | Rating timestamp | + +### 3.7 Playlist + +Playlists are defined via `MediaContainerWithPlaylistMetadata`. Missing fields: + +| Field | Notes | +|-------|-------| +| `durationInSeconds` | Total duration in seconds (redundant but present in XML) | +| `radio` | Whether this is a generated radio playlist | +| `titleSort` | Sort-friendly title | + +### 3.8 PlayQueue + +There is **no standalone `PlayQueue` schema.** The creation endpoint defines play-queue fields inline. All other play-queue operations reuse `MediaContainerWithPlaylistMetadata`, which is **playlist-centric** and omits play-queue fields. + +| Field | Present in Creation? | Present in Retrieval? | Notes | +|-------|---------------------|----------------------|-------| +| `playQueueLastAddedItemID` | ✅ | ❌ | | +| `playQueueSelectedItemID` | ✅ | ❌ | | +| `playQueueSelectedItemOffset` | ✅ | ❌ | | +| `playQueueSelectedMetadataItemID` | ✅ | ❌ | **Missing from retrieval schema** | +| `playQueueShuffled` | ✅ | ❌ | | +| `playQueueSourceURI` | ✅ | ❌ | | +| `playQueueTotalCount` | ✅ | ❌ | | +| `playQueueVersion` | ✅ | ❌ | | + +**Recommendation:** Create `MediaContainerWithPlayQueue` and reference it from all play-queue endpoints. + +### 3.9 Session + +The `Session` schema is extremely sparse (`bandwidth`, `id`, `location`). Real session objects include `sessionKey`, `uuid`, `title`, `userID`, etc. + +**Recommendation:** Expand `Session` or document that consumers should rely on embedded `Player`, `User`, and `Metadata` objects. + +### 3.10 Activity, ButlerTask, UpdaterStatus + +| Schema | Status | Fix | +|--------|--------|-----| +| `Activity` | Inline under `/activities` GET | Extract to `#/components/schemas/Activity` | +| `ButlerTask` | Inline under `/butler` GET | Extract to `#/components/schemas/ButlerTask` | +| `UpdaterStatus` | Inline under `/updater/status` GET | Extract to `#/components/schemas/UpdaterStatus` | +| `LogLine` | **Does not exist** | Create or document generic text/plain response | + +### 3.11 History + +The history response schema defines an inline object with a minimal field set. Real history items include `guid`, `index`, `parentKey`, `parentRatingKey`, `grandparentKey`, `grandparentRatingKey`, `parentThumb`, `grandparentThumb`, `content`, `viewCount`, `lastViewedAt`, etc. + +**Recommendation:** Derive history items from `Metadata` (or a `HistoryItem` `allOf`) so type-specific fields are not lost. + +### 3.12 Timeline Response + +The `POST /:/timeline` 200 response extends `ServerConfiguration` and adds `Bandwidths`, `terminationCode`, `terminationText`. It can also include `playQueueID` when playback originates from a queue — **not documented**. + +**Fix:** Add `playQueueID` (integer) to timeline response schema. + +### 3.13 DVR / Live TV Schemas + +| Schema | Issue | Fix | +|--------|-------|-----| +| `DVR` | Duplicated inline across **7+ endpoints** | Extract to `#/components/schemas/DVR` | +| `MediaContainerWithDevice` | Duplicates `Device` properties inline instead of `$ref` | Use `allOf: [MediaContainer, { Device: { type: array, items: { $ref: Device } } }]` | +| `DeviceChannel` | Defined inline; has useful fields (`drm`, `favorite`, `hd`, `signalQuality`, `signalStrength`) missing from main `Channel` | Extract to component or merge into `Channel` | +| `Channel` | Missing EPG fields: `favorite`, `drm`, `signalQuality`, `signalStrength` | Add missing fields | +| `MediaSubscription` | `Directory`, `Playlist`, `Video` hints are untyped (`additionalProperties: true`) | Document known hint keys | +| `Lineup` | Missing `key` and `identifier` | Add missing fields | +| `MediaContainerWithMetadata` (sessions) | Too generic for Live TV sessions | Consider `MediaContainerWithLiveTVSession` with session-specific fields | + +### 3.14 Device + +The `Device` schema defines only 12 properties. Missing: + +| Field | Why it matters | +|-------|----------------| +| `id` | The `deviceId` path parameter is `integer`, but schema has no `id` field | +| `name` / `title` | Human-readable device name | +| `enabled` | Toggled by `PUT /media/grabbers/devices/{deviceId}` | +| `deviceIdentifier` | Distinct from `uuid` | +| `thumb` / `thumbVersion` | Referenced by thumb endpoint | +| `lineup` / `lineupType` | EPG lineup association | + +### 3.15 Download Queue & Grabber + +| Schema | Issue | Fix | +|--------|-------|-----| +| `DownloadQueue` | Inline in POST/GET | Extract to `#/components/schemas/DownloadQueue` | +| `DownloadQueueItem` | Inline in list/get | Extract to `#/components/schemas/DownloadQueueItem` | +| `MediaGrabber` / `Grabber` | No reusable schema exists; inline with only 3 fields | Create component with SSDP fields (`UDN`, `URLBase`, `deviceType`, `manufacturer`, `modelDescription`, `modelNumber`, etc.) | +| `TranscodeSession` | Referenced by `DownloadQueueItem` but minimal; spec admits "not yet documented" | Prioritize documentation | + +### 3.16 Provider / Hub Schemas + +| Schema | Issue | Fix | +|--------|-------|-----| +| `/media/providers` response | Wrongly extends `ServerConfiguration` instead of `MediaContainer` or dedicated `ProviderContainer` | Create `Provider` and `ProviderFeature` schemas | +| `ProviderFeature` | Underspecified `Feature` array; does not enumerate well-known feature types | Document known feature keys (`search`, `metadata`, `content`, `match`, `manage`, `timeline`, `rate`, `playqueue`, `playlist`, `subscribe`, `promoted`, `continuewatching`, `collection`, `actions`, `imagetranscoder`, `queryParser`, `grid`) | +| `Hub` | `additionalProperties: true` masks missing fields like `context`, `hubKey`, `reason`, `reasonTitle`, `reasonID` | Add observed fields | + +### 3.17 PlexDevice + +| Issue | Details | +|-------|---------| +| Contradictory required/nullable | `platform`, `platformVersion`, `device` are typed as `["null", "string"]` but also listed in `required` | + +--- + +## 4. Parameter & Query String Corrections + +### 4.1 Library Section Browsing (`/library/sections/{sectionId}/all`) + +The GET method only documents `includeMeta`, `includeGuids`, `sectionId`, `mediaQuery`, `X-Plex-Container-Start`, `X-Plex-Container-Size`. Widely used but **absent** params: + +| Parameter | Type | Description | +|-----------|------|-------------| +| `type` | integer | Filter by metadata type (`1`=movie, `2`=show, `3`=season, `4`=episode, `8`=artist, `9`=album, `10`=track) | +| `sort` | string | Sort key and direction (e.g. `addedAt:desc`, `titleSort`) | +| `filters` | string | General filtering expression | +| `unwatched` | integer (`1`) | Filter to unwatched only | +| `genre`, `studio`, `contentRating`, `resolution`, `year`, `firstCharacter` | string / integer | Tag-based filters | +| `includeCollections` | boolean | Include collection items in results | +| `includeExternalMedia` | boolean | Include external/online media | +| `includeAdvanced` | boolean | Include advanced settings | +| `checkFiles` | boolean | Verify file existence | +| `includeRelated` | boolean | Include related items | +| `includeExtras` | boolean | Include trailers, behind-the-scenes, etc. | +| `includePopularLeaves` | boolean | Include popular episodes | +| `includeConcerts` | boolean | Include concert items | +| `includeOnDeck` | boolean | Include On Deck status | +| `includeChapters` | boolean | Include chapter markers | +| `includePreferences` | boolean | Include user preferences | +| `includeBandwidths` | boolean | Include bandwidth info | +| `includeLoudnessRamps` | boolean | Include loudness ramp data | +| `includeStations` | boolean | Include radio station data | +| `includeExternalIds` | boolean | Include external GUIDs | +| `includeReviews` | boolean | Include user reviews | +| `includeCredits` | boolean | Include full credits | +| `includeArt`, `includeThumb`, `includeBanner`, `includeTheme` | boolean | Force inclusion of artwork fields | +| `includeFields` | string | Whitelist of fields to return | +| `asyncAugmentMetadata` | boolean | Async metadata augmentation | +| `asyncRefreshLocalMediaAgent` | boolean | Async local media agent refresh | +| `nocache` | boolean | Bypass cache | +| `excludeFields` | string | Blacklist of fields to omit | +| `skipRefresh` | boolean | Skip synchronous refresh | + +### 4.2 Metadata Item Detail (`/library/metadata/{ids}`) + +| Parameter | Type | Description | Notes | +|-----------|------|-------------|-------| +| `includeMarkers` | boolean | Intro/credits markers | Critical for Tautulli and skip-intro clients | +| `includeChapters` | boolean | Chapter data | Missing from spec GET params | +| `includeExternalMedia` | boolean | External media | Missing | +| `includeExtras` | boolean | Extras/trailers | Missing | +| `includeRelated` | boolean | Related items | Missing | +| `includeOnDeck` | boolean | On Deck status | Missing | +| `includePopularLeaves` | boolean | Popular episodes | Missing | +| `includeReviews` | boolean | User reviews | Missing | +| `includeStations` | boolean | Radio stations | Missing | +| `includeGuids` | boolean | External GUIDs | Only documented on `/library/sections/{id}/all` | +| `excludeElements` | string | Omit elements | Mentioned only in history endpoint description | +| `excludeFields` | string | Omit fields | Mentioned only in history endpoint description | + +### 4.3 Search & Hubs + +| Endpoint | Missing Param | Type | Description | +|----------|---------------|------|-------------| +| `/hubs/search` | `includeCollections` | boolean | Include collection results in search hubs | +| `/hubs/search/voice` | `includeCollections` | boolean | Same gap as standard search | + +### 4.4 Playlists + +| Parameter | Where | Type | Description | +|-----------|-------|------|-------------| +| `type=42` | `/playlists` | integer | Optimized/conversion items | + +### 4.5 History (`/status/sessions/history/all`) + +| Parameter | Type | Description | +|-----------|------|-------------| +| `includeFields` | string | Mentioned in description but not declared | +| `excludeFields` | string | Mentioned in description but not declared | +| `includeElements` | string | Mentioned in description but not declared | +| `excludeElements` | string | Mentioned in description but not declared | +| `viewedAt>` | integer | Greater-than filter (range operator) | +| `viewedAt<` | integer | Less-than filter (range operator) | +| `accountID` | integer | Filter by account | +| `deviceID` | integer | Filter by device | +| `X-Plex-Container-Start` | header / query | Pagination start (only documented as response header) | +| `X-Plex-Container-Size` | header / query | Pagination size (only documented as response header) | + +### 4.6 Timeline (`POST /:/timeline`) + +| Parameter | Type | Description | +|-----------|------|-------------| +| `containerKey` | string | Groups timeline reports (e.g. `/playQueues/123`) | +| `playQueueID` | integer | Distinct from `playQueueItemID`; identifies the queue itself | +| `guid` | string | Global unique identifier for the item | +| `url` | string | Alternative to `key`/`ratingKey` (legacy) | + +### 4.7 Transcoder + +| Parameter | Where Missing | Type | Description | +|-----------|---------------|------|-------------| +| `maxVideoBitrate` | `/decision`, `/start.{ext}`, `/subtitles` | integer | Client-side cap | +| `videoResolution` | transcoder endpoints | string | Cap string | +| `copyts` | transcoder endpoints | boolean | Timestamp copying | +| `platform` | transcoder endpoints | string | Some clients send this in addition to headers | +| `mediaIndex` / `partIndex` | `/subtitles` | integer | Present on `/decision` and `/start`, missing on `/subtitles` | +| `sessionId` | segment delivery | string | Path param for `.m4s` / `.ts` segments | +| `segmentId` | segment delivery | string / integer | Path param for segment files | + +### 4.8 Server / System + +| Parameter | Where | Type | Description | +|-----------|-------|------|-------------| +| `timespan` (1–6) | `/statistics/bandwidth` | integer | Dashboard timespan | +| `accountID`, `deviceID`, `lan` | `/statistics/bandwidth` | various | Filter params | +| `includeFiles` | `/services/browse` | boolean | Include files in browse results | +| `skipRefresh` | `/library/metadata/{ids}/refresh` | boolean | Skip synchronous refresh | +| `asyncAugmentMetadata=1` | `/library/metadata/{ids}` | boolean | Async metadata augmentation | + +### 4.9 Live TV & DVR + +| Endpoint | Missing Param | Type | Description | +|----------|---------------|------|-------------| +| `/livetv/dvrs` | `uuid`, `lineup` | string | Filter params for managing multiple DVRs | +| `/livetv/sessions` | `dvrId`, `channel` | string / integer | Filter params | +| `/media/subscriptions` | `X-Plex-Container-Start`, `X-Plex-Container-Size` | header / query | Pagination request params | +| `/media/subscriptions/template` | `type`, `targetLibrarySectionID` | string / integer | Influences template response | +| `/media/grabbers/devices/discover` | `protocol`, `grabberIdentifier` | string | Targeted discovery | +| `/livetv/dvrs/{dvrId}/prefs` | `value` | string | Only `name` is documented; needs `value` or `name=value` clarification | +| `/media/grabbers/devices/{deviceId}/prefs` | `value` | string | Same issue as DVR prefs | + +### 4.10 Devices & Download Queue + +| Endpoint | Missing Param | Type | Description | +|----------|---------------|------|-------------| +| `/media/grabbers` | `protocol` enum | string | Should enumerate known protocols (`stream`, `download`, `livetv`) | +| `/media/grabbers/devices` | `uri` format | string | No validation pattern documented | +| `/media/grabbers/devices/{deviceId}/channelmap` | `channelMapping` / `channelMappingByKey` schema | object | `style: deepObject` used but no formal nested schema | +| `/media/grabbers/devices/{deviceId}/prefs` | `name` semantics | string | Should be `object` or better documented as `name=value` pairs | +| `/media/grabbers/devices/{deviceId}/scan` | `source` enum | string | Should list valid scan sources (OTA, Cable, etc.) | +| `/downloadQueue/{queueId}/add` | `keys` max length / format | array | `explode: false` array of strings | +| `/downloadQueue/{queueId}/items` | Pagination params | header / query | `X-Plex-Container-Start` / `X-Plex-Container-Size` not listed as request params | +| `/downloadQueue/{queueId}/item/{itemId}/media` | `Accept` header | header | Required for media file negotiation | +| `/security/resources` | `source` enum / examples | string | No examples of valid source identifiers | +| `/security/resources` | `refresh` behavior | boolean | Behavior not described | +| `/security/token` | Additional `type` / `scope` values | string | Only `delegation` / `all` documented | + +--- + +## 5. Response Corrections + +### 5.1 Wrong Status Codes & Missing Bodies + +| Endpoint | Issue | Fix | +|----------|-------|-----| +| `GET /` | Documented as `MediaContainerWithDirectory`; actual response is `ServerConfiguration` + `Directory` array | Correct response schema | +| `GET /activities` | `Activity` defined inline; no `200` response headers documented | Extract to component; add headers | +| `GET /butler` | `ButlerTask` defined inline | Extract to component | +| `GET /updater/status` | `UpdaterStatus` / `Release` inline; `checkedAt` type unclear | Extract to component; clarify type | +| `PUT /log` / `POST /log` | No response schema; returns generic 200 | Document whether any body is returned | +| `POST /log/networked` | Undocumented response | Document response body or note empty response | +| `GET /:/eventsource/notifications` | Returns `application/octet-stream`; no SSE event schemas | Add `NotificationContainer`, `PlaySessionStateNotification`, `StatusNotification`, `ReachabilityNotification` schemas | +| `GET /:/websocket/notifications` | Returns `application/octet-stream`; no WebSocket message schemas | Add message schemas (same as above) | +| `POST /livetv/dvrs/{dvrId}/reloadGuide` | Returns `text/html` with `X-Plex-Activity` header | Verify if body is actually JSON; document known quirk if truly HTML | +| `/media/grabbers/devices/{deviceId}/thumb/{version}` | Returns "The thumbnail" but no `content` schema | Document `image/jpeg` or `image/png` | +| `GET /downloadQueue/{queueId}/item/{itemId}/media` | Returns "The raw media file" but no `content` schema | Document expected `Content-Type` (e.g. `video/mp4`, `application/octet-stream`) | +| `/security/token` | Description says "responds to all HTTP verbs but POST is preferred" | Either document all verbs or remove the note | + +### 5.2 Inline Schemas That Should Be Reusable + +| Current Location | Schema Name | Where Else It Should Be Reused | +|------------------|-------------|-------------------------------| +| `/activities` GET response | `Activity` | WebSocket `StatusNotification`, other activity-returning endpoints | +| `/butler` GET response | `ButlerTask` | — | +| `/updater/status` GET response | `UpdaterStatus` | — | +| `/status/sessions/background` GET | `TranscodeJob` | Other transcode-related responses | +| `/status/sessions/history/all` GET | `HistoryItem` | `/status/sessions/history/{historyId}` | +| `/livetv/dvrs` (7+ endpoints) | `DVR` | All DVR CRUD endpoints | +| `MediaContainerWithDevice` | `Device` array | Should `$ref` `#/components/schemas/Device` | +| `/media/grabbers/devices/{deviceId}/channels` GET | `DeviceChannel` | Merge into `Channel` or extract to component | +| `POST /downloadQueue` / `GET /downloadQueue/{queueId}` | `DownloadQueue` | All download-queue endpoints | +| `GET /downloadQueue/{queueId}/items` | `DownloadQueueItem` | Item detail endpoints | +| `GET /media/grabbers` | `MediaGrabber` | All grabber-related responses | +| `POST /playQueues` 200 response | `PlayQueue` | All play-queue endpoints | +| `/media/providers` response | `Provider` / `ProviderFeature` | Provider CRUD responses | + +--- + +## 6. Security & Auth Improvements + +### 6.1 Missing Auth Flows + +| Flow | Status | Fix | +|------|--------|-----| +| **OAuth PIN Flow** | Not documented | Document `POST /pins` → user visits `plex.tv/link` → `GET /pins/{id}` → obtain token | +| **JWT Device Registration** | Not documented | Document Ed25519 keypair flow: `POST /auth/jwk` → `GET /auth/nonce` → `POST /auth/token` (7-day expiry) | +| **Direct Sign-In** | Partially documented | Expand `/users/signin` to describe 2FA challenge, rate limiting, `rememberMe` behavior | +| **Home User Switch** | Not documented | Document `POST /api/home/users/{id}/switch` returning new auth token | +| **Claim Flow** | Not documented | Document `GET /api/claim/token.json` → `POST /myplex/claim` on PMS | + +### 6.2 Incorrect Scopes + +| Endpoint | Current Scope | Correct Scope | Notes | +|----------|---------------|---------------|-------| +| `GET /user` (plex.tv) | `admin` | Any valid token | Self-introspection endpoint | +| `GET /resources` (plex.tv) | `admin` | Any valid token | Own server lookup | +| `GET /users` (plex.tv) | `admin` | Any valid token | Friend discovery works with standard user tokens | + +### 6.3 Missing Security Schemes + +| Scheme | Status | Fix | +|--------|--------|-----| +| `X-Plex-Token` as query parameter | Only documented as header | Add note that token may be passed as `?X-Plex-Token=...` on all endpoints | +| `X-Plex-Client-Identifier` as security scheme | Defined as parameter only | Consider adding an `apiKey` security scheme for `clientIdentifier` so PIN endpoints can declare `security: [clientIdentifier: []]` | +| JWT bearer scheme | Mentioned in description but no formal scheme | Add a `JWT` security scheme or document the JWT flow under API Info | + +### 6.4 Duplicate Inline Error Schemas + +`400` and `401` error responses on `/user`, `/users/signin`, `/users`, and `/resources` are copy-pasted inline instead of referencing shared `#/components/responses/BadRequest` or `#/components/responses/Unauthorized`. Extract to reusable response components. + +### 6.5 Auth Documentation Gaps + +- The spec is PMS-centric. Add a top-level **Plex.tv API Info** section explaining base URLs (`https://plex.tv/api/v2` vs `https://plex.tv/api`), default formats (JSON for v2, XML for v1), and required headers. +- Document rate limiting on auth endpoints (Plex Pro Week '25 blog explicitly mentions this). +- Document that `X-Plex-Client-Identifier` is **mandatory** for PIN and JWT flows. + +--- + +## 7. Documentation Improvements + +### 7.1 Typos + +| Location | Issue | Correction | +|----------|-------|------------| +| `POST /livetv/dvrs` description | "after creation of a **devcie**" | "device" | +| `PUT /livetv/dvrs/{dvrId}/lineups` description | "The lineup to **delete**" (PUT = add) | "The lineup to add" | +| `PUT /livetv/dvrs/{dvrId}/prefs` description | "by name **avd** value" | "and" | +| `GET /livetv/epg/lineupchannels` summary | "Get the channels for **mulitple** lineups" | "multiple" | +| `MediaGrabOperation` description | "media grab **opration**" | "operation" | +| `/security/token` description | "responds to all HTTP verbs but POST is preferred" | Clarify or restrict to POST only | + +### 7.2 Missing Descriptions & Examples + +| Topic | Gap | Recommendation | +|-------|-----|----------------| +| `PUT /:/prefs` | Only documents `prefs: object` | Add example or enum of common preference keys; link to hidden settings article | +| Hidden preferences | ~40+ keys undocumented | Document known hidden keys (`aBRKeepOldTranscodes`, `allowHighOutputBitrates`, `transcoderH264Options`, etc.) or link to external reference | +| `PUT /library/metadata/{ids}` | Body schema is `args: object` (opaque) | Document editable fields (title, summary, tag locks, etc.) | +| `uri` parameter on scrobble/unscrobble | Description refers to "intro for description of URIs" | That introductory section does not exist in the spec; add it or remove the cross-reference | +| `/media/providers` proxy paths | Individual provider feature paths are undefined | Reference dynamic paths (`/{provider}/search`, `/{provider}/metadata`, etc.) in the `Provider` tag description | +| `X-Plex-Container-Start` / `X-Plex-Container-Size` | Documented as response headers only | Clarify they are also accepted as **request** headers / query parameters for pagination | + +### 7.3 Tag Organization + +| Issue | Recommendation | +|-------|----------------| +| Tags `Authentication`, `Users`, `Plex` are scattered | Add a `Plex.tv` tag group in `x-tagGroups` to organize all cloud endpoints | +| `/media/grabbers/operations/{operationId}` tagged under `Subscriptions` | Cross-tag with `Devices` or retag | +| `Devices` tag description conflates DVR tuners with Plex clients | Add clarifying note that this tag only covers grabber/tuner devices; client discovery is via `/clients` (missing) or `/resources` | +| `/:/scrobble` and `/:/unscrobble` appear tag-less or under implicit tag | Verify they are categorized under a domain tag | + +### 7.4 XML vs JSON Notes + +| Behavior | Current State | Recommendation | +|----------|---------------|----------------| +| Default format (PMS) | Not clearly stated | Add note: "Most PMS endpoints return **XML** unless `Accept: application/json` is sent" | +| Default format (plex.tv v2) | Not clearly stated | Add note: "plex.tv v2 generally returns **JSON** by default" | +| Legacy endpoints (`/pins.xml`, `/api/resources`, `/api/users/`) | Not documented | Note that these return **XML only** | +| Webhook payload | Not documented | Note: JSON wrapped in `multipart/form-data` field named `payload`; thumbnail as second file part | +| Empty responses | Some PUT/DELETE return `204 No Content` | Document where no body is expected | + +### 7.5 Missing Cross-References + +| From | To | Recommendation | +|------|-----|----------------| +| `Devices` tag | `DVRs`, `EPG`, `Live TV`, `Subscriptions` tags | Add cross-reference note | +| `Download Queue` tag | `Play Queue` tag | Add note explaining the distinction | +| `Provider` tag | Individual provider proxy paths | Reference dynamic paths or document them | +| `Transcoder` endpoints | Segment delivery URLs | Add note explaining that manifests reference `/session/{sessionId}/{segmentId}.{ext}` | +| `Timeline` endpoint | `terminationCode` / `terminationText` | Explain that clients must handle 200 body to detect server-side session kill | + +### 7.6 Server URL Inconsistency + +- `/users` points to `https://plex.tv/api` (v1) +- `/user`, `/users/signin`, `/resources` point to `https://plex.tv/api/v2` + +**Recommendation:** Document *why* this split exists (v1 XML vs v2 JSON) and note the deprecation trajectory. + +--- + +## 8. Speakeasy / SDK Generator Improvements + +### 8.1 `x-speakeasy-globals` Headers + +Current globals (11 parameters) are reasonably complete. Candidates for addition: + +| Header | In globals? | Assessment | +|--------|-------------|------------| +| `X-Plex-Session-Identifier` | ❌ No | Correctly excluded — playback-session-specific, not global | +| `X-Plex-Client-Profile-Name` | ❌ No | **Consider adding** — used on transcoder/decision endpoints | +| `X-Plex-Client-Profile-Extra` | ❌ No | **Consider adding** — used on transcoder/decision endpoints | +| `X-Plex-Token` | ❌ No | Correctly excluded — it is a security scheme, not a global parameter | + +### 8.2 Missing Reusable Components + +Create or extract the following components so generated SDKs can reference them: + +- `#/components/schemas/Activity` +- `#/components/schemas/ButlerTask` +- `#/components/schemas/UpdaterStatus` +- `#/components/schemas/HistoryItem` +- `#/components/schemas/PlayQueue` (or `MediaContainerWithPlayQueue`) +- `#/components/schemas/Collection` +- `#/components/schemas/DownloadQueue` +- `#/components/schemas/DownloadQueueItem` +- `#/components/schemas/DeviceChannel` +- `#/components/schemas/MediaGrabber` +- `#/components/schemas/Provider` +- `#/components/schemas/ProviderFeature` +- `#/components/schemas/WebhookPayload` +- `#/components/schemas/NotificationContainer` +- `#/components/schemas/PlaySessionStateNotification` +- `#/components/schemas/StatusNotification` +- `#/components/schemas/ReachabilityNotification` +- `#/components/schemas/TimelineEntry` + +### 8.3 Globals Improvements + +- Consider adding `x-speakeasy-retries` configuration for rate-limited endpoints (`plex.tv/api/v2/pins`, `clients.plex.tv/api/v2/auth/*`). +- Document `parseAs: list` hints for comma-separated fields (`diagnostics`, `ownerFeatures`, `transcoderVideoBitrates`, etc.) so generated SDKs automatically split strings into arrays. +- Add `x-speakeasy-unknown-fields: allow` or similar note on schemas that use `additionalProperties: true` heavily (`Metadata`, `Hub`, `Activity.Context`, etc.) to set consumer expectations. + +--- + +## 9. Appendix: Raw Research Files + +| File | Description | +|------|-------------| +| `review/python_plexapi_gap_analysis.md` | Phase 1 — Comprehensive gap analysis between the official OpenAPI spec and the `python-plexapi` SDK. Covers missing PMS endpoints, plex.tv cloud APIs, client remote-control protocol, schema field mismatches, parameter gaps, and auth flow differences. | +| `review/integration_ecosystem_gaps.md` | Phase 1 — Survey of major open-source Plex integrations (Tautulli, Overseerr/Jellyseerr, Bazarr, Kometa, Home Assistant). Maps API usage patterns, missing endpoints, webhook consumption, and real-time event streams against the spec. | +| `review/undocumented_endpoints_research.md` | Phase 1 — Community-researched undocumented and hidden endpoints compiled from public forums, GitHub, Gists, Reddit, CVE write-ups, and the official spec. Catalogs plex.tv v2 surface, cloud providers, player control, transcode segments, legacy endpoints, and XML/JSON quirks. | +| `review/domain_auth_account_review.md` | Phase 2 — Deep review of the Authentication & Account domain: `securitySchemes`, `security`, `x-speakeasy-globals`, and all auth/account paths. Identifies incorrect scopes, missing OAuth/JWT flows, duplicate error schemas, and documentation gaps. | +| `review/domain_server_system_review.md` | Phase 2 — Deep review of Server & System domain (General, Activities, Butler, Updater, Log, Preferences, Events, Transcoder, Status). Identifies inline schemas, missing endpoints, parameter gaps, and auth inconsistencies. | +| `review/domain_library_metadata_review.md` | Phase 2 — Deep review of Library & Metadata domain. Covers root library, sections, metadata items, collections, playlists, and all sub-endpoints. Documents extensive schema field gaps and missing query parameters. | +| `review/domain_media_provider_review.md` | Phase 2 — Deep review of Media Provider & Content domain (Provider, Content, Hubs, Search, Rate, Playlist). Documents missing cloud provider endpoints, provider proxy paths, search parameter gaps, and hub schema issues. | +| `review/domain_playback_sessions_review.md` | Phase 2 — Deep review of Playback & Sessions domain (Status, Timeline, Play Queue, Transcoder). Documents missing WebSocket plural alias, complete client remote-control protocol, transcode segment delivery, and play-queue schema mismatch. | +| `review/domain_livetv_dvr_review.md` | Phase 2 — Deep review of Live TV & DVR domain (DVRs, EPG, Subscriptions, Live TV, Grabbers/Devices). Documents missing session lifecycle endpoints, inline schema duplication, parameter gaps, and typos. | +| `review/domain_devices_download_review.md` | Phase 2 — Deep review of Devices & Download Queue domain. Documents missing PMS local endpoints, client remote-control protocol, schema gaps in `Device`, `DownloadQueue`, `DownloadQueueItem`, and `MediaGrabber`. | + +--- + +*Report generated by the Master Synthesizer agent. All findings are derived from the 10 Phase 1 and Phase 2 research reports listed in the Appendix.* diff --git a/review/domain_auth_account_review.md b/review/domain_auth_account_review.md new file mode 100644 index 000000000..ae819066f --- /dev/null +++ b/review/domain_auth_account_review.md @@ -0,0 +1,228 @@ +# Auth & Account Domain Review + +**Date:** 2026-06-03 +**Scope:** `securitySchemes`, `security`, `x-speakeasy-globals`, `components/parameters`, and all auth/account paths in `plex-api-spec.yaml`. +**Sources:** `python_plexapi_gap_analysis.md`, `integration_ecosystem_gaps.md`, `undocumented_endpoints_research.md` + +--- + +## Endpoints Present in Spec (inventory with assessment) + +| # | Path | Server | Method | Tag | Assessment | +|---|------|--------|--------|-----|------------| +| 1 | `/user` | `plex.tv/api/v2` | `GET` | Authentication | ✅ Path correct. Response uses `UserPlexAccount` schema (comprehensive). **Issue:** Security scope is `admin`; this is a self-introspection endpoint and should work with *any* valid token. No `POST`/`PUT`/`DELETE` for profile updates. | +| 2 | `/users/signin` | `plex.tv/api/v2` | `POST` | Authentication | ✅ Path correct. Form body has `login`, `password`, `rememberMe`, `verificationCode`. **Issue:** No mention of 2FA challenge flow in description. No OAuth/PIN alternatives documented. Response extends `UserPlexAccount` with `pastSubscriptions`/`trials` — handled correctly via `allOf`. | +| 3 | `/users` | `plex.tv/api` | `GET` | Users | ✅ Path correct (v1 API). Inline schema is fairly detailed (friends/shared users with `Server` sub-array). **Issue:** Only `GET` documented; no `POST` for user creation. Security scope is `admin` but this works with any valid token for friend discovery. Only JSON documented; XML variant not mentioned. | +| 4 | `/security/resources` | PMS | `GET` | General | ✅ Path correct. `source` (required) and `refresh` query params present. Response schema is basic (accessToken + Connection list). **Issue:** No `POST`/`PUT`/`DELETE`. No security scope override at path level (falls back to global `shared user`/`admin`). | +| 5 | `/security/token` | PMS | `POST` | General | ✅ Path correct. `type=delegation` and `scope=all` enums enforced. **Issue:** Description says "responds to all HTTP verbs but POST is preferred" — confusing; should either document the other verbs or remove the note. No mention of token expiration (48h / restart). | +| 6 | `/resources` | `plex.tv/api/v2` | `GET` | Plex | ✅ Path correct. Query params `includeHttps`, `includeRelay`, `includeIPv6` present with `BoolInt` + defaults. Response is `PlexDevice[]` array. **Issue:** Security scope is `admin` but should work with any valid token for self-resource lookup. No `POST`/`PUT`/`DELETE` for device management. | + +### Summary of Present Endpoints +- **Only 6 endpoints** are documented in the Auth & Account domain. +- **Zero** plex.tv v2 endpoints for OAuth PIN, sign-out, ping, webhooks, sharing, Plex Home, or JWT auth. +- **Zero** legacy v1 plex.tv endpoints (pins.xml, api/resources, api/users, etc.). +- **Zero** PMS-side auth endpoints (e.g., `/myplex/claim`, `/myplex/account`). + +--- + +## Missing Endpoints + +### CRITICAL — OAuth PIN Flow +These are fundamental to every modern integration (Tautulli, Overseerr, Bazarr, Home Assistant). + +| Path | Method | Priority | Source | What it does | +|------|--------|----------|--------|--------------| +| `https://plex.tv/api/v2/pins` | `POST` | **CRITICAL** | Tautulli, Overseerr, Bazarr, python-plexapi | Create a 4-char PIN for device linking | +| `https://plex.tv/api/v2/pins/{pinId}` | `GET` | **CRITICAL** | Tautulli, Overseerr, Bazarr | Poll PIN status; returns `authToken` when claimed | +| `https://plex.tv/api/v2/pins/link` | `PUT` | **CRITICAL** | python-plexapi | Link a PIN to an account (OAuth completion) | +| `https://clients.plex.tv/api/v2/pins` | `POST` | **CRITICAL** | python-plexapi | Alternative PIN endpoint (clients subdomain) | + +### HIGH — Account & Token Management + +| Path | Method | Priority | Source | What it does | +|------|--------|----------|--------|--------------| +| `https://plex.tv/api/v2/users/signout` | `DELETE` | **HIGH** | python-plexapi | Invalidate token | +| `https://plex.tv/api/v2/ping` | `GET` | **HIGH** | Tautulli, Overseerr, python-plexapi | Token refresh / health check (no auth required) | +| `https://plex.tv/api/v2/features` | `GET` | **HIGH** | Plex Forum | Plex Pass feature flags | +| `https://plex.tv/api/v2/friends` | `GET` | **HIGH** | Plex Forum | Friends & shared users (v2 JSON) | +| `https://plex.tv/api/v2/home` | `GET` | **HIGH** | Plex Forum | Plex Home user list | +| `https://plex.tv/api/v2/server` | `GET` | **HIGH** | Plex Forum | Server association info for logged-in user | +| `https://plex.tv/api/v2/users/password` | `POST` | **HIGH** | Plex Forum | Change / reset password | +| `https://plex.tv/api/v2/user/view_state_sync` | `PUT` | **HIGH** | python-plexapi | Enable/disable watch-state sync consent | +| `https://plex.tv/api/v2/user/{uuid}/settings/opt_outs` | `GET` | **HIGH** | python-plexapi | Online-media-source opt-outs | +| `https://plex.tv/users/account` | `GET` | **HIGH** | Tautulli, Overseerr | Own account details (XML) | +| `https://plex.tv/users/account.json` | `GET` | **HIGH** | Tautulli, Overseerr | Own account details (JSON) | + +### HIGH — Sharing & Plex Home + +| Path | Method | Priority | Source | What it does | +|------|--------|----------|--------|--------------| +| `https://plex.tv/api/v2/shared_servers` | `POST` | **HIGH** | python-plexapi, Plexopedia | Share a server with a user | +| `https://plex.tv/api/v2/sharings/{userId}` | `PUT` | **HIGH** | python-plexapi | Update friend filters (allowSync, filterMovies, etc.) | +| `https://plex.tv/api/v2/sharings/{userId}` | `DELETE` | **HIGH** | python-plexapi | Remove a share / friend | +| `https://plex.tv/api/v2/home/users/restricted/{userId}` | `PUT` | **HIGH** | python-plexapi | Update restricted (managed) home user settings | +| `https://plex.tv/api/home/users` | `GET` / `POST` | **HIGH** | python-plexapi | List / create Plex Home users | +| `https://plex.tv/api/home/users/{userId}` | `DELETE` / `PUT` | **HIGH** | python-plexapi | Remove / update home user | +| `https://plex.tv/api/home/users/{id}/switch` | `POST` | **HIGH** | python-plexapi | Switch to home user (returns new auth token) | +| `https://plex.tv/api/servers/{machineId}/shared_servers` | `POST` | **HIGH** | python-plexapi, Tautulli | Share library with friend (legacy v1) | +| `https://plex.tv/api/servers/{machineId}` | `GET` | **HIGH** | python-plexapi | Server details for sharing | + +### HIGH — Claim Tokens + +| Path | Method | Priority | Source | What it does | +|------|--------|----------|--------|--------------| +| `https://plex.tv/api/claim/token.json` | `GET` | **HIGH** | python-plexapi | Claim token for new servers | +| `POST /myplex/claim` | `POST` | **HIGH** | python-plexapi | Claim server on PMS (uses claim token) | + +### MEDIUM — Webhooks + +| Path | Method | Priority | Source | What it does | +|------|--------|----------|--------|--------------| +| `https://plex.tv/api/v2/user/webhooks` | `GET` | **MEDIUM** | python-plexapi | List configured webhook URLs | +| `https://plex.tv/api/v2/user/webhooks` | `POST` | **MEDIUM** | python-plexapi | Add a webhook URL | + +### MEDIUM — JWT Device Registration (new 2025) +Documented by Plex Pro Week ’25 blog and community research. + +| Path | Method | Priority | Source | What it does | +|------|--------|----------|--------|--------------| +| `https://clients.plex.tv/api/v2/auth/jwk` | `POST` | **MEDIUM** | Plex Pro Week, JonnyWong16 gist | Register device public key (JWK) | +| `https://clients.plex.tv/api/v2/auth/nonce` | `GET` | **MEDIUM** | JonnyWong16 gist | Get nonce to sign in client JWT | +| `https://clients.plex.tv/api/v2/auth/token` | `POST` | **MEDIUM** | JonnyWong16 gist | Exchange signed client JWT for Plex JWT | +| `https://clients.plex.tv/api/v2/auth/keys` | `GET` | **MEDIUM** | JonnyWong16 gist | Plex public JWKs for signature verification | + +### MEDIUM — Server/Account Utilities + +| Path | Method | Priority | Source | What it does | +|------|--------|----------|--------|--------------| +| `https://plex.tv/api/v2/server/access_tokens` | `GET` | **MEDIUM** | CVE-2025-34158 write-up | List access tokens for the server | +| `https://plex.tv/api/v2/server/users/features` | `GET` | **MEDIUM** | Plex Forum | Features enabled per shared user | +| `https://plex.tv/api/v2/cloud_server` | `GET` | **MEDIUM** | Tautulli | Plex Cloud status | +| `https://plex.tv/api/v2/geoip` | `GET` | **MEDIUM** | Tautulli | GeoIP lookup | +| `https://plex.tv/:/ip` | `GET` | **MEDIUM** | Tautulli | Public IP detection | +| `https://plex.tv/api/downloads/{channel}.json` | `GET` | **LOW** | Tautulli | Plex update downloads | + +### LOW — Legacy v1 plex.tv (for migration docs) + +| Path | Method | Priority | Source | What it does | +|------|--------|----------|--------|--------------| +| `https://plex.tv/pins.xml` | `POST` | **LOW** | plexargod | Legacy PIN creation (XML) | +| `https://plex.tv/pins/{pinId}` | `GET` | **LOW** | plexargod | Legacy PIN check (XML) | +| `https://plex.tv/api/resources` | `GET` | **LOW** | plexargod | Legacy published server connections (XML) | +| `https://plex.tv/api/users/` | `GET` | **LOW** | python-plexapi | Legacy friends list (XML) | +| `https://plex.tv/api/servers/{machineId}` | `GET` | **LOW** | python-plexapi | Legacy server info (XML) | +| `https://plex.tv/api/servers/{machineId}/shared_servers` | `POST` | **LOW** | python-plexapi | Legacy share server (XML) | +| `https://clients.plex.tv/devices.xml` | `GET` | **LOW** | CVE-2025-34158 write-up | Authorized devices with tokens (XML) | + +--- + +## Schema & Security Issues + +### 1. JWT Auth is Mentioned but Not Formally Documented +- The `token` security scheme **description** mentions JWT (7-day expiry, ED25519, device revocation), but there is **no dedicated security scheme** for JWT, no `JWT` bearer format, and no documentation of the keypair registration flow (`/auth/jwk`, `/auth/nonce`, `/auth/token`). +- **Fix:** Add a `JWT` security scheme (or document the JWT flow under API Info) and add the four `clients.plex.tv/api/v2/auth/*` endpoints. + +### 2. `clientIdentifier` is Not a Security Scheme +- `X-Plex-Client-Identifier` is defined as a **parameter**, not a security scheme. The PIN endpoints and some public endpoints (ping) require *only* `X-Plex-Client-Identifier` without a token. +- **Fix:** Consider adding an `apiKey` security scheme for `clientIdentifier` so that PIN endpoints can declare `security: [clientIdentifier: []]` cleanly. + +### 3. Incorrect `admin` Scope on Self-Introspection Endpoints +- `/user` (GET token details) requires `admin` scope — incorrect. Any valid token should work. +- `/resources` (GET own servers) requires `admin` scope — incorrect. Any valid token should work. +- `/users` (GET friends) requires `admin` scope — overly restrictive; works with standard user tokens for friend discovery. +- **Fix:** Change scopes to `shared user` (or remove scope restriction) on these paths. + +### 4. `X-Plex-Token` Query Param Not Supported in Spec +- The spec defines `X-Plex-Token` **only** as a header (`in: header`). Integrations (python-plexapi, Tautulli) widely pass it as a query parameter (`?X-Plex-Token=...`). +- **Fix:** Document that `X-Plex-Token` may also be passed as a query parameter on all endpoints. + +### 5. Duplicate Inline Error Schemas +- `400` and `401` error responses on `/user`, `/users/signin`, `/users`, and `/resources` are **copy-pasted inline** instead of referencing a shared `#/components/responses/BadRequest` or `#/components/responses/Unauthorized`. +- **Fix:** Extract to reusable response components. + +### 6. `/security/token` Verb Confusion +- Description says "responds to all HTTP verbs but POST is preferred". If GET/PUT/DELETE actually work, they should be documented; if not, the note should be removed to avoid confusion. + +### 7. `/users/signin` Missing `strong` Parameter +- The v2 PIN endpoint supports a `strong` boolean parameter for longer PINs. Not applicable to signin directly, but the OAuth PIN flow docs should mention it. + +--- + +## Parameter/Header Gaps + +### `x-speakeasy-globals` Headers +Current globals (11 parameters): +```yaml +- accepts +- X-Plex-Client-Identifier +- X-Plex-Product +- X-Plex-Version +- X-Plex-Platform +- X-Plex-Platform-Version +- X-Plex-Device +- X-Plex-Model +- X-Plex-Device-Vendor +- X-Plex-Device-Name +- X-Plex-Marketplace +``` + +**Missing from globals (assessment):** + +| Header | In globals? | Assessment | +|--------|-------------|------------| +| `X-Plex-Session-Identifier` | ❌ No | **Correctly excluded** — it is playback-session-specific, not global. Already documented on `/:/timeline`. | +| `X-Plex-Client-Profile-Name` | ❌ No | **Consider adding** — used on transcoder/decision endpoints. | +| `X-Plex-Client-Profile-Extra` | ❌ No | **Consider adding** — used on transcoder/decision endpoints. | +| `X-Plex-Token` | ❌ No | **Correctly excluded** — it is a security scheme, not a global parameter. | + +**Verdict:** The `x-speakeasy-globals` list is **reasonably complete** for auth/account. The only candidates for addition are `X-Plex-Client-Profile-Name` and `X-Plex-Client-Profile-Extra`, but those are transcoder-domain headers. + +### Missing Query Parameters on Present Endpoints + +| Endpoint | Missing Param | Notes | +|----------|---------------|-------| +| `/resources` | `includeDLNA` | Some clients use this to filter DLNA connections. | +| `/resources` | `includeRelay` | ✅ Present. | +| `/users/signin` | `code` (2FA) | `verificationCode` is present, but some legacy flows use `code`. | + +--- + +## Documentation Improvements + +1. **Add a Plex.tv API Info section** + - The spec is PMS-centric. A new top-level section should explain: + - Base URL: `https://plex.tv/api/v2` + - Legacy base URL: `https://plex.tv/api` + - Default response format: JSON for v2, XML for v1 + - Required headers for all plex.tv calls: `X-Plex-Client-Identifier`, `X-Plex-Product`, etc. + +2. **Auth flow diagram / description** + - Document the three supported auth flows: + 1. **Direct sign-in:** `POST /users/signin` with username/password (+ 2FA). + 2. **OAuth PIN:** `POST /pins` → user visits `https://plex.tv/link` → `GET /pins/{id}` → obtain token. + 3. **JWT Device Registration:** `POST /auth/jwk` → `GET /auth/nonce` → `POST /auth/token` (ED25519 keypairs, 7-day expiry). + +3. **Tag consolidation** + - The spec has tags: `Authentication`, `Users`, `Plex`. + - **Suggestion:** Add a `Plex.tv` tag group in `x-tagGroups` to organize all cloud endpoints together. + +4. **Server URL inconsistency** + - `/users` points to `https://plex.tv/api` (v1) + - `/user`, `/users/signin`, `/resources` point to `https://plex.tv/api/v2` + - Document *why* this split exists (v1 XML vs v2 JSON) and note deprecation trajectory. + +5. **`/users/signin` description** + - Expand to explicitly mention: + - 2FA challenge behavior (401 with `verificationCode` required). + - Rate limiting on auth endpoints. + - `rememberMe` behavior (extends token expiry). + +6. **Webhook payload schema** + - Although webhook configuration endpoints are missing, the spec should eventually document the inbound webhook `multipart/form-data` payload schema (event types, `payload` JSON field, optional `thumb` JPEG attachment). + +7. **XML vs JSON behavior** + - Add a note that PMS endpoints default to XML unless `Accept: application/json` is sent, while plex.tv v2 defaults to JSON. + +--- + +*End of review.* diff --git a/review/domain_devices_download_review.md b/review/domain_devices_download_review.md new file mode 100644 index 000000000..18513f776 --- /dev/null +++ b/review/domain_devices_download_review.md @@ -0,0 +1,249 @@ +# Devices & Download Queue Domain Review + +**Date:** 2026-06-03 +**Scope:** Tags `Devices`, `Download Queue`, plus `/security/*`, `/resources`, `/user`, and related schemas. +**Sources:** `plex-api-spec.yaml`, `python_plexapi_gap_analysis.md`, `integration_ecosystem_gaps.md`, `undocumented_endpoints_research.md` + +--- + +## Endpoints Present in Spec + +### Devices (Media Grabbers / DVR Tuners) + +| Path | Method | OperationId | Notes | +|------|--------|-------------|-------| +| `/media/grabbers` | `GET` | `getAvailableGrabbers` | Lists grabber protocols. | +| `/media/grabbers/devices` | `GET` | `listDevices` | Lists all discovered grabber devices. **Admin only.** | +| `/media/grabbers/devices` | `POST` | `addDevice` | Adds a device by URI to an existing grabber. **Admin only.** | +| `/media/grabbers/devices/discover` | `POST` | `discoverDevices` | Triggers SSDP/network discovery. **Admin only.** | +| `/media/grabbers/devices/{deviceId}` | `DELETE` | `removeDevice` | Removes device + channel mappings. **Admin only.** | +| `/media/grabbers/devices/{deviceId}` | `GET` | `getDeviceDetails` | Returns `MediaContainerWithDevice`. **Admin only.** | +| `/media/grabbers/devices/{deviceId}` | `PUT` | `modifyDevice` | Enable/disable device. **Admin only.** | +| `/media/grabbers/devices/{deviceId}/channelmap` | `PUT` | `setChannelmap` | Maps device channels to lineup VCNs/keys. **Admin only.** | +| `/media/grabbers/devices/{deviceId}/channels` | `GET` | `getDevicesChannels` | Returns `DeviceChannel` array. **Admin only.** | +| `/media/grabbers/devices/{deviceId}/prefs` | `PUT` | `setDevicePreferences` | Sets device preferences by name. **Admin only.** | +| `/media/grabbers/devices/{deviceId}/scan` | `DELETE` | `stopScan` | Stops channel scan. | +| `/media/grabbers/devices/{deviceId}/scan` | `POST` | `scan` | Starts channel scan (returns `X-Plex-Activity`). | +| `/media/grabbers/devices/{deviceId}/thumb/{version}` | `GET` | `getThumb` | Device thumbnail image. | +| `/media/grabbers/operations/{operationId}` | `DELETE` | `cancelGrab` | Cancels an active recording/grab. Tagged under `Subscriptions`. | + +### Download Queue + +| Path | Method | OperationId | Notes | +|------|--------|-------------|-------| +| `/downloadQueue` | `POST` | `createDownloadQueue` | Creates or returns existing queue for client+user. | +| `/downloadQueue/{queueId}` | `GET` | `getDownloadQueue` | Returns queue metadata (`id`, `itemCount`, `status`). | +| `/downloadQueue/{queueId}/add` | `POST` | `addDownloadQueueItems` | Adds items by `keys` array. Reuses many transcoding query params. | +| `/downloadQueue/{queueId}/items` | `GET` | `listDownloadQueueItems` | Lists items with `DecisionResult` + `TranscodeSession`. | +| `/downloadQueue/{queueId}/items/{itemId}` | `DELETE` | `removeDownloadQueueItems` | `itemId` is an array (supports batch delete). | +| `/downloadQueue/{queueId}/items/{itemId}` | `GET` | `getDownloadQueueItems` | Same schema as `listDownloadQueueItems`. | +| `/downloadQueue/{queueId}/items/{itemId}/restart` | `POST` | `restartProcessingDownloadQueueItems` | Reprocess with previous decision params. | +| `/downloadQueue/{queueId}/item/{itemId}/decision` | `GET` | `getItemDecision` | Returns `MediaContainerWithDecision`. | +| `/downloadQueue/{queueId}/item/{itemId}/media` | `GET` | `getDownloadQueueMedia` | Returns raw media file when transcoding complete; `503`+`Retry-After` if not ready. | + +### Security / Token / Resources + +| Path | Method | OperationId | Tag | Notes | +|------|--------|-------------|-----|-------| +| `/security/resources` | `GET` | `getSourceConnectionInformation` | `General` | Returns connection details + transient token for a source. | +| `/security/token` | `POST` | `getTransientToken` | `General` | Generates delegation token (`type=delegation`, `scope=all`). | +| `/resources` | `GET` | `get-server-resources` | `Plex` | plex.tv API v2. Returns `PlexDevice[]` (servers & clients). | +| `/user` | `GET` | `getTokenDetails` | `Authentication` | plex.tv API v2. Returns `UserPlexAccount`. | + +--- + +## Missing Endpoints + +### PMS Local Endpoints (High Impact) + +| Path | Method | Used By | Description | +|------|--------|---------|-------------| +| `/clients` | `GET` | python-plexapi, Home Assistant | Lists connected Plex clients (`MediaContainer` of `Server`/`Player` objects). | +| `/accounts` | `GET` | python-plexapi | Lists local system accounts. | +| `/devices` | `GET` | python-plexapi | Lists local system devices (distinct from grabber devices). | +| `/sync/refreshSynclists` | `PUT` | python-plexapi | Forces PMS to download new SyncList from plex.tv. | +| `/sync/refreshContent` | `PUT` | python-plexapi | Forces PMS to refresh content for known SyncLists. | +| `/sync/items/{syncId}` | `GET` | Tautulli | Sync item details. | +| `/sync/transcodeQueue` | `GET` | Tautulli | Sync transcode queue status. | +| `/myplex/claim` | `POST` | python-plexapi | Claims server using plex.tv claim token. | + +### Client Remote-Control Protocol (High Impact) + +The Plex Client Control Protocol is entirely absent. Proxied via PMS using `X-Plex-Target-Client-Identifier`. + +| Path Prefix | Methods | Description | +|-------------|---------|-------------| +| `/player/playback/play` | `POST` | Start playback | +| `/player/playback/pause` | `POST` | Pause | +| `/player/playback/stop` | `POST` | Stop | +| `/player/playback/seek` | `POST` | Seek to time | +| `/player/playback/skipTo` | `POST` | Skip to item | +| `/player/playback/skipBy` | `POST` | Skip forward/backward | +| `/player/playback/stepForward` | `POST` | Step forward | +| `/player/playback/stepBack` | `POST` | Step back | +| `/player/playback/setParameters` | `POST` | Set shuffle/repeat/volume | +| `/player/playback/subtitleStream` | `POST` | Change subtitle stream | +| `/player/playback/audioStream` | `POST` | Change audio stream | +| `/player/playback/videoStream` | `POST` | Change video stream | +| `/player/playback/volume` | `POST` | Set volume | +| `/player/playback/mute` | `POST` | Mute | +| `/player/playback/unmute` | `POST` | Unmute | +| `/player/playback/setTextStream` | `POST` | Set text stream | +| `/player/playback/setRating` | `POST` | Rate item | +| `/player/playback/setViewOffset` | `POST` | Set resume offset | +| `/player/playback/setState` | `POST` | Set playback state | +| `/player/playback/refreshPlayQueue` | `POST` | Refresh play queue | +| `/player/playback/playMedia` | `POST` | Play specific media on client | +| `/player/timeline/poll` | `GET` | Poll client playback timeline | +| `/resources` (on client) | `GET` | Client capabilities and device info | + +### plex.tv Cloud Endpoints (Out-of-scope for PMS spec, but referenced) + +| Path | Method | Description | +|------|--------|-------------| +| `https://plex.tv/api/v2/devices/{deviceId}/certificate/subject` | `GET` | Device certificate subject (used during claim). | +| `https://plex.tv/api/v2/devices/{deviceId}/certificate/csr` | `PUT` | Upload CSR. | +| `https://plex.tv/api/v2/devices/{deviceId}/certificate/download` | `GET` | Download signed cert. | +| `https://plex.tv/api/v2/release_channels` | `GET` | Release channel info. | +| `https://sonos.plex.tv/resources` | `GET` | Sonos speaker discovery. | + +### Real-Time / Websocket + +| Path | Description | +|------|-------------| +| `/:/websockets/notifications` | WebSocket event bus for sessions, timeline, status. Used by Tautulli and Home Assistant. Spec documents SSE/EventSource only. | + +--- + +## Schema Corrections + +### `Device` Schema (reusable component) + +**Current state:** The `Device` schema (`#/components/schemas/Device`) defines only 12 properties: + +- `ChannelMapping`, `key`, `lastSeenAt`, `make`, `model`, `modelNumber`, `protocol`, `sources`, `state`, `status`, `tuners`, `uri`, `uuid` + +**Issues:** +- **Missing `id`:** The `deviceId` path parameter is typed as `integer`, but the schema has no `id` field. +- **Missing `name` / `title`:** No human-readable device name. +- **Missing `enabled`:** The `PUT /media/grabbers/devices/{deviceId}` endpoint toggles this, but it is not in the schema. +- **Missing `deviceIdentifier`:** Not distinguished from `uuid`. +- **Missing `thumb` / `thumbVersion`:** Referenced by `/media/grabbers/devices/{deviceId}/thumb/{version}`. +- **Missing `lineup` / `lineupType`:** EPG lineup association is absent. +- **No `$ref` usage in responses:** `MediaContainerWithDevice` duplicates the `Device` properties inline instead of referencing `#/components/schemas/Device`. This means fixes must be applied in two places. + +### `MediaContainerWithDevice` Schema + +**Issue:** Duplicates `Device` properties verbatim instead of using `allOf` + `$ref: '#/components/schemas/Device'`. Should be: + +```yaml +MediaContainerWithDevice: + type: object + properties: + MediaContainer: + allOf: + - $ref: '#/components/schemas/MediaContainer' + - type: object + properties: + Device: + type: array + items: + $ref: '#/components/schemas/Device' +``` + +### `Grabber` / `MediaGrabber` Schema + +**Issue:** No reusable schema exists. The `GET /media/grabbers` response defines `MediaGrabber` inline with only: +- `identifier`, `protocol`, `title` + +**Likely missing fields:** +- `id`, `type`, `deviceType`, `urlBase`, `modelDescription`, `modelNumber`, `modelURL`, `UDN`, `manufacturer`, `manufacturerURL`, `protocols` (array), `features`. + +### `DownloadQueue` Schema + +**Issue:** Not a reusable component. Defined inline in `POST /downloadQueue` and `GET /downloadQueue/{queueId}`. + +**Current fields:** `id`, `itemCount`, `status` + +**Likely missing fields:** +- `createdAt`, `updatedAt`, `clientIdentifier`, `userID`, `totalSize`, `identifier`. + +### `DownloadQueueItem` Schema + +**Issue:** Not a reusable component. Defined inline in `GET /downloadQueue/{queueId}/items` and `GET /downloadQueue/{queueId}/items/{itemId}`. + +**Current fields:** `DecisionResult`, `error`, `id`, `key`, `queueId`, `status`, `transcode`, `TranscodeSession` + +**Likely missing fields:** +- `createdAt`, `updatedAt`, `downloadUrl`, `metadata` (`Metadata` object), `mediaIndex`, `partIndex`, `optimizedForStreaming`, `videoResolution`, `audioCodec`, `videoCodec`, `container`. + +### `PlexDevice` Schema + +**Status:** Well-defined reusable schema (`#/components/schemas/PlexDevice`) with 25+ fields. Used by `/resources`. + +**Minor issue:** `platform`, `platformVersion`, and `device` are typed as `["null", "string"]` which is correct for optional nullable fields, but the `required` list includes them. This is contradictory — either remove from `required` or remove `null` from type. + +### `ServerConfiguration` Schema (cross-domain) + +**Issues noted in gap analysis:** +- `diagnostics`: Spec types as `string`; SDK parses as `list` (comma-separated). +- `transcoderVideoBitrates`: Untyped / description only; SDK parses as `list`. +- `transcoderVideoQualities`: Spec types as `string`; SDK parses as `list`. +- `transcoderVideoResolutions`: Description only; SDK parses as `list`. +- `ownerFeatures`: Spec types as `string` (comma-separated); SDK parses as `list`. + +--- + +## Parameter/Query Gaps + +### Devices + +| Endpoint | Gap | Details | +|----------|-----|---------| +| `GET /media/grabbers` | `protocol` query param | Only documented as `string` with example `livetv`. Should enumerate known protocols (`stream`, `download`, `livetv`). | +| `POST /media/grabbers/devices` | `uri` query param | No format/validation pattern documented. | +| `PUT /media/grabbers/devices/{deviceId}/channelmap` | `channelMapping` / `channelMappingByKey` | `style: deepObject` is used but no formal schema for the nested map keys. | +| `PUT /media/grabbers/devices/{deviceId}/prefs` | `name` query param | Description says "preference names and values" but schema is just `string`. Should be `object` or better documented as `name=value` pairs. | +| `POST /media/grabbers/devices/{deviceId}/scan` | `source` query param | Only example `Cable` given; should list valid scan sources (OTA, Cable, etc.). | + +### Download Queue + +| Endpoint | Gap | Details | +|----------|-----|---------| +| `POST /downloadQueue/{queueId}/add` | `keys` parameter | `explode: false` array of strings. No max length or format documented. | +| `POST /downloadQueue/{queueId}/add` | Transcoding params | Re-uses ~25 transcoding parameters (e.g., `videoBitrate`, `audioChannelCount`, `subtitles`). These are well-documented individually but the interaction with download-queue transcoding is not described. | +| `GET /downloadQueue/{queueId}/items` | Pagination | No `offset` / `limit` query parameters; relies on `X-Plex-Container-Start` / `X-Plex-Container-Size` headers which are not listed as request parameters. | +| `GET /downloadQueue/{queueId}/item/{itemId}/media` | `Accept` header | Should document required `Accept` header for media file negotiation. | + +### Security / Resources + +| Endpoint | Gap | Details | +|----------|-----|---------| +| `GET /security/resources` | `source` query param | Required but no enum or example of valid source identifiers. | +| `GET /security/resources` | `refresh` query param | Boolean (`BoolInt`) but behavior is not described. | +| `POST /security/token` | `type` / `scope` | Only `delegation` / `all` are documented. No note on whether additional scopes are planned. | +| `GET /resources` | `includeHttps` / `includeRelay` / `includeIPv6` | Defaults are `0`; should clarify that omitting them is equivalent to `0`. | + +--- + +## Documentation Improvements + +### Tag Clarity +1. **Devices tag description** conflates "media grabber devices" (DVR tuners) with "Plex clients/devices". A clarifying note should be added that this tag **only** covers DVR/network tuner devices discovered via SSDP, and that client discovery is handled via `/clients` (missing) or `/resources`. +2. **`/media/grabbers/operations/{operationId}`** is tagged under `Subscriptions` rather than `Devices`. While logically related to subscription recordings, it operates on grabber operations and could be cross-tagged. + +### Endpoint Descriptions +1. **`/security/token`** description states "responds to all HTTP verbs but POST is preferred." The spec only documents `POST`. Either document all verbs or restrict the description to `POST` only. +2. **Download Queue endpoints** all carry an `Available: 0.2.0` note with no context. If this refers to an internal API version, it should be documented in the tag description or removed if not actionable for consumers. +3. **`GET /downloadQueue/{queueId}/item/{itemId}/media`** returns `200` with "The raw media file" but has no `content` schema. Should document expected `Content-Type` (e.g., `video/mp4`, `application/octet-stream`) and note that the actual type depends on the transcode decision. +4. **`GET /media/grabbers/devices/{deviceId}/thumb/{version}`** returns `200` with "The thumbnail for the device" but has no `content` schema. Should document `image/jpeg` or `image/png` response type. + +### Schema Documentation +1. **`Device` schema** should be expanded and referenced consistently. The SSDP example in the tag description lists fields (`UDN`, `URLBase`, `deviceType`, `serviceType`, `serviceId`, `friendlyName`, `manufacturer`, `modelDescription`, `modelName`, `modelNumber`) that do not appear in the `Device` schema at all. +2. **`MediaGrabber` inline schema** should become a reusable component with complete fields. +3. **`DownloadQueue` and `DownloadQueueItem` inline schemas** should be promoted to reusable components under `#/components/schemas/`. +4. **`TranscodeSession` schema** is referenced by `DownloadQueueItem` but is minimal. The comment in the spec admits it is "not yet documented." This is a known gap but should be prioritized. + +### Cross-References +1. Add a note in the `Devices` tag pointing to the `DVRs`, `EPG`, `Live TV`, and `Subscriptions` tags, since grabber devices are tightly coupled with DVR functionality. +2. Add a note in the `Download Queue` tag explaining that this is the **server-side sync/optimization queue** (used for mobile sync and optimized versions), distinct from the client-side `Play Queue`. diff --git a/review/domain_library_metadata_review.md b/review/domain_library_metadata_review.md new file mode 100644 index 000000000..0dffe39a0 --- /dev/null +++ b/review/domain_library_metadata_review.md @@ -0,0 +1,401 @@ +# Library & Metadata Domain Review + +**Domain:** Library, Library Collections, Library Playlists, Collections, Metadata, Media, Part, Stream +**Date:** 2026-06-03 +**Spec file:** `plex-api-spec.yaml` (≈17k lines, OpenAPI 3.1.1) + +--- + +## Endpoints Present in Spec (inventory with assessment) + +### Root Library Endpoints + +| Path | Methods | Tag | Assessment | +|------|---------|-----|------------| +| `/library/all` | GET | Library | **Partial** — only documents `mediaQuery`; missing `type`, `sort`, filters, include/exclude flags | +| `/library/caches` | DELETE | Library | ✅ Complete | +| `/library/clean/bundles` | PUT | Library | ✅ Complete | +| `/library/collections` | POST | Collections | **Partial** — creation params present but collection-specific response fields under-documented | +| `/library/file` | POST | Library | ✅ Complete | +| `/library/matches` | GET | Library | ✅ Complete | +| `/library/optimize` | PUT | Library | ✅ Complete | +| `/library/randomArtwork` | GET | Library | ✅ Complete | +| `/library/tags` | GET | Library | ✅ Complete | + +### Library Sections + +| Path | Methods | Tag | Assessment | +|------|---------|-----|------------| +| `/library/sections/all` | GET | Library | ✅ Complete | +| `/library/sections/all/refresh` | DELETE | Library | ✅ Complete | +| `/library/sections/prefs` | GET | Library | ✅ Complete | +| `/library/sections/refresh` | POST | Library | ✅ Complete | +| `/library/sections/{sectionId}` | GET, PUT, DELETE | Library | **Partial** — missing `edit` body schema; `PUT` params under-documented | +| `/library/sections/{sectionId}/albums` | GET | Content | ✅ Complete | +| `/library/sections/{sectionId}/all` | GET, PUT | Content | **Partial** — GET missing `type`, `sort`, tag filters, include/exclude matrix; PUT field-editing schema is descriptive only | +| `/library/sections/{sectionId}/allLeaves` | GET | Content | ✅ Complete | +| `/library/sections/{sectionId}/analyze` | POST | Library | ✅ Complete | +| `/library/sections/{sectionId}/arts` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/autocomplete` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/categories` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/cluster` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/collections` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/common` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/computePath` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/emptyTrash` | PUT | Library | ✅ Complete | +| `/library/sections/{sectionId}/filters` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/firstCharacters` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/indexes` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/intros` | POST | Library | ✅ Complete | +| `/library/sections/{sectionId}/location` | GET, POST, DELETE | Library | ✅ Complete | +| `/library/sections/{sectionId}/moment` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/nearest` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/prefs` | GET, PUT | Library | ✅ Complete | +| `/library/sections/{sectionId}/refresh` | DELETE, POST | Library | ✅ Complete | +| `/library/sections/{sectionId}/sorts` | GET | Library | ✅ Complete | +| `/library/sections/{sectionId}/collection/{collectionId}` | DELETE | Library | ✅ Complete | +| `/library/sections/{sectionId}/composite/{updatedAt}` | GET | Library | ✅ Complete | + +### Metadata Items + +| Path | Methods | Tag | Assessment | +|------|---------|-----|------------| +| `/library/metadata/{ids}` | GET, PUT, DELETE | Content / Library | **Partial** — GET has `checkFiles`, `skipRefresh`, `asyncAugmentMetadata` but missing `includeMarkers`, `includeChapters`, `includeExtras`, `includeRelated`, `includeOnDeck`, `includePopularLeaves`, `includeReviews`, `includeStations`, `includeExternalMedia`, `excludeElements`, `excludeFields`; PUT body schema is `args: object` (opaque) | +| `/library/metadata/{ids}/addetect` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/allLeaves` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/analyze` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/chapterThumbs` | POST | Library | ✅ Complete | +| `/library/metadata/{ids}/credits` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/extras` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/file` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/index` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/intro` | GET, PUT | Library | ✅ Complete | +| `/library/metadata/{ids}/marker` | GET, POST | Library | ✅ Complete | +| `/library/metadata/{ids}/match` | PUT | Library | ✅ Complete | +| `/library/metadata/{ids}/matches` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/merge` | PUT | Library | ✅ Complete | +| `/library/metadata/{ids}/nearest` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/prefs` | GET, PUT | Library | ✅ Complete | +| `/library/metadata/{ids}/refresh` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/related` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/similar` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/split` | PUT | Library | ✅ Complete | +| `/library/metadata/{ids}/subtitles` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/tree` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/unmatch` | PUT | Library | ✅ Complete | +| `/library/metadata/{ids}/users/top` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/voiceActivity` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/augmentations/{augmentationId}` | GET | Library | ✅ Complete | +| `/library/metadata/{ids}/media/{mediaItem}` | PUT | Library | ✅ Complete | +| `/library/metadata/{ids}/marker/{marker}` | DELETE, PUT | Library | ✅ Complete | +| `/library/metadata/{ids}/{element}` | POST, PUT | Library | ✅ Complete — supports `thumb`, `art`, `clearLogo`, `banner`, `poster`, `theme` | +| `/library/metadata/{ids}/{element}/{timestamp}` | GET | Library | ✅ Complete | +| `/library/metadata/augmentations/{augmentationId}` | GET, DELETE | Library | ✅ Complete | + +### Media, Parts, Streams, People + +| Path | Methods | Tag | Assessment | +|------|---------|-----|------------| +| `/library/parts/{partId}` | GET, PUT | Library | ✅ Complete | +| `/library/parts/{partId}/indexes/{index}` | GET | Library | ✅ Complete | +| `/library/parts/{partId}/indexes/{index}/{offset}` | GET | Library | ✅ Complete | +| `/library/parts/{partId}/{changestamp}/{filename}` | GET | Library | ✅ Complete | +| `/library/people/{personId}` | GET | Library | ✅ Complete | +| `/library/people/{personId}/media` | GET | Library | ✅ Complete | +| `/library/streams/{streamId}/levels` | GET | Library | ✅ Complete | +| `/library/streams/{streamId}/loudness` | GET | Library | ✅ Complete | +| `/library/streams/{streamId}.{ext}` | GET | Library | ✅ Complete | +| `/library/media/{mediaId}/chapterImages/{chapter}` | GET | Library | ✅ Complete | + +### Collections + +| Path | Methods | Tag | Assessment | +|------|---------|-----|------------| +| `/library/collections/{collectionId}/items` | GET, PUT | Library Collections | ✅ Complete | +| `/library/collections/{collectionId}/items/{itemId}` | DELETE | Library Collections | ✅ Complete | +| `/library/collections/{collectionId}/items/{itemId}/move` | PUT | Library Collections | ✅ Complete | +| `/library/collections/{collectionId}/composite/{updatedAt}` | GET | Library Collections | ✅ Complete | + +### Playlists + +| Path | Methods | Tag | Assessment | +|------|---------|-----|------------| +| `/playlists` | GET, POST | Playlist / Library Playlists | **Partial** — missing `type=42` (optimized/conversion items) query param documentation | +| `/playlists/upload` | POST | Library Playlists | ✅ Complete | +| `/playlists/{playlistId}` | GET, PUT, DELETE | Playlist / Library Playlists | ✅ Complete | +| `/playlists/{playlistId}/generators` | GET | Library Playlists | ✅ Complete | +| `/playlists/{playlistId}/items` | GET, POST, DELETE | Library Playlists | ✅ Complete | +| `/playlists/{playlistId}/items/{generatorId}` | DELETE | Library Playlists | ✅ Complete | +| `/playlists/{playlistId}/items/{generatorId}/items` | GET, POST | Library Playlists | ✅ Complete | +| `/playlists/{playlistId}/items/{playlistItemId}/move` | PUT | Library Playlists | ✅ Complete | +| `/playlists/{playlistId}/items/{generatorId}/{metadataId}/{action}` | PUT | Library Playlists | ✅ Complete | + +--- + +## Missing Endpoints + +### Section Browsing & Filtering (used by official clients) + +| Path | Method | Purpose | Evidence | +|------|--------|---------|----------| +| `/library/sections/{id}/onDeck` | GET | On-deck items for this section | Client traffic / community knowledge | +| `/library/sections/{id}/unwatched` | GET | Unwatched items | Client traffic | +| `/library/sections/{id}/newest` | GET | Newest additions | Client traffic | +| `/library/sections/{id}/byYear` | GET | Browse by year | Client traffic | +| `/library/sections/{id}/byDecade` | GET | Browse by decade | Client traffic | +| `/library/sections/{id}/byContentRating` | GET | Browse by content rating | Client traffic | +| `/library/sections/{id}/byResolution` | GET | Browse by resolution | Client traffic | +| `/library/sections/{id}/byFolder` | GET | Browse by folder | Client traffic | +| `/library/sections/{id}/agents` | GET | Available agents for this section | Client traffic | +| `/library/sections/{id}/match` | GET | Match items in section | Client traffic | +| `/library/sections/{id}/unmatch` | GET | Unmatch items in section | Client traffic | +| `/library/sections/{id}/edit` | GET / PUT | Edit section metadata | Client traffic | +| `/library/sections/{id}/move` | PUT | Move section paths | Client traffic | +| `/library/sections/{id}/settings` | GET | Section-specific settings | Client traffic | +| `/library/sections/{id}/playlists` | GET | Playlists belonging to section | Client traffic | +| `/library/sections/{id}/hubs` | GET | Hubs for this section | Client traffic | +| `/library/sections/{id}/timeline` | GET | Section timeline | Client traffic | +| `/library/sections/{id}/search` | GET | Section-scoped search | Client traffic | +| `/library/sections/{id}/tags` | GET | Tags in section | Client traffic | +| `/library/sections/{id}/artists` | GET | Artists (music) | Client traffic | +| `/library/sections/{id}/shows` | GET | Shows (TV) | Client traffic | +| `/library/sections/{id}/episodes` | GET | Episodes | Client traffic | +| `/library/sections/{id}/movies` | GET | Movies | Client traffic | +| `/library/sections/{id}/clips` | GET | Clips | Client traffic | +| `/library/sections/{id}/photos` | GET | Photos | Client traffic | +| `/library/sections/{id}/recentlyAdded` | GET | Per-library recently added | Tautulli | + +### Global & Hub Recently Added + +| Path | Method | Purpose | Evidence | +|------|--------|---------|----------| +| `/library/recentlyAdded` | GET | Global recently added | Tautulli | +| `/hubs/home/recentlyAdded` | GET | Hub-centric recently added | Tautulli | + +### Metadata Sub-Endpoints + +| Path | Method | Purpose | Evidence | +|------|--------|---------|----------| +| `/library/metadata/{id}/children` | GET | Children of show/season/artist/album | SDK (`key` attribute) | +| `/library/metadata/{id}/onDeck` | GET | On-deck for this show/season | Client traffic | +| `/library/metadata/{id}/reviews` | GET | User reviews | Client traffic | +| `/library/metadata/{id}/parent` | GET | Parent metadata shortcut | Client traffic | +| `/library/metadata/{id}/grandparent` | GET | Grandparent metadata shortcut | Client traffic | +| `/library/metadata/{id}/grandchildren` | GET | Grandchildren (e.g. episodes under show) | Tautulli, python-plexapi | + +### Note on Poster / Art Upload + +The spec documents `/library/metadata/{ids}/{element}` (POST/PUT) with `element` enum including `poster`, `art`, `thumb`, `banner`, `clearLogo`, `theme`. This covers the upload functionality Kometa uses, but **Kometa and other tools call specific paths** (`/library/metadata/{id}/posters`, `/library/metadata/{id}/arts`). The generic endpoint is present, but dedicated path aliases are not explicitly listed. + +--- + +## Schema Corrections + +### `Metadata` Schema + +The `Metadata` schema (`#/components/schemas/Metadata`) is the central type for movies, shows, episodes, tracks, etc. It uses `additionalProperties: true`, which masks missing fields. The following fields are **not documented** but are parsed by `python-plexapi` from XML/JSON responses: + +| Field | Found In | Notes | +|-------|----------|-------| +| `artBlurHash` | `video.py`, `audio.py` | Blur hash for background art | +| `thumbBlurHash` | `video.py`, `audio.py` | Blur hash for thumbnail | +| `lastRatedAt` | `video.py`, `audio.py` | Timestamp of last user rating | +| `editionTitle` | `video.py` (Movie) | Edition string (e.g. "Director's Cut") | +| `languageOverride` | `video.py` (Movie, Show) | Per-item language override | +| `enableCreditsMarkerGeneration` | `video.py` (Movie, Show) | Credits marker flag | +| `useOriginalTitle` | `video.py` (Movie, Show) | Display original title flag | +| `slug` | `video.py` (Movie, Show) | URL-friendly slug | +| `skipCount` | `audio.py` (Track) | Number of times skipped | +| `musicAnalysisVersion` | `audio.py` (Audio base) | Analysis version for music | +| `distance` | `audio.py` (Audio base) | Sonic similarity distance | +| `sourceURI` | `video.py`, `audio.py`, `playlist.py` | Remote/shared server item URI | +| `playlistItemID` | `base.py` (Playable) | Item ID within a playlist | +| `playQueueItemID` | `base.py` (Playable) | Item ID within a play queue | + +**Type-specific gap:** The `Metadata` schema is a flat union. It does **not** distinguish type-specific required/optional fields (e.g. `year` is optional for episodes, `parentIndex` is season number, `grandparentTitle` is show name). Tools must infer field applicability by `type`. + +### `Media` Schema + +| Field | Found In | Notes | +|-------|----------|-------| +| `uuid` | `media.py` | Media instance UUID | +| `selected` | `media.py` | Whether this media version is selected | + +*Note:* `title` is present in spec ✅. + +### `Part` Schema + +| Field | Found In | Notes | +|-------|----------|-------| +| `protocol` | `media.py` | Streaming protocol (e.g. `dash`, `hls`) | +| `packetLength` | `media.py` | RTP packet length | +| `requiredBandwidths` | `media.py` | Bandwidth requirements list | +| `syncItemId` | `media.py` | Mobile sync item association | +| `syncState` | `media.py` | Sync state (e.g. `pending`, `downloaded`) | +| `deepAnalysisVersion` | `media.py` | Deep analysis version | + +*Note:* `decision` is present in `MediaContainerWithDecision` ✅. + +### `Stream` Schema + +The `Stream` schema covers video, audio, and subtitle streams. Many audio-specific loudness and subtitle-specific fields are missing: + +#### AudioStream gaps + +| Field | Notes | +|-------|-------| +| `bitrateMode` | e.g. `cbr`, `vbr` | +| `visualImpaired` | Audio description track flag | +| `albumGain` | ReplayGain album gain | +| `albumPeak` | ReplayGain album peak | +| `albumRange` | ReplayGain album range | +| `endRamp` | Loudness ramp end | +| `gain` | Track replay gain | +| `loudness` | Integrated loudness (LUFS) | +| `lra` | Loudness range | +| `peak` | Track peak | +| `startRamp` | Loudness ramp start | + +#### SubtitleStream gaps + +| Field | Notes | +|-------|-------| +| `providerTitle` | Subtitle provider name | +| `score` | Match confidence score | +| `sourceKey` | Source identifier | +| `transient` | Temporary/downloaded subtitle | +| `userID` | User who added subtitle | +| `perfectMatch` | Exact match flag | + +#### LyricStream gaps + +| Field | Notes | +|-------|-------| +| `minLines` | Minimum lines in lyric file | +| `provider` | Lyric provider | +| `timed` | Whether lyrics are timestamped | + +### `Collection` Schema + +**There is no dedicated `Collection` schema in the spec.** Collections appear to reuse `Metadata` (or are returned inside `MediaContainerWithMetadata`). The following collection-specific fields are missing: + +| Field | Notes | +|-------|-------| +| `collectionFilterBasedOnUser` | Smart-collection user filter | +| `collectionMode` | Display mode (`default`, `hideItems`, `showItems`) | +| `collectionPublished` | Whether published to Plex Discover | +| `collectionSort` | Sort order for collection | +| `artBlurHash` | Blur hash for collection art | +| `thumbBlurHash` | Blur hash for collection thumb | +| `userRating` | User star rating | +| `lastRatedAt` | Rating timestamp | + +### `Playlist` Schema + +Playlists in the spec are defined via `MediaContainerWithPlaylistMetadata`, which extends `Metadata` with a few extra fields. Missing fields: + +| Field | Notes | +|-------|-------| +| `durationInSeconds` | Total duration in seconds (redundant but present in XML) | +| `radio` | Whether this is a generated radio playlist | +| `titleSort` | Sort-friendly title | + +*Note:* `librarySectionID`, `librarySectionKey`, `librarySectionTitle` are present ✅. + +--- + +## Parameter/Query Gaps + +### Missing or Under-Documented on `/library/sections/{sectionId}/all` + +The GET method only documents `includeMeta`, `includeGuids`, `sectionId`, `mediaQuery`, `X-Plex-Container-Start`, `X-Plex-Container-Size`. Widely used but **absent** params: + +| Parameter | Purpose | +|-----------|---------| +| `type` | Filter by metadata type (`1`=movie, `2`=show, `3`=season, `4`=episode, `8`=artist, `9`=album, `10`=track) | +| `sort` | Sort key and direction (e.g. `addedAt:desc`, `titleSort`) | +| `filters` / `unwatched` (`1`) | General filtering | +| `genre`, `studio`, `contentRating`, `resolution`, `year`, `firstCharacter` | Tag-based filters | +| `includeCollections` | Include collection items in results | +| `includeExternalMedia` | Include external/online media | +| `includeAdvanced` | Include advanced settings | +| `checkFiles` | Verify file existence | +| `includeRelated` | Include related items | +| `includeExtras` | Include trailers, behind-the-scenes, etc. | +| `includePopularLeaves` | Include popular episodes | +| `includeConcerts` | Include concert items | +| `includeOnDeck` | Include On Deck status | +| `includeChapters` | Include chapter markers | +| `includePreferences` | Include user preferences | +| `includeBandwidths` | Include bandwidth info | +| `includeLoudnessRamps` | Include loudness ramp data | +| `includeStations` | Include radio station data | +| `includeExternalIds` | Include external GUIDs | +| `includeReviews` | Include user reviews | +| `includeCredits` | Include full credits | +| `includeArt`, `includeThumb`, `includeBanner`, `includeTheme` | Force inclusion of artwork fields | +| `includeFields` | Whitelist of fields to return | +| `asyncAugmentMetadata` | Async metadata augmentation | +| `asyncRefreshLocalMediaAgent` | Async local media agent refresh | +| `nocache` | Bypass cache | +| `excludeFields` | Blacklist of fields to omit | +| `skipRefresh` | Skip synchronous refresh | + +### Missing on `/library/metadata/{ids}` + +| Parameter | Purpose | Notes | +|-----------|---------|-------| +| `includeMarkers` | Intro/credits markers | Critical for Tautulli and skip-intro clients | +| `includeChapters` | Chapter data | Missing from spec GET params | +| `includeExternalMedia` | External media | Missing | +| `includeExtras` | Extras/trailers | Missing | +| `includeRelated` | Related items | Missing | +| `includeOnDeck` | On Deck status | Missing | +| `includePopularLeaves` | Popular episodes | Missing | +| `includeReviews` | User reviews | Missing | +| `includeStations` | Radio stations | Missing | +| `includeGuids` | External GUIDs | Only documented on `/library/sections/{id}/all` | +| `excludeElements` | Omit elements | Mentioned only in history endpoint description | +| `excludeFields` | Omit fields | Mentioned only in history endpoint description | + +### Other Parameter Gaps + +| Parameter | Where It Should Be | Notes | +|-----------|-------------------|-------| +| `type=42` | `/playlists` | Optimized/conversion items (python-plexapi `optimizedItems()`, `conversions()`) | +| `includeCollections=1` | `/hubs/search` | Tautulli uses this for collection-in-search | +| `playlistType` | `/playlists` | Present ✅ | +| `sectionID` | `/playlists` | Present ✅ | +| `asyncAugmentMetadata=1` | `/library/metadata/{ids}` | Present on GET ✅ (query param `asyncAugmentMetadata`) | + +--- + +## Documentation Improvements + +1. **Dedicate a `Collection` schema.** Collections are not vanilla `Metadata` items. They carry `collectionMode`, `collectionSort`, `collectionPublished`, `collectionFilterBasedOnUser`, and blur hashes. Reusing `Metadata` with `additionalProperties: true` hides these fields from generated SDKs. + +2. **Add `Playlist` schema fields.** `durationInSeconds`, `radio`, and `titleSort` are real XML attributes that python-plexapi relies on. + +3. **Document blur hashes and loudness fields.** These are XML-first fields (`artBlurHash`, `thumbBlurHash`, `loudness`, `gain`, `albumGain`, etc.) that do not always appear in JSON unless requested. The spec should note XML vs JSON behavior. + +4. **Expand `/library/sections/{id}/all` query parameters.** This is one of the most trafficked endpoints. Missing `type`, `sort`, tag filters, and the include/exclude matrix forces SDK users to hand-craft query strings. + +5. **Document `includeMarkers=1` on metadata endpoints.** Intro/credits skip detection is a first-class feature in modern Plex. Tautulli and many clients depend on this parameter. + +6. **Add missing section sub-endpoints.** `/onDeck`, `/unwatched`, `/newest`, `/byYear`, `/byDecade`, `/byContentRating`, `/byResolution`, `/byFolder`, `/recentlyAdded` are all used by official Plex clients and are well-known in the community. + +7. **Add global `/library/recentlyAdded` and `/hubs/home/recentlyAdded`.** These are standard "what's new" endpoints used by Tautulli and dashboards. + +8. **Add `/library/metadata/{id}/children`, `/parent`, `/grandparent`, `/grandchildren`.** These hierarchy shortcuts prevent excessive round-trips for show→season→episode traversal. + +9. **Clarify `PUT /library/metadata/{ids}` body schema.** The current spec uses `args: object`, which is opaque. Document editable fields (title, summary, tag locks, etc.). + +10. **Document `sourceURI` behavior.** Cross-server playlist/collection items use `sourceURI` pointing to other servers. This multi-server awareness pattern is not described. + +11. **Add missing `Stream` fields.** Audio loudness (`lra`, `peak`, `gain`, `startRamp`, `endRamp`), subtitle metadata (`providerTitle`, `score`, `perfectMatch`), and lyric metadata (`minLines`, `provider`, `timed`) should be added. + +12. **Add missing `Part` fields.** `protocol`, `packetLength`, `requiredBandwidths`, `syncItemId`, `syncState`, `deepAnalysisVersion` are needed for sync and transcode clients. + +13. **Add missing `Media` fields.** `uuid` and `selected` are present in real responses. + +14. **Document the `_INCLUDES` / `_EXCLUDES` pattern.** python-plexapi's `PlexPartialObject.reload()` uses a matrix of include/exclude parameters. A reusable parameter component (e.g. `#/components/parameters/includeExcludeMatrix`) would keep the spec DRY. diff --git a/review/domain_livetv_dvr_review.md b/review/domain_livetv_dvr_review.md new file mode 100644 index 000000000..c34044bb6 --- /dev/null +++ b/review/domain_livetv_dvr_review.md @@ -0,0 +1,256 @@ +# Live TV & DVR Domain Review + +**Date:** 2026-06-03 +**Spec File:** `plex-api-spec.yaml` +**Domain:** Live TV & DVR (Tags: DVRs, Devices, EPG, Subscriptions, Live TV) +**Paths Reviewed:** `/livetv/*`, `/media/subscriptions/*`, `/media/grabbers/*` + +--- + +## Endpoints Present in Spec + +### DVRs (`/livetv/dvrs`) + +| Path | Methods | Tags | Notes | +|------|---------|------|-------| +| `/livetv/dvrs` | GET, POST | DVRs | `POST` requires `admin` scope | +| `/livetv/dvrs/{dvrId}` | GET, DELETE | DVRs | `DELETE` requires `admin` scope | +| `/livetv/dvrs/{dvrId}/lineups` | PUT, DELETE | DVRs | Both require `admin` scope | +| `/livetv/dvrs/{dvrId}/prefs` | PUT | DVRs | Requires `admin` scope | +| `/livetv/dvrs/{dvrId}/reloadGuide` | POST, DELETE | DVRs | Both require `admin` scope | +| `/livetv/dvrs/{dvrId}/channels/{channel}/tune` | POST | DVRs | Tunes a channel | +| `/livetv/dvrs/{dvrId}/devices/{deviceId}` | PUT, DELETE | DVRs | Add/remove device from DVR | + +### EPG (`/livetv/epg`) + +| Path | Methods | Tags | Notes | +|------|---------|------|-------| +| `/livetv/epg/channelmap` | GET | EPG | Compute best channel map | +| `/livetv/epg/channels` | GET | EPG | Get channels for a lineup | +| `/livetv/epg/countries` | GET | EPG | List countries with EPG data | +| `/livetv/epg/languages` | GET | EPG | List available languages | +| `/livetv/epg/lineup` | GET | EPG | Compute best lineup | +| `/livetv/epg/lineupchannels` | GET | EPG | Get channels across multiple lineups | +| `/livetv/epg/countries/{country}/{epgId}/lineups` | GET | EPG | Lineups by postal code | +| `/livetv/epg/countries/{country}/{epgId}/regions` | GET | EPG | Regions for a country | +| `/livetv/epg/countries/{country}/{epgId}/regions/{region}/lineups` | GET | EPG | Lineups for a region | + +### Live TV Sessions (`/livetv/sessions`) + +| Path | Methods | Tags | Notes | +|------|---------|------|-------| +| `/livetv/sessions` | GET | Live TV | List all sessions | +| `/livetv/sessions/{sessionId}` | GET | Live TV | Get single session metadata | +| `/livetv/sessions/{sessionId}/{consumerId}/index.m3u8` | GET | Live TV | HLS playlist index | +| `/livetv/sessions/{sessionId}/{consumerId}/{segmentId}` | GET | Live TV | HLS segment delivery | + +### Subscriptions (`/media/subscriptions`) + +| Path | Methods | Tags | Notes | +|------|---------|------|-------| +| `/media/subscriptions` | GET, POST | Subscriptions | `includeGrabs`, `includeStorage` query params | +| `/media/subscriptions/process` | POST | Subscriptions | Process all subscriptions async | +| `/media/subscriptions/scheduled` | GET | Subscriptions | Scheduled recordings across all subs | +| `/media/subscriptions/template` | GET | Subscriptions | Get subscription template for a GUID | +| `/media/subscriptions/{subscriptionId}` | GET, PUT, DELETE | Subscriptions | Single subscription CRUD | +| `/media/subscriptions/{subscriptionId}/move` | PUT | Subscriptions | Re-order subscription priority | + +### Grabbers / Devices (`/media/grabbers`) + +| Path | Methods | Tags | Notes | +|------|---------|------|-------| +| `/media/grabbers` | GET | Devices | `protocol` filter (e.g. `livetv`) | +| `/media/grabbers/devices` | GET, POST | Devices | List/add devices | +| `/media/grabbers/devices/discover` | POST | Devices | Trigger device discovery | +| `/media/grabbers/devices/{deviceId}` | GET, DELETE | Devices | Get/remove device | +| `/media/grabbers/devices/{deviceId}/channelmap` | PUT | Devices | Set channel mapping | +| `/media/grabbers/devices/{deviceId}/channels` | GET | Devices | Get device channels | +| `/media/grabbers/devices/{deviceId}/prefs` | PUT | Devices | Set device preferences | +| `/media/grabbers/devices/{deviceId}/scan` | POST, DELETE | Devices | Start/stop channel scan | +| `/media/grabbers/devices/{deviceId}/thumb/{version}` | GET | Devices | Device thumbnail | +| `/media/grabbers/operations/{operationId}` | DELETE | Subscriptions | Cancel an active grab/recording | + +### Cross-cutting Observations + +- **Plex Pass / admin requirement:** Most write operations require `admin` token scope. Read operations on subscriptions and scheduled recordings return `403` with "User cannot access DVR on this server" when the user lacks DVR privileges. +- **Client info headers:** Every endpoint repeats the full set of `X-Plex-*` client identifier headers. This is consistent with the rest of the spec but verbose. + +--- + +## Missing Endpoints + +### 1. Create / Start a Live TV Session + +The spec documents `GET /livetv/sessions` and `GET /livetv/sessions/{sessionId}`, but there is **no endpoint to create or start a Live TV session**. In practice, sessions are typically initiated through the transcoder (`/video/:/transcode/universal/start.m3u8`) with a `channel` URI, but a dedicated session-creation endpoint or documentation of the flow is absent. + +### 2. Update a DVR + +There is no `PUT` or `PATCH` for `/livetv/dvrs/{dvrId}`. The only mutable DVR fields exposed are via `PUT /livetv/dvrs/{dvrId}/prefs` (generic preference key/value). There is no way to change the DVR's `language`, `lineup`, or associated devices in a single structured update. + +### 3. List Channels for a Specific DVR + +While `/livetv/epg/channels` exists (lineup-scoped), there is no `/livetv/dvrs/{dvrId}/channels` to list channels directly associated with a DVR. The only DVR-scoped channel operation is `POST .../tune`. + +### 4. Get Program Guide for a DVR + +There is no endpoint to fetch the actual program guide / schedule for a DVR or lineup (e.g., `/livetv/dvrs/{dvrId}/guide` or `/livetv/epg/guide`). The `reloadGuide` endpoints only trigger a background refresh. + +### 5. Stop / Terminate a Live TV Session + +The spec has no `DELETE` for `/livetv/sessions/{sessionId}`. Sessions appear to be read-only and segment-retrievable, but there is no documented way to tear one down. + +### 6. Get DVR Recordings Directly + +There is no DVR-centric path for listing completed recordings (e.g., `/livetv/dvrs/{dvrId}/recordings` or `/livetv/recordings`). Recordings are only accessible indirectly through subscription grabs or the generic `/library` metadata endpoints. + +### 7. EPG Search / Program Lookup + +No endpoint exists to search the EPG for upcoming airings by title, time range, or channel (e.g., `/livetv/epg/search`). This is a common client operation when setting up recording rules. + +--- + +## Schema Corrections + +### 1. Inline DVR Schema Duplication + +The `DVR` object schema is duplicated inline across **at least 7 endpoints** (`/livetv/dvrs` GET, POST, `/livetv/dvrs/{dvrId}` GET, `/livetv/dvrs/{dvrId}/lineups` PUT/DELETE, `/livetv/dvrs/{dvrId}/prefs` PUT, `/livetv/dvrs/{dvrId}/devices/{deviceId}` PUT/DELETE). It should be extracted to a reusable `#/components/schemas/DVR` component. + +### 2. `MediaContainerWithDevice` Duplicates `Device` Schema + +`MediaContainerWithDevice` (line 14931) embeds the full `Device` property set inline instead of referencing `#/components/schemas/Device`. This creates maintenance risk if `Device` is updated. + +### 3. `DeviceChannel` Not a Reusable Component + +The `DeviceChannel` schema (used in `/media/grabbers/devices/{deviceId}/channels` response, line 9832) is defined inline. It has useful fields (`drm`, `favorite`, `hd`, `signalQuality`, `signalStrength`) that are **missing** from the main `Channel` schema. Consider: +- Extracting `DeviceChannel` to a component, or +- Merging these fields into the main `Channel` schema and reusing it. + +### 4. `Channel` Schema Missing EPG Fields + +The `Channel` schema (line 14401) only has: `title`, `callSign`, `channelVcn`, `hd`, `identifier`, `key`, `language`, `thumb`. It lacks: +- `favorite` +- `drm` +- `signalQuality` +- `signalStrength` + +These fields are present in real-world EPG responses and in the inline `DeviceChannel` schema. + +### 5. `MediaSubscription` Hint Schemas Are Opaque + +`MediaSubscription` (line 15159) declares `Directory`, `Playlist`, and `Video` as: +```yaml +description: Media Matching Hints +additionalProperties: true +``` +These are essentially untyped. At minimum, they should document the known hint keys (e.g., `ratingKey`, `title`, `guid`) that clients and the template endpoint rely on. + +### 6. `MediaGrabOperation` Description Typo + +Line 15125: `A media grab opration represents...` → should be `operation`. + +### 7. `MediaContainerWithMetadata` for Sessions Is Too Generic + +`/livetv/sessions/{sessionId}` returns `MediaContainerWithMetadata`. A session container may include session-specific fields (e.g., `sessionKey`, `sessionId`, `channel`, `dvrId`, `consumerId`) that are not present in the generic `Metadata` schema. A dedicated `MediaContainerWithLiveTVSession` schema should be considered. + +### 8. `Lineup` Schema Missing `key` / `identifier` + +The `Lineup` schema (line 14685) has `title`, `type`, `lineupType`, `location`, `uuid`. It does not include `key` or `identifier`, which are commonly returned when listing lineups. + +--- + +## Parameter / Query Gaps + +### 1. `/livetv/dvrs` GET — No Filter Params + +The list-DVRs endpoint accepts no query parameters. In practice, clients may want to filter by `uuid` or `lineup` when managing multiple DVRs. + +### 2. `/livetv/sessions` GET — No Filter Params + +No filtering by `dvrId`, `channel`, or active state. For servers with many concurrent Live TV viewers, this makes client-side filtering mandatory. + +### 3. `/media/subscriptions` GET — Missing Pagination Headers as Request Params + +While `X-Plex-Container-Start` and `X-Plex-Container-Size` are documented as **response headers**, they are not listed as **request parameters** on this endpoint (or most others in the domain). The spec should be consistent about whether these are accepted as request headers/query params for pagination. + +### 4. `/media/subscriptions/template` — Missing `type` Param + +The template endpoint only documents `guid`. In practice, the type of subscription (show, season, episode, movie) likely influences the template response. A `type` or `targetLibrarySectionID` query param may be required. + +### 5. `/media/grabbers/devices/discover` — No Grabber Filter + +The discover endpoint takes no parameters. Clients may want to target discovery to a specific `protocol` (e.g., `livetv`) or `grabberIdentifier` to avoid unnecessary network traffic. + +### 6. POST `/livetv/dvrs` — `device` Array Format Ambiguity + +The `device` parameter is declared as: +```yaml +schema: + type: array + items: + type: string +``` +The example shows `device[]=device://tv.plex.grabbers.hdhomerun/1053C0CA`, but the spec does not declare `style: form` / `explode: true`, which may cause code generators to produce incorrect query serialization. + +### 7. `/livetv/dvrs/{dvrId}/prefs` — Single `name` Param + +The endpoint description says "Set DVR preferences by name and value", but only a `name` parameter is documented. There is no `value` parameter. This suggests the parameter documentation is incomplete or the API expects `name` to contain a composite `key=value` string, which should be clarified. + +### 8. `/media/grabbers/devices/{deviceId}/prefs` — Same Issue + +Only `name` is documented; no `value` parameter is present despite the summary saying "Set device preferences by its id". + +--- + +## Documentation Improvements + +### 1. Typos & Copy-Paste Errors + +| Location | Issue | Correction | +|----------|-------|------------| +| `POST /livetv/dvrs` description | "after creation of a **devcie**" | "device" | +| `PUT /livetv/dvrs/{dvrId}/lineups` summary | "Add a DVR Lineup" ✅, but description says "The lineup to **delete**" | "The lineup to add" | +| `PUT /livetv/dvrs/{dvrId}/prefs` description | "by name **avd** value" | "and" | +| `GET /livetv/epg/lineupchannels` summary | "Get the channels for **mulitple** lineups" | "multiple" | +| `MediaGrabOperation` description | "media grab **opration**" | "operation" | + +### 2. Live TV Session Lifecycle Is Undocumented + +The spec documents how to **list** sessions and **retrieve HLS segments**, but does not explain: +- How sessions are created (transcoder start? tune endpoint?) +- What `sessionId` and `consumerId` represent +- How sessions expire or are terminated +- The expected content type of segments (only `application/vnd.apple.mpegurl` is documented for the index; the segment endpoint has no content-type) + +### 3. `reloadGuide` Response Should Be JSON + +`POST /livetv/dvrs/{dvrId}/reloadGuide` returns `text/html` with an `X-Plex-Activity` header. If the response body is actually empty or contains a status object, it should be documented as JSON. If it truly returns HTML, that should be noted as a known quirk. + +### 4. Tune Endpoint Response Schema + +`POST /livetv/dvrs/{dvrId}/channels/{channel}/tune` returns `MediaContainerWithMetadata`. The documentation should clarify what metadata is returned (e.g., the tuned channel's `Metadata` object, or a transcode decision). + +### 5. Missing Error Response Documentation + +Many endpoints only document `200` and sometimes `404`. Common errors like: +- `400` for invalid lineup / device URIs +- `403` for non-admin users +- `409` for duplicate subscriptions (only documented on `POST /media/subscriptions`) +- `500` for tuning failures (only on `/tune`) + +...should be added consistently across the domain. + +### 6. Plex Pass Requirement Should Be Explicit + +The tag descriptions for DVRs and Subscriptions do not mention that these features require an active Plex Pass subscription and a compatible tuner device. Adding a note to the tag description would help API consumers understand why they receive `403` responses. + +### 7. `Channel` Path Parameter on `/tune` + +The `channel` path parameter on `/livetv/dvrs/{dvrId}/channels/{channel}/tune` has example `2.1` and type `string`. The description should clarify whether this is a `channelVcn`, a `channelKey`, or a `callSign`. + +### 8. `lineupchannels` Response Headers Missing + +`GET /livetv/epg/lineupchannels` returns `200` with a JSON body but does not document `X-Plex-Container-Start` / `X-Plex-Container-Total-Size` headers, even though it returns an array of channels. + +--- + +*End of review.* diff --git a/review/domain_media_provider_review.md b/review/domain_media_provider_review.md new file mode 100644 index 000000000..6a0a11f03 --- /dev/null +++ b/review/domain_media_provider_review.md @@ -0,0 +1,250 @@ +# Media Provider & Content Domain Review + +**Date:** 2026-06-03 +**Scope:** Tags `Provider`, `Content`, `Hubs`, `Search`, `Rate`, `Playlist` (partial) and paths `/media/providers/*`, `/hubs/*`, `/media/providers/refresh`, `/media/subscriptions/*`, `/playlists/*`. +**Sources:** `plex-api-spec.yaml`, `python_plexapi_gap_analysis.md`, `integration_ecosystem_gaps.md`, `undocumented_endpoints_research.md`. + +--- + +## Endpoints Present in Spec + +### Provider + +| Method | Path | Summary | Notes | +|--------|------|---------|-------| +| `GET` | `/media/providers` | List providers | Response schema inherits from `ServerConfiguration` | +| `POST` | `/media/providers` | Add a provider | Only `url` query param documented | +| `POST` | `/media/providers/refresh` | Refresh providers | — | +| `DELETE`| `/media/providers/{provider}` | Delete a provider | — | + +### Content (selected representative endpoints) + +| Method | Path | Summary | +|--------|------|---------| +| `GET` | `/library/metadata/{ratingKey}` | Get metadata item(s) | +| `DELETE`| `/library/metadata/{ratingKey}` | Delete metadata item(s) | +| `GET` | `/library/sections/{sectionId}/all` | List section items | +| `GET` | `/library/sections/{sectionId}/allLeaves` | All leaves | +| `GET` | `/library/sections/{sectionId}/albums` | Music albums | +| `GET` | `/library/sections/{sectionId}/categories` | Categories | +| `GET` | `/library/sections/{sectionId}/cluster` | Clusters (photos) | +| `GET` | `/library/sections/{sectionId}/computePath` | Sonic path | +| `GET` | `/library/sections/{sectionId}/nearest` | Sonically similar tracks | +| `GET` | `/library/sections/{sectionId}/location` | Folder locations | +| `GET` | `/library/sections/{sectionId}/moment` | Moments (photos) | +| `GET` | `/library/collections/{collectionId}/items` | Collection items | +| `GET` | `/library/collections/{collectionId}/composite/{updatedAt}` | Collection image | + +### Hubs + +| Method | Path | Summary | +|--------|------|---------| +| `GET` | `/hubs` | Global hubs | +| `GET` | `/hubs/continueWatching` | Continue watching hub | +| `GET` | `/hubs/items` | Items for a specific hub (by `identifier`) | +| `GET` | `/hubs/promoted` | Promoted hubs | +| `GET` | `/hubs/search` | Search across libraries (hub results) | +| `GET` | `/hubs/search/voice` | Voice search | +| `GET` | `/hubs/metadata/{metadataId}` | Hubs for a metadata item (music) | +| `GET` | `/hubs/metadata/{metadataId}/postplay` | Post-play hubs | +| `GET` | `/hubs/metadata/{metadataId}/related` | Related hubs | +| `GET` | `/hubs/sections/{sectionId}` | Section hubs | +| `GET` | `/hubs/sections/{sectionId}/manage` | List built-in & custom hubs | +| `DELETE`| `/hubs/sections/{sectionId}/manage` | Reset hubs to defaults | +| `PUT` | `/hubs/sections/{sectionId}/manage/move` | Re-order a hub | +| `PUT` | `/hubs/sections/{sectionId}/manage/{identifier}` | Update hub visibility | + +### Search + +| Method | Path | Summary | +|--------|------|---------| +| `GET` | `/hubs/search` | Standard search | +| `GET` | `/hubs/search/voice` | Voice search | + +### Rate + +| Method | Path | Summary | +|--------|------|---------| +| `PUT` | `/:/rate` | Rate an item (`identifier`, `key`, `rating`, `ratedAt`) | + +### Playlist + +| Method | Path | Summary | +|--------|------|---------| +| `GET` | `/playlists` | List playlists | +| `POST` | `/playlists` | Create playlist | +| `POST` | `/playlists/upload` | Import m3u playlist | +| `GET` | `/playlists/{playlistId}` | Retrieve playlist | +| `PUT` | `/playlists/{playlistId}` | Edit playlist metadata | +| `DELETE`| `/playlists/{playlistId}` | Delete playlist | +| `GET` | `/playlists/{playlistId}/generators` | List generators | +| `GET` | `/playlists/{playlistId}/items` | List items | +| `DELETE`| `/playlists/{playlistId}/items` | Clear playlist | +| `PUT` | `/playlists/{playlistId}/items` | Add items | +| `PUT` | `/playlists/{playlistId}/items/{generatorId}/items` | Add generator items | +| `PUT` | `/playlists/{playlistId}/items/{playlistItemId}/move` | Move item | +| `PUT` | `/playlists/{playlistId}/items/{generatorId}/{metadataId}/{action}` | Generator actions | + +--- + +## Missing Endpoints (including cloud providers) + +### Cloud / External Providers + +These are used by official clients and major integrations (Overseerr, Jellyseerr, Tautulli, python-plexapi) but are **absent** from the spec. + +| Provider Host | Missing Paths | Purpose | +|---------------|---------------|---------| +| `discover.provider.plex.tv` | `GET /library/search` | Discover search (movies & shows) | +| `discover.provider.plex.tv` | `GET /library/sections/watchlist/all` | Plex Discover watchlist | +| `discover.provider.plex.tv` | `POST /actions/addToWatchlist` | Add to watchlist | +| `discover.provider.plex.tv` | `POST /actions/removeFromWatchlist` | Remove from watchlist | +| `metadata.provider.plex.tv` *(deprecated)* | `GET /library/sections/watchlist/all` | Legacy watchlist | +| `metadata.provider.plex.tv` *(deprecated)* | `POST /actions/addToWatchlist` | Legacy add | +| `metadata.provider.plex.tv` *(deprecated)* | `POST /actions/removeFromWatchlist` | Legacy remove | +| `vod.provider.plex.tv` | `GET /hubs` | VOD hub items | +| `music.provider.plex.tv` | `GET /hubs` | Tidal / music hub items | + +> **Note:** `metadata.provider.plex.tv` was deprecated in late 2025 in favor of `discover.provider.plex.tv`. The spec should document the current endpoints and include a deprecation notice for the old host. + +### Hub Endpoints + +| Missing Path | Method | Used By | Why It Matters | +|--------------|--------|---------|----------------| +| `/hubs/home/recentlyAdded` | `GET` | Tautulli, official clients | Global recently-added hub view | +| `/hubs/continueWatching/items` | `GET` | python-plexapi (`PlexServer.continueWatching()`) | Direct access to CW items without wrapping in a hub container | + +### Provider Proxy Endpoints + +The spec only documents `DELETE /media/providers/{provider}`. No proxy paths for the individual provider features are defined. In practice, PMS reverse-proxies the following feature paths for each registered provider: + +- `/{provider}/search` +- `/{provider}/metadata` +- `/{provider}/content` +- `/{provider}/match` +- `/{provider}/manage` +- `/{provider}/timeline` +- `/{provider}/rate` +- `/{provider}/playqueue` +- `/{provider}/playlist` +- `/{provider}/subscribe` +- `/{provider}/promoted` +- `/{provider}/continuewatching` +- `/{provider}/collection` +- `/{provider}/actions` +- `/{provider}/imagetranscoder` +- `/{provider}/queryParser` +- `/{provider}/grid` + +These should at minimum be referenced in the `Provider` tag description or documented as dynamic paths. + +--- + +## Schema Corrections + +### `/media/providers` Response Schema + +The `GET /media/providers` response uses: + +```yaml +allOf: + - $ref: '#/components/schemas/ServerConfiguration' + - properties: + Feature: ... + identifier: ... + protocols: ... + title: ... + types: ... +``` + +**Issues:** + +1. **Wrong base schema.** `ServerConfiguration` is server-global (includes `machineIdentifier`, `version`, `transcoderActiveVideoSessions`, etc.). A provider list should likely extend `MediaContainer` or a dedicated `ProviderContainer`. +2. **Underspecified `Feature` array.** Each `Feature` contains a `Directory[]` referencing the generic `Directory` schema. The spec does not enumerate the well-known feature types (`search`, `metadata`, `content`, `match`, `manage`, `timeline`, `rate`, `playqueue`, `playlist`, `subscribe`, `promoted`, `continuewatching`, `collection`, `actions`, `imagetranscoder`, `queryParser`, `grid`). +3. **Missing provider-level fields.** Real-world responses include additional fields (e.g., `icon`, `hubKey`, `featureKey`) that are not documented. + +**Recommendation:** Create a `Provider` schema and a `ProviderFeature` schema that explicitly documents the known feature keys and their directory structures. + +### `Hub` Schema + +The `Hub` schema (`components/schemas/Hub`) is reasonably complete for the fields it documents (`hubIdentifier`, `key`, `Metadata`, `more`, `promoted`, `random`, `size`, `style`, `subtype`, `totalSize`). However: + +- It sets `additionalProperties: true`, which masks the fact that several fields observed in client traffic (e.g., `context`, `hubKey`, `reason`, `reasonTitle`, `reasonID`) are not formally described. +- The `Metadata` items reference the base `Metadata` schema, which is missing fields commonly returned in hub contexts (see below). + +### `Metadata` / Content Schema Gaps (hub-relevant) + +Per `python_plexapi_gap_analysis.md`, the `Metadata` schema is missing fields that appear in XML/JSON hub and search responses: + +- `artBlurHash`, `thumbBlurHash` +- `lastRatedAt` +- `editionTitle`, `languageOverride`, `enableCreditsMarkerGeneration`, `useOriginalTitle`, `slug` +- `sourceURI` +- `playlistItemID`, `playQueueItemID` + +### `Playlist` Schema Gaps + +- `durationInSeconds`, `radio`, `titleSort` are missing from the playlist metadata schema. + +--- + +## Parameter/Query Gaps + +### Search Parameters + +| Endpoint | Missing / Under-documented Parameter | Impact | +|----------|--------------------------------------|--------| +| `GET /hubs/search` | `includeCollections` (boolean) | Tautulli and other clients use this to include collection results in search hubs. **Not documented.** | +| `GET /hubs/search` | Query syntax details | No documentation on field filters (e.g., `title:`, `actor:`), partial-match behavior, or spell-check heuristics. | +| `GET /hubs/search/voice` | `includeCollections` | Same gap as standard search. | + +### Hub Pagination + +- `X-Plex-Container-Start` and `X-Plex-Container-Size` are documented as **response headers** on hub endpoints, but they are also sent by clients as **request headers** (or query parameters) for pagination. The spec should clarify that these may be used as request headers. + +### Rate Endpoint + +| Endpoint | Gap | +|----------|-----| +| `PUT /:/rate` | No `DELETE` method documented. In Plex, sending `rating=0` effectively removes the rating, but this is not described. | +| `PUT /:/rate` | `rating` is typed as `number` (0–10). It should note that fractional values (e.g., `8.5`) are accepted for star ratings. | + +### Provider Endpoints + +- `POST /media/providers` only documents `url`. Other query parameters that may be accepted (e.g., `identifier`, `title`, `protocols`) are not listed. + +--- + +## Documentation Improvements + +1. **Provider Response Features** + - Document the `Feature` directory types in `/media/providers` responses. Provide an enum or descriptive list for the known feature keys (`search`, `metadata`, `content`, `match`, `manage`, `timeline`, `rate`, `playqueue`, `playlist`, `subscribe`, `promoted`, `continuewatching`, `collection`, `actions`, `imagetranscoder`, `queryParser`, `grid`). + +2. **Cloud Provider Deprecation & Migration** + - Add a deprecation note for `metadata.provider.plex.tv` and document the canonical `discover.provider.plex.tv` endpoints (search, watchlist, add/remove actions). + - Document `vod.provider.plex.tv` and `music.provider.plex.tv` base paths at a high level so SDK generators know these hosts exist. + +3. **Search Query Syntax** + - Expand the `/hubs/search` and `/hubs/search/voice` operation descriptions to explain: + - How query strings are tokenized. + - That partial matches and spell-check are applied. + - The effect of `includeCollections=1`. + - The meaning of `reason`, `reasonTitle`, and `reasonID` in search results. + +4. **Pagination Clarification** + - Add a note to all `Hub` and `Playlist` endpoints that pagination can be driven by sending `X-Plex-Container-Start` and `X-Plex-Container-Size` as **request headers** (in addition to documenting them as response headers). + +5. **Rate Endpoint Semantics** + - Clarify that `rating=0` clears the user rating. + - Mention that the endpoint also responds to `GET` but `PUT` is the preferred verb. + +6. **Missing Hub Endpoints** + - Add `/hubs/home/recentlyAdded` and `/hubs/continueWatching/items` to the Hubs tag. + +7. **Schema Field Additions** + - Add missing `Metadata` fields (`artBlurHash`, `thumbBlurHash`, `lastRatedAt`, `sourceURI`, etc.) where they are known to appear in hub and search responses. + - Add missing `Playlist` fields (`durationInSeconds`, `radio`, `titleSort`). + +--- + +*End of review.* diff --git a/review/domain_playback_sessions_review.md b/review/domain_playback_sessions_review.md new file mode 100644 index 000000000..98587c071 --- /dev/null +++ b/review/domain_playback_sessions_review.md @@ -0,0 +1,208 @@ +# Playback & Sessions Domain Review + +**Date:** 2026-06-03 +**Spec file:** `plex-api-spec.yaml` (≈17 k lines) +**Review scope:** Tags `Status`, `Timeline`, `Play Queue`, `Transcoder`; paths `/status/sessions/*`, `/:/timeline`, `/:/scrobble`, `/:/unscrobble`, `/playQueues/*`, `/{transcodeType}/:/transcode/universal/*`, `/photo/:/transcode`. + +--- + +## Endpoints Present in Spec + +| Path | Method | Tag | Notes | +|------|--------|-----|-------| +| `POST /playQueues` | POST | Play Queue | Creates a queue. Inline response schema contains play-queue fields. | +| `GET /playQueues/{playQueueId}` | GET | Play Queue | Retrieves a queue window. | +| `PUT /playQueues/{playQueueId}` | PUT | Play Queue | Add generator / playlist to queue. | +| `DELETE /playQueues/{playQueueId}/items` | DELETE | Play Queue | Clear all items. | +| `PUT /playQueues/{playQueueId}/reset` | PUT | Play Queue | Reset to first item. | +| `PUT /playQueues/{playQueueId}/shuffle` | PUT | Play Queue | Shuffle (no Up Next). | +| `PUT /playQueues/{playQueueId}/unshuffle` | PUT | Play Queue | Restore natural order. | +| `DELETE /playQueues/{playQueueId}/items/{playQueueItemId}` | DELETE | Play Queue | Delete single item. | +| `PUT /playQueues/{playQueueId}/items/{playQueueItemId}/move` | PUT | Play Queue | Move item after another. | +| `GET /status/sessions` | GET | Status | Lists active sessions (admin only). | +| `GET /status/sessions/background` | GET | Status | Lists background transcode jobs. | +| `GET /status/sessions/history/all` | GET | Status | Lists playback history. | +| `GET /status/sessions/history/{historyId}` | GET | Status | Get single history item. | +| `DELETE /status/sessions/history/{historyId}` | DELETE | Status | Delete single history item. | +| `POST /status/sessions/terminate` | POST | Status | Kill a session by ID. | +| `POST /:/timeline` | POST | Timeline | **Only POST is documented.** Report playback state / progress. | +| `PUT /:/scrobble` | PUT | Timeline | Mark item as played (no view history created). | +| `PUT /:/unscrobble` | PUT | Timeline | Mark item as unplayed. | +| `GET /photo/:/transcode` | GET | Transcoder | Image resize/format transcode. | +| `GET /{transcodeType}/:/transcode/universal/decision` | GET | Transcoder | Playback decision (MDE). | +| `POST /{transcodeType}/:/transcode/universal/fallback` | POST | Transcoder | Force transcoder fallback. | +| `GET /{transcodeType}/:/transcode/universal/subtitles` | GET | Transcoder | Subtitle-only transcode. | +| `GET /{transcodeType}/:/transcode/universal/start.{extension}` | GET | Transcoder | Start session (`m3u8` or `mpd`). | +| `GET /:/websocket/notifications` | GET | Events | **Singular** `websocket` path. Returns binary stream. | + +**Observations** +- `/:/timeline` is documented as **POST only**. There is no `GET /:/timeline` in the spec. Client timeline polling is done via `/player/timeline/poll` (missing). +- `/:/scrobble` and `/:/unscrobble` are documented as **PUT only**, with a note that they respond to GET but should not be used. +- `/playQueues/{playQueueId}` (GET) and most play-queue mutators reuse response reference `#/components/responses/slash-post-responses-200`, which resolves to `MediaContainerWithPlaylistMetadata`. That schema is playlist-centric and does **not** contain play-queue top-level fields (`playQueueID`, `playQueueSelectedItemID`, etc.). + +--- + +## Missing Endpoints + +### WebSocket / Real-Time Events +| Missing Path | Why it matters | +|--------------|----------------| +| `GET /:/websockets/notifications` (plural) | Tautulli and Home Assistant connect to this **plural** path for real-time session & timeline events. The spec documents the singular `/:/websocket/notifications` under `Events`, but the plural path is the one widely used in the wild. Both should be documented, or at minimum the plural path should be noted as an alias. | + +### Client Remote-Control Protocol +The Plex Client Control Protocol is entirely absent from the spec. These endpoints are proxied through PMS via `X-Plex-Target-Client-Identifier`. + +| Missing Path | Purpose | +|--------------|---------| +| `GET /resources` | Client capabilities / device info (used by `PlexClient` discovery). | +| `GET /player/timeline/poll` | Poll a client’s local playback timeline. | +| `POST /player/playback/play` | Start playback on client. | +| `POST /player/playback/pause` | Pause client. | +| `POST /player/playback/stop` | Stop client. | +| `POST /player/playback/seek` | Seek to time. | +| `POST /player/playback/skipTo` | Skip to item. | +| `POST /player/playback/skipBy` | Skip forward/backward. | +| `POST /player/playback/stepForward` | Step forward. | +| `POST /player/playback/stepBack` | Step back. | +| `POST /player/playback/setParameters` | Set shuffle/repeat/volume. | +| `POST /player/playback/subtitleStream` | Change subtitle stream. | +| `POST /player/playback/audioStream` | Change audio stream. | +| `POST /player/playback/videoStream` | Change video stream. | +| `POST /player/playback/volume` | Set volume. | +| `POST /player/playback/mute` | Mute. | +| `POST /player/playback/unmute` | Unmute. | +| `POST /player/playback/setTextStream` | Set text stream. | +| `POST /player/playback/setRating` | Rate item. | +| `POST /player/playback/setViewOffset` | Set resume offset. | +| `POST /player/playback/setState` | Set playback state. | +| `POST /player/playback/refreshPlayQueue` | Refresh play queue. | +| `POST /player/playback/playMedia` | Play specific media on client. | + +### Transcode Sessions & Segment Delivery +| Missing Path | Purpose | +|--------------|---------| +| `GET /{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s` | DASH segment delivery. | +| `GET /{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts` | HLS TS segment delivery. | +| `GET /music/:/transcode` | Audio transcode endpoint (distinct from universal video transcoder). | + +--- + +## Schema Corrections + +### PlayQueue +- **Missing shared schema:** There is no standalone `PlayQueue` schema. The creation endpoint (`POST /playQueues`) defines play-queue fields (`playQueueID`, `playQueueLastAddedItemID`, `playQueueSelectedItemID`, `playQueueSelectedItemOffset`, `playQueueSelectedMetadataItemID`, `playQueueShuffled`, `playQueueSourceURI`, `playQueueTotalCount`, `playQueueVersion`) inline in its 200 response. +- **Reuse mismatch:** All other play-queue operations (GET, shuffle, unshuffle, reset, move, delete item, clear) return `#/components/schemas/MediaContainerWithPlaylistMetadata`. That schema contains **playlist** fields (`playlistType`, `smart`, `composite`, `leafCount`, etc.) and **omits** every play-queue field listed above. +- **Gap:** `playQueueSelectedMetadataItemID` is present in the creation response, but absent from `MediaContainerWithPlaylistMetadata`. Because the spec reuses the playlist schema for play-queue responses, generated SDKs will not expose play-queue properties on retrieval. +- **Recommendation:** Create a proper `MediaContainerWithPlayQueue` schema that includes both the queue metadata fields and the `Metadata` item array, and reference it from all play-queue endpoints. + +### Session +- The `Session` schema (line 15863) is extremely sparse: + ```yaml + Session: + properties: + bandwidth: integer + id: string + location: string # enum: [lan, wan] + ``` +- Real session objects returned in `/status/sessions` include additional fields such as `sessionKey`, `uuid`, `title`, `userID`, etc. The current schema does not model these. +- **Recommendation:** Expand `Session` or document that the object is intentionally minimal and that consumers should rely on the embedded `Player`, `User`, and `Metadata` objects. + +### History +- The history response schema (`/status/sessions/history/all`, line 3770+) defines an inline object with: + `accountID`, `deviceID`, `historyKey`, `key`, `librarySectionID`, `originallyAvailableAt`, `ratingKey`, `thumb`, `title`, `type`, `viewedAt`. +- Real history items include fields like `guid`, `index`, `parentKey`, `parentRatingKey`, `grandparentKey`, `grandparentRatingKey`, `parentThumb`, `grandparentThumb`, `content`, `viewCount`, `lastViewedAt`, etc., depending on metadata type. +- **Recommendation:** Derive history items from `Metadata` (or a `HistoryItem` allOf) so that type-specific fields are not lost. + +### Timeline Response +- The `POST /:/timeline` 200 response schema extends `ServerConfiguration` and adds `Bandwidths`, `terminationCode`, `terminationText`. +- This is reasonable, but the response can also include a `playQueueID` when playback originates from a queue, which is not documented. +- **Recommendation:** Add `playQueueID` (integer) to the timeline response schema. + +--- + +## Parameter / Query Gaps + +### `POST /:/timeline` +The spec documents: `key`, `ratingKey`, `state`, `playQueueItemID`, `time`, `duration`, `continuing`, `updated`, `offline`, `timeToFirstFrame`, `timeStalled`, `bandwidth`, `bufferedTime`, `bufferedSize`, plus `X-Plex-Client-Identifier` and `X-Plex-Session-Identifier` headers. + +**Missing / under-documented:** + +| Parameter | Where observed | Gap | +|-----------|----------------|-----| +| `containerKey` | Official Plex clients | Used to group timeline reports (e.g., `/playQueues/123`). Not in spec. | +| `playQueueID` | Official Plex clients | Distinct from `playQueueItemID`; identifies the queue itself. Not in spec. | +| `guid` | Client traffic | Global unique identifier for the item being reported. Not in spec. | +| `url` | Legacy clients | Alternative to `key`/`ratingKey`. Mentioned in `scrobble` description but absent from timeline. | + +Also, the `state` enum is `stopped | buffering | playing | paused`. This matches common usage, but some clients also send `ready` — verify if this is still current. + +### `GET /status/sessions/history/all` +- The description mentions `includeFields`, `excludeFields`, `includeElements`, and `excludeElements`, but these are **not declared as formal query parameters**. +- Pagination is described in text, but `X-Plex-Container-Start` and `X-Plex-Container-Size` are only documented as **response headers**, not request parameters. Many clients send them as query parameters or headers for pagination. +- Missing filter parameters observed in SDK usage: `viewedAt>` (greater-than), `viewedAt<` (less-than), `accountID`, `deviceID`, `metadataItemID` (the latter three are present, but range operators on `viewedAt` are not formally described). + +### `GET /status/sessions` +- No query parameters are listed. Real usage sometimes includes `X-Plex-Container-Start` / `X-Plex-Container-Size` for large session lists, though this is rare. + +### `POST /status/sessions/terminate` +- `sessionId` and `reason` are present. Looks complete for the documented surface. + +### Scrobble / Unscrobble (`PUT /:/scrobble`, `PUT /:/unscrobble`) +- Parameters: `identifier`, `key`, `uri`. +- `identifier` is documented as required; `key` and `uri` are optional (one must be provided). +- No gaps here, but the description of `uri` refers to "See intro for description of the URIs" — the spec does not actually contain that introductory URI section. + +### Transcoder (`/decision`, `/start.{extension}`, `/subtitles`, `/fallback`) +- Heavily parameterized; the spec is fairly comprehensive. +- **Missing** from all transcoder endpoints: + - `maxVideoBitrate` (client-side cap, distinct from `videoBitrate` / `peakBitrate`) + - `videoResolution` (cap string) + - `copyts` (boolean for timestamp copying) + - `mediaIndex` / `partIndex` are present on `/decision` and `/start`, but not on `/subtitles` + - `platform` query param (some clients send this in addition to headers) + +### Play Queue Creation (`POST /playQueues`) +- Missing parameter observed in SDKs: `limit` (to cap initial window size). Not documented. +- Missing parameter: `next` is documented on `PUT /playQueues/{playQueueId}` (add to queue) but a `next` semantic on creation is not addressed. + +--- + +## Documentation Improvements + +1. **Clarify HTTP verbs for scrobble/unscrobble** + - The spec notes these "respond to GET but applications should use PUT". This anti-pattern should be deprecated in documentation; only PUT should be shown in examples. + +2. **Timeline polling frequency** + - The `POST /:/timeline` description states "generally every 10 seconds on LAN/WAN, every 20 seconds over cellular." This is good, but should also mention that the server may reply with `terminationCode` / `terminationText` when a session is killed, and that clients must handle the 200 response body to detect server-side termination. + +3. **Play Queue "Up Next" semantics** + - The tag description (line 134) contains a lengthy explanation of the Up Next region, sliding window, and shuffle restrictions. This should be summarized or cross-linked in the operation descriptions for `POST /playQueues`, `PUT /playQueues/{playQueueId}/shuffle`, and `PUT /playQueues/{playQueueId}/unshuffle` so that consumers do not have to read the tag essay to understand why shuffle fails. + +4. **History pagination** + - The `listPlaybackHistory` description mentions pagination but does not declare `X-Plex-Container-Start` / `X-Plex-Container-Size` as request parameters. Add them explicitly (as headers or query params) and provide an example. + +5. **Transcoder segment flow** + - The spec documents `/start.{extension}` but does not explain that the returned manifest references segments under `/session/{sessionId}/{segmentId}.{ext}`. A short sequence diagram or note would help implementers understand the full playback flow. + +6. **WebSocket path discrepancy** + - Document that both `/:/websocket/notifications` (singular, in spec) and `/:/websockets/notifications` (plural, used by Tautulli/HA) exist, or add the plural path as a separate operation. Describe the `NotificationContainer`, `PlaySessionStateNotification`, `TimelineEntry`, and `StatusNotification` message shapes, which are currently absent. + +7. **Client remote control proxy pattern** + - Add a section explaining that `/player/*` endpoints can be invoked directly against a client or proxied through PMS using `X-Plex-Target-Client-Identifier`. This is a fundamental Plex architecture pattern that is missing from the spec entirely. + +--- + +## Quick-Reference: Priority Matrix + +| Gap | Impact | Effort | +|-----|--------|--------| +| Create `MediaContainerWithPlayQueue` schema and apply to all PQ endpoints | **High** | Medium | +| Add `/:/websockets/notifications` (plural) and message schemas | **High** | Medium | +| Add `/player/playback/*` and `/player/timeline/poll` endpoints | **High** | Large | +| Add `/resources` endpoint | **Medium** | Small | +| Add transcode segment delivery paths | **Medium** | Small | +| Expand `Session` schema | **Medium** | Small | +| Expand history inline schema | **Medium** | Medium | +| Add missing timeline query params (`containerKey`, `playQueueID`, `guid`) | **Medium** | Small | +| Declare `includeFields` / `excludeFields` / `includeElements` / `excludeElements` on history | **Low** | Small | +| Add `X-Plex-Container-Start` / `X-Plex-Container-Size` as request params on paginated endpoints | **Low** | Small | diff --git a/review/domain_server_system_review.md b/review/domain_server_system_review.md new file mode 100644 index 000000000..07559d1c8 --- /dev/null +++ b/review/domain_server_system_review.md @@ -0,0 +1,289 @@ +# Server & System Domain Review + +**Date:** 2026-06-03 +**Domain:** Server & System (General, Activities, Butler, Updater, Log, Preferences, Events, UltraBlur, Transcoder, Status) +**Spec File:** `plex-api-spec.yaml` (16,989 lines) + +--- + +## Endpoints Present in Spec (inventory with assessment) + +### General +| Path | Method | Tag | Assessment | +|------|--------|-----|------------| +| `/` | GET | General | ⚠️ **Schema mismatch.** Returns `MediaContainerWithDirectory`, but the actual response body contains `ServerConfiguration` fields (e.g. `machineIdentifier`, `version`, `platform`, `myPlex`, etc.). The `Directory` array is present but the container itself is server config. | +| `/identity` | GET | General | ✅ Clean. Returns `claimed`, `machineIdentifier`, `version`. Unauthenticated. | + +### Activities +| Path | Method | Tag | Assessment | +|------|--------|-----|------------| +| `/activities` | GET | Activities | ⚠️ **Inline schema.** `Activity` is defined inline in the response; not a reusable component. No `200` response headers documented. Missing `X-Plex-Activity` header documented elsewhere. | +| `/activities/{activityId}` | DELETE | Activities | ✅ Clean. Path param `activityId` documented. Returns 200/400/404. | + +### Butler +| Path | Method | Tag | Assessment | +|------|--------|-----|------------| +| `/butler` | GET / DELETE / POST | Butler | ⚠️ **Inline schema.** `ButlerTask` is defined inline. `GET` returns tasks list; `DELETE` stops all; `POST` starts all. Admin-only security is correct. | +| `/butler/{butlerTask}` | DELETE / POST | Butler | ✅ Clean. Comprehensive enum of 24 task names. Admin-only. | + +### Updater +| Path | Method | Tag | Assessment | +|------|--------|-----|------------| +| `/updater/apply` | PUT | Updater | ✅ Clean. Params `tonight` and `skip` (BoolInt). Returns text/html. | +| `/updater/check` | PUT | Updater | ✅ Clean. Param `download` (BoolInt). | +| `/updater/status` | GET | Updater | ⚠️ **Inline schema.** `UpdaterStatus` / `Release` objects are inline. Missing `checkedAt` type clarity (integer timestamp). | + +### Log +| Path | Method | Tag | Assessment | +|------|--------|-----|------------| +| `/log` | PUT / POST | Log | ⚠️ **No response schema.** PUT writes a single line; POST writes multi-line plain text. No `LogLine` schema exists. Level enum (0-4) is correct. | +| `/log/networked` | POST | Log | ⚠️ **Undocumented response.** Enables Papertrail logging. Param `minutes` documented. Returns only generic 200/403. | + +### Preferences +| Path | Method | Tag | Assessment | +|------|--------|-----|------------| +| `/:/prefs` | GET / PUT | Preferences | ⚠️ **GET lacks auth?** GET has no `security` block (should likely be admin). PUT uses generic `prefs: object` query param instead of documenting known keys. Hidden preferences (~40+ keys) are not documented. | +| `/:/prefs/get` | GET | Preferences | ✅ Clean. Single preference fetch by `id`. | + +### Rate / Timeline / Scrobble +| Path | Method | Tag | Assessment | +|------|--------|-----|------------| +| `/:/rate` | PUT | Rate | ✅ Clean. Params `identifier`, `key`, `rating` (0-10), `ratedAt`. | +| `/:/timeline` | POST | Timeline | ✅ Extensive params for playback reporting. Documents `state` enum, bandwidth, buffering, etc. | +| `/:/scrobble` | GET | — | 📍 **Not in primary domain review** but related to playback progress. | +| `/:/unscrobble` | GET | — | 📍 **Not in primary domain review** but related to playback progress. | + +### Events +| Path | Method | Tag | Assessment | +|------|--------|-----|------------| +| `/:/eventsource/notifications` | GET | Events | ⚠️ **No message schema.** Returns `application/octet-stream`. Filter param documented but no SSE event schemas. | +| `/:/websocket/notifications` | GET | Events | ⚠️ **No message schema.** Returns `application/octet-stream`. Filter param documented but no WebSocket message schemas (`NotificationContainer`, `PlaySessionStateNotification`, `StatusNotification`, `ReachabilityNotification`). | + +### UltraBlur +| Path | Method | Tag | Assessment | +|------|--------|-----|------------| +| `/services/ultrablur/colors` | GET | UltraBlur | ✅ Clean. `url` param. Returns `UltraBlurColors` array. | +| `/services/ultrablur/image` | GET | UltraBlur | ✅ Clean. Color quadrant params documented. | + +### Transcoder (Universal) +| Path | Method | Tag | Assessment | +|------|--------|-----|------------| +| `/{transcodeType}/:/transcode/universal/decision` | GET | Transcoder | ✅ Extensive params for playback decision. Returns `MediaContainerWithDecision`. | +| `/{transcodeType}/:/transcode/universal/start.{extension}` | GET | Transcoder | ✅ Supports `m3u8` and `mpd`. Extensive params duplicated from `/decision`. | +| `/{transcodeType}/:/transcode/universal/fallback` | POST | Transcoder | ✅ Clean. Session-based fallback trigger. | +| `/{transcodeType}/:/transcode/universal/subtitles` | GET | Transcoder | ✅ Clean. Subtitle-only transcode params. | + +### Status (Partial) +| Path | Method | Tag | Assessment | +|------|--------|-----|------------| +| `/status/sessions` | GET | Status | ✅ Clean. Returns `Metadata` with `Player`, `Session`, `User`. Admin-only. | +| `/status/sessions/background` | GET | Status | ⚠️ **Inline schema.** `TranscodeJob` is inline. Missing some fields like `generatorID` vs `generatorID` casing? (spec has `generatorID`). | +| `/status/sessions/history/all` | GET | Status | ⚠️ **Partial params.** Mentions `includeFields`, `excludeFields`, `includeElements`, `excludeElements` in description but does not formally declare them as query parameters. | +| `/status/sessions/terminate` | POST | Status | ✅ Clean. `sessionId` and `reason` params. | +| `/status/sessions/history/{historyId}` | GET | Status | 📍 Present but not primary focus of this review. | + +--- + +## Missing Endpoints + +The following endpoints are used by `python-plexapi`, Tautulli, Home Assistant, or community research but are **absent** from the spec. + +### Server Discovery & Identity +| Path | Method | Source | Notes | +|------|--------|--------|-------| +| `/servers` | GET | Tautulli | Local server list. | +| `/myplex/account` | GET | Tautulli | Linked MyPlex account info on PMS. | +| `/myplex/refreshReachability` | PUT | Tautulli | Refresh remote access port mapping. | + +### Clients & Devices +| Path | Method | Source | Notes | +|------|--------|--------|-------| +| `/clients` | GET | python-plexapi, HA | Lists connected `PlexClient` objects. Returns `MediaContainer` of `Server`/`Player` objects. | +| `/accounts` | GET | python-plexapi | Lists local system accounts (`PlexServer.systemAccounts()`). | +| `/devices` | GET | python-plexapi | Lists local system devices (`PlexServer.systemDevices()`). | + +### System & Agents +| Path | Method | Source | Notes | +|------|--------|--------|-------| +| `/system/agents` | GET | python-plexapi | Lists available metadata agents. | +| `/system/agents/{agentId}` | GET | Community | Agent details & settings. | +| `/system/settings` | GET | Community | System-level settings. | +| `/system/updates` | GET | Community | Check for PMS updates (alternative to `/updater/check`). | + +### Diagnostics & Statistics +| Path | Method | Source | Notes | +|------|--------|--------|-------| +| `/diagnostics` | GET | Community | Server diagnostics overview. | +| `/diagnostics/databases` | GET | python-plexapi | Downloads server DB diagnostics. | +| `/diagnostics/logs` | GET | python-plexapi | Downloads server logs bundle. | +| `/statistics/bandwidth` | GET | python-plexapi | Dashboard bandwidth data. Missing `timespan` (1-6), `accountID`, `deviceID`, `lan` params. | +| `/statistics/resources` | GET | python-plexapi | Dashboard resource data. | + +### Sync +| Path | Method | Source | Notes | +|------|--------|--------|-------| +| `/sync` | GET | Community | Sync status overview. | +| `/sync/items` | GET | Community / Tautulli | Sync items list. | +| `/sync/items/{syncId}` | GET | Tautulli | Sync item details. | +| `/sync/queue` | GET | Community | Sync queue. | +| `/sync/transcodeQueue` | GET | Tautulli | Sync transcode queue status. | +| `/sync/refreshSynclists` | PUT | python-plexapi | Forces PMS to download new SyncList from plex.tv. | +| `/sync/refreshContent` | PUT | python-plexapi | Forces PMS to refresh content for known SyncLists. | + +### Browse +| Path | Method | Source | Notes | +|------|--------|--------|-------| +| `/services/browse` | GET | python-plexapi | Browses filesystem paths. Missing `includeFiles` param. | +| `/services/browse/{base64path}` | GET | python-plexapi | Browses a specific filesystem path. | + +### Playback Progress +| Path | Method | Source | Notes | +|------|--------|--------|-------| +| `/:/progress` | GET | python-plexapi | Updates watch progress (`Playable.updateProgress()`). | + +### Transcoder (Missing) +| Path | Method | Source | Notes | +|------|--------|--------|-------| +| `/transcode/sessions` | GET | Community | Active transcode sessions. | +| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s` | GET | Community | DASH segment delivery. | +| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts` | GET | Community | HLS TS segment delivery. | +| `/music/:/transcode` | GET | Community | Audio transcode endpoint. | + +### Real-Time Events (Missing Schema) +| Path | Method | Source | Notes | +|------|--------|--------|-------| +| `/:/websockets/notifications` | WS | Tautulli, HA | WebSocket path is present but **message schema is absent**. | + +--- + +## Schema Corrections + +### `ServerConfiguration` +Used at `/media/providers` and in `LibrarySections` response, but **most importantly** the root `/` endpoint returns these fields. The spec incorrectly labels `/` as returning `MediaContainerWithDirectory`. + +| Field | Spec Status | Issue | Recommended Fix | +|-------|-------------|-------|-----------------| +| `diagnostics` | `string` | SDK parses as `list` (comma-separated diagnostics modules). | Change to `array` of `string`, or document as comma-separated list with `parseAs: list` hint. | +| `transcoderVideoBitrates` | untyped / description only | SDK parses as `list`. | Add `type: array` with `items: string` or `integer`. | +| `transcoderVideoQualities` | `string` | SDK parses as `list`. | Change to `array` of `string` / `integer`. | +| `transcoderVideoResolutions` | description only | SDK parses as `list`. | Add `type: array` of `string`. | +| `ownerFeatures` | `string` | SDK parses as `list` (comma-separated). | Change to `array` of `string`, or document parsing rule. | + +**Additional issue:** `offlineTranscode` is documented as `example: 1` but has no `type`. Should be `integer` or `boolean` (BoolInt pattern). + +### `Activity` +Defined inline under `/activities` GET response (lines 728-763). Should be extracted to `#/components/schemas/Activity`. + +| Field | Status | Notes | +|-------|--------|-------| +| `uuid` | Present | Good. | +| `type` | Present | Good. | +| `title` | Present | Good. | +| `subtitle` | Present | Good. | +| `progress` | Present | Good (-1 to 100). | +| `cancellable` | Present | Good. | +| `userID` | Present | Good. | +| `Context` | Present | `additionalProperties: true` is permissive but correct. | +| `Response` | Present | `additionalProperties: true` is permissive but correct. | + +**Missing:** No standalone component means it cannot be reused by other endpoints that may return activities (e.g., websocket `StatusNotification`). + +### `ButlerTask` +Defined inline under `/butler` GET response (lines 798-819). Should be extracted to `#/components/schemas/ButlerTask`. + +| Field | Status | Notes | +|-------|--------|-------| +| `name` | Present | Good. | +| `title` | Present | Good. | +| `description` | Present | Good. | +| `enabled` | Present | Good. | +| `interval` | Present | Good (days). | +| `scheduleRandomized` | Present | Good. | + +### `UpdaterStatus` +Defined inline under `/updater/status` GET response (lines 3956-3984+). Should be extracted to `#/components/schemas/UpdaterStatus`. + +| Field | Status | Notes | +|-------|--------|-------| +| `autoUpdateVersion` | Present | Good. | +| `canInstall` | Present | Good. | +| `checkedAt` | Present | Good. | +| `downloadURL` | Present | Good. | +| `Release` | Present | Array with `added`, `fixed`, `downloadURL`, `key`, etc. | + +### `LogLine` +**Does not exist.** The `/log` endpoints return generic `200` responses with no schema. If the endpoints ever return the logged line or a confirmation object, it should be documented. + +### `MediaContainerWithDecision` (Transcoder) +Present and comprehensive. However, the `decision` enum on `Part` and `Stream` is well-defined (`directplay`, `transcode`, `copy`, `burn`, etc.). ✅ + +--- + +## Parameter / Query Gaps + +### Preferences (`/:/prefs`) +- **PUT `/:/prefs`** uses a single `prefs: object` query parameter. It should document the known public keys (`FriendlyName`, `ScheduledLibraryUpdateInterval`, `sendCrashReports`, etc.) and note that hidden keys are also accepted. +- **Hidden preference keys** (~40+) are not documented anywhere in the spec. Examples: + - `aBRKeepOldTranscodes`, `allowHighOutputBitrates`, `backgroundQueueIdlePaused` + - `butlerTaskGarbageCollectBlobs`, `butlerTaskGenerateMediaIndexFiles` + - `certificateVersion`, `dvrShowUnsupportedDevices`, `enableABRDebugOverlay` + - `hardwareDevicePath`, `manualPortMappingMode`, `manualPortMappingPort` + - `transcoderH264MinimumCRF`, `transcoderH264Options`, `transcoderH264Preset` + - `transcoderLogLevel`, `transcoderLivePruneBuffer` + - Source: [Python PlexAPI settings docs](https://python-plexapi.readthedocs.io/en/latest/modules/settings.html) + +### History (`/status/sessions/history/all`) +- Mentions `includeFields`, `excludeFields`, `includeElements`, `excludeElements` in the **description** but does not formally declare them as query parameters. These should be added as explicit parameters. +- Also missing formal `X-Plex-Container-Start` and `X-Plex-Container-Size` **request** parameters (they are documented as response headers but used for request pagination by many clients). + +### Updater +- `/updater/check` documents `download` as BoolInt. Tautulli uses `download=0`. The spec is technically correct but could note that `0` explicitly skips download. + +### Transcoder Universal +- Missing segment delivery path parameters: + - `sessionId` (path) and `segmentId` (path) for `.m4s` / `.ts` segment URLs. +- Missing audio-specific transcoder path `/music/:/transcode`. +- Some stream URL parameters are accepted but not documented on all transcoder endpoints: + - `maxVideoBitrate`, `videoResolution`, `offset`, `copyts`, `protocol`, `mediaIndex`, `partIndex`, `platform`. + +### Timeline (`/:/timeline`) +- Generally well-documented. Missing `X-Plex-Session-Identifier` as a formal parameter? It is present. ✅ + +### Root `/` +- Missing `X-Plex-Token` as a query parameter option. The SDK often passes token via `url()` query param, not just header. + +--- + +## Documentation Improvements + +1. **Root `/` response schema** + - The description says "Information about this PMS setup and configuration" but the schema is `MediaContainerWithDirectory`. The actual response is a `ServerConfiguration`-shaped object with a `Directory` array. Update the schema to `allOf: [ServerConfiguration, { Directory: ... }]`. + +2. **Event / WebSocket / Eventsource message schemas** + - The spec documents the connection endpoints but provides **no schemas** for the messages that flow over them. + - Missing: `NotificationContainer`, `PlaySessionStateNotification`, `TimelineEntry`, `StatusNotification`, `ReachabilityNotification`. + - These are critical for Tautulli and Home Assistant integrations. + +3. **Activity, ButlerTask, UpdaterStatus should be components** + - Extract inline schemas to `#/components/schemas/` so they can be referenced by other endpoints and generated SDKs. + +4. **Log endpoint responses** + - Document whether `/log` PUT/POST returns any body, and if so, what it contains. + +5. **Preference setting documentation** + - Add an `example` or `enum` of common preference keys to the `PUT /:/prefs` operation description. + - Add a note about hidden/advanced preference keys and link to Plex support article. + +6. **Transcoder segment delivery** + - Document the segment delivery URLs (`.../session/{sessionId}/{segmentId}.m4s` / `.ts`) even if they are primarily streaming URLs rather than REST API calls. + +7. **Auth consistency** + - `GET /:/prefs` lacks a `security` block. It should likely require `token: [admin]` like `PUT /:/prefs`. + - `/identity` correctly allows unauthenticated access (`security: [{}]`). ✅ + +8. **Missing tags** + - Some endpoints like `/:/scrobble` and `/:/unscrobble` are not tagged with a domain tag (they appear tag-less or under an implicit tag). Verify they are categorized. + +--- + +*End of review.* diff --git a/review/integration_ecosystem_gaps.md b/review/integration_ecosystem_gaps.md new file mode 100644 index 000000000..c8d20fda0 --- /dev/null +++ b/review/integration_ecosystem_gaps.md @@ -0,0 +1,343 @@ +# Integration Ecosystem API Gap Survey + +This document surveys major open-source Plex integrations to identify API endpoints, parameters, and authentication patterns that are commonly used but missing or poorly documented in the official Plex OpenAPI spec (`plex-api-spec.yaml`). + +--- + +## Tautulli API usage + +Tautulli (`Tautulli/Tautulli`) is a Python-based monitoring and tracking tool that interacts heavily with both the local PMS and plex.tv APIs. + +### PMS Endpoints Used + +| Endpoint | Method | Purpose | Status in Spec | +|---|---|---|---| +| `/status/sessions` | GET | Active play sessions | **Present** | +| `/status/sessions/terminate` | GET | Kill a session by ID | **Present** | +| `/library/metadata/{ratingKey}?includeMarkers=1` | GET | Media metadata with intro/credits markers | **Partial** (`includeMarkers` param absent) | +| `/library/metadata/{ratingKey}/children` | GET | Season episodes, album tracks | **Present** | +| `/library/metadata/{ratingKey}/allLeaves` | GET | All descendant items | **Present** | +| `/library/metadata/{ratingKey}/grandchildren` | GET | Grandchildren (e.g. episodes under a show) | **Absent** | +| `/library/sections` | GET | List libraries | **Present** | +| `/library/sections/{sectionId}/all` | GET | Library contents | **Present** | +| `/library/sections/{sectionId}/recentlyAdded` | GET | Per-library recently added | **Absent** | +| `/library/sections/{sectionId}/label` | GET | Labels for a library | **Absent** | +| `/library/recentlyAdded` | GET | Global recently added | **Absent** | +| `/hubs/home/recentlyAdded` | GET | Hub-centric recently added | **Absent** | +| `/hubs/search?query=&limit=&includeCollections=1` | GET | Search with collection results | **Partial** (`includeCollections` not documented) | +| `/hubs/metadata/{ratingKey}/related` | GET | Related items in a collection | **Present** | +| `/playlists/{ratingKey}/items` | GET | Playlist items | **Present** | +| `/sync/items/{syncId}` | GET | Sync item details | **Absent** | +| `/sync/transcodeQueue` | GET | Sync transcode queue status | **Absent** | +| `/myplex/account` | GET | Linked MyPlex account info | **Absent** | +| `/myplex/refreshReachability` | PUT | Refresh remote access port mapping | **Absent** | +| `/servers` | GET | Local server list | **Absent** | +| `/identity` | GET | Server identity / machine identifier | **Present** | +| `/:/prefs` | GET / PUT | Server preferences | **Present** | +| `/updater/check?download=0` | PUT | Trigger update check | **Present** | +| `/updater/status` | GET | Update status | **Present** | +| `/livetv/dvrs` | GET | DVR devices | **Present** | +| `/status/sessions/history/all` | GET | Play history | **Present** | +| `/activities` | GET | Background activities | **Present** | + +### plex.tv Endpoints Used + +| Endpoint | Method | Purpose | Status in Spec | +|---|---|---|---| +| `https://plex.tv/api/v2/pins` | POST | OAuth PIN generation | **Absent** | +| `https://plex.tv/api/v2/pins/{pin}` | GET | PIN status / token retrieval | **Absent** | +| `https://plex.tv/api/users` | GET | Friends / shared users | **Present** (`GET /users` on plex.tv) | +| `https://plex.tv/users/account` | GET | Own account details (XML) | **Absent** | +| `https://plex.tv/devices.xml` | GET | Authorized devices list | **Absent** | +| `https://plex.tv/pms/servers.xml` | GET | Published server list with timestamps | **Absent** | +| `https://plex.tv/api/resources?includeHttps=1` | GET | Server connections & discovery | **Absent** | +| `https://plex.tv/api/servers/{machineId}/shared_servers` | GET | Per-server shared library access | **Absent** | +| `https://plex.tv/servers/{machineId}/sync_lists` | GET | Mobile sync lists | **Absent** | +| `https://plex.tv/api/downloads/{channel}.json` | GET | Plex update downloads | **Absent** | +| `https://plex.tv/api/v2/cloud_server` | GET | Plex Cloud status | **Absent** | +| `https://plex.tv/api/v2/geoip?ip_address=` | GET | GeoIP lookup | **Absent** | +| `https://plex.tv/api/v2/ping` | GET | Token validity ping | **Absent** | +| `https://plex.tv/:/ip` | GET | Public IP detection | **Absent** | + +### Special Patterns + +- **Websocket**: Tautulli connects to `wss://{host}/:/websockets/notifications` (or `ws://`) with `X-Plex-Token` header for real-time session and timeline events. +- **Auth**: Uses `X-Plex-Token` header; also supports per-user server tokens derived from shared_server access tokens. +- **Pagination**: Uses `X-Plex-Container-Start` and `X-Plex-Container-Size` query parameters (also used by others). + +--- + +## Overseerr / Jellyseerr API usage + +Overseerr (`sct/overseerr`) and its successor Jellyseerr (`Fallenbagel/jellyseerr`) manage Plex user access, library scanning, and watchlist integration. + +### PMS Endpoints Used + +| Endpoint | Method | Purpose | Status in Spec | +|---|---|---|---| +| `/library/sections` | GET | Sync libraries | **Present** | +| `/library/sections/{id}/all?includeGuids=1` | GET | Full library scan with external GUIDs | **Partial** (`includeGuids` param absent) | +| `/library/metadata/{key}` | GET | Item metadata | **Present** | +| `/library/metadata/{key}/children` | GET | Child items (seasons/episodes) | **Present** | +| `/library/sections/{id}/all?type={1|4}&sort=addedAt:desc&addedAt>>={ts}` | GET | Recently added delta scan | **Partial** (filter params not fully documented) | + +### plex.tv / Provider Endpoints Used + +| Endpoint | Method | Purpose | Status in Spec | +|---|---|---|---| +| `https://plex.tv/api/resources?includeHttps=1` | GET | Server discovery & connection URLs | **Absent** | +| `https://plex.tv/users/account.json` | GET | Account info (JSON) | **Absent** | +| `https://plex.tv/api/users` | GET | Friends / shared users (XML) | **Present** (`GET /users`) | +| `https://discover.provider.plex.tv/library/sections/watchlist/all` | GET | Plex Discover watchlist | **Absent** | +| `https://discover.provider.plex.tv/library/metadata/{ratingKey}` | GET | Watchlist item metadata from Discover | **Absent** | +| `https://plex.tv/api/v2/ping` | GET | Token health check | **Absent** | + +### Special Patterns + +- **Container headers**: Overseerr sends `X-Plex-Container-Start` and `X-Plex-Container-Size` as **HTTP headers** rather than query parameters for pagination. +- **ETag caching**: Uses `If-None-Match` with ETag for watchlist caching. +- **Authentication**: Relies on OAuth PIN flow (same missing endpoints as Tautulli) to obtain tokens. +- **Migration note**: Jellyseerr migrated watchlist from `metadata.provider.plex.tv` to `discover.provider.plex.tv` after Plex deprecated the former. + +--- + +## Bazarr API usage + +Bazarr (`morpheus65535/bazarr`) integrates with Plex primarily for subtitle management and webhook-driven automation. + +### PMS Endpoints Used + +Bazarr's direct PMS API usage is lighter than other tools; it primarily triggers library refreshes after subtitle changes. The exact PMS paths are abstracted behind its own internal API, but typical operations include: + +- **Library item refresh** (likely `GET /library/metadata/{id}/refresh` or similar) to update subtitles. +- **Server connection testing** against `/` or `/identity`. + +### plex.tv / Webhook Patterns + +| Pattern | Details | Status in Spec | +|---|---|---| +| Plex Webhooks (inbound) | Bazarr receives webhooks at `/api/webhooks/plex?apikey={key}` for `media.play` / `media.resume` events to trigger subtitle search | **Absent** | +| Plex Webhook auto-registration | Bazarr can auto-create webhooks on the Plex server via the Plex Web UI mechanisms (not a formal API) | **Absent** | +| OAuth PIN flow | `POST /api/v2/pins` → `GET /api/v2/pins/{id}` for Plex auth | **Absent** | + +### Special Patterns + +- **Webhook payload**: Consumes standard Plex webhook JSON payloads (see Webhooks section below). +- **Added-date manipulation**: Can update `addedAt` timestamps for movies/episodes after subtitle operations (implementation-specific, not a standard API endpoint). + +--- + +## Kometa API usage + +Kometa (`kometa-team/kometa`) is a Python automation framework built on top of the `python-plexapi` library. It exercises a very broad surface of the PMS API for metadata editing, collection management, and server maintenance. + +### PMS Endpoints Used (via python-plexapi) + +| Endpoint / Operation | Method | Purpose | Status in Spec | +|---|---|---|---| +| `/library/sections/{id}/all` | GET | Enumerate all library items | **Present** | +| `/library/metadata/{id}` | GET | Read item metadata | **Present** | +| `/library/metadata/{id}` | PUT | Update item metadata (title, summary, etc.) | **Partial** (update body schema unclear) | +| `/library/metadata/{id}/posters` | POST | Upload custom poster image | **Absent** | +| `/library/metadata/{id}/arts` | POST | Upload custom background art | **Absent** | +| `/library/collections` | GET / POST | Create and list collections | **Partial** (creation semantics missing) | +| `/library/collections/{id}` | PUT | Edit collection metadata | **Partial** | +| `/library/sections/{id}/refresh` | GET / POST | Trigger library refresh | **Absent** | +| `/library/sections/{id}/emptyTrash` | GET / POST | Empty library trash | **Absent** | +| `/library/sections/{id}/optimize` | GET / POST | Optimize database for a library | **Absent** | +| `/library/optimize` | GET / POST | Global database optimize | **Absent** | +| `/playlists` | GET / POST | Create and list playlists | **Present** | +| `/playlists/{id}/items` | PUT / POST | Add items to playlists | **Partial** | +| `/library/metadata/{id}/unmatch` | PUT | Unmatch metadata match | **Present** | +| `/library/metadata/{id}/match` | PUT / GET | Re-match item | **Present** | +| `/library/metadata/{id}/refresh` | GET | Refresh metadata for single item | **Present** | + +### Special Patterns + +- **Database cache tuning**: Kometa recommends setting `db_cache` (PMS preference `DatabaseCacheSize` via `:/prefs`) before operations. +- **Label-based smart collections**: Uses `/library/sections/{id}/label` (missing from spec) to drive smart collection filters. +- **Overlays**: Performs image composition and uploads via the poster/art upload endpoints, which are not formally documented in the spec. +- **Python-plexapi abstraction**: Many of these endpoints are not called directly by Kometa's code but are abstracted through `PlexServer`, `LibrarySection`, `Movie`, `Show`, etc. objects in the `python-plexapi` library. + +--- + +## Home Assistant Plex integration usage + +The Home Assistant (`home-assistant/core`) Plex integration uses the `python-plexapi` library and a dedicated websocket wrapper (`plexwebsocket`) to monitor server state and control clients. + +### PMS Endpoints Used + +| Endpoint / Mechanism | Purpose | Status in Spec | +|---|---|---| +| `/` (root) | Server status / connection test | **Present** | +| `/clients` | List connected clients | **Absent** (returns `MediaContainer` of `Server`/`Player` objects) | +| `/status/sessions` | Active sessions | **Present** | +| `/library/sections` | Library discovery | **Present** | +| `systemAccounts()` (effectively `/accounts`) | Server system accounts | **Absent** | +| `playlists()` | List playlists | **Present** | +| `createToken()` | Generate temporary client token | **Absent** | + +### Websocket & Real-Time + +| Endpoint | Purpose | Status in Spec | +|---|---|---| +| `/:/websockets/notifications` | Real-time event stream (playing, timeline, status, reachability) | **Absent** | + +The integration subscribes to: +- `playing` → `PlaySessionStateNotification` (state changes: playing, paused, stopped) +- `status` → `StatusNotification` (e.g. "Library scan complete") + +### Discovery + +- **GDM (UDP multicast)**: Uses `plexapi.gdm.GDM` to discover clients on `239.0.0.250:32412/32414` via UDP multicast. This is a network-layer protocol, not a REST API, but it's a critical integration mechanism absent from the spec. + +### plex.tv Patterns + +- `MyPlexAccount(token=...)` → `account.resources()` → server connection +- `account.users()` → shared user discovery +- `resource.connect()` → plex.direct URL resolution + +--- + +## Webhooks & plex.tv endpoints + +### Plex Webhooks + +Webhooks are a **Plex Pass** feature configured via the Plex Web UI (Account → Webhooks). There is **no documented REST API** for webhook CRUD operations. + +#### Events Emitted + +| Event | Description | +|---|---| +| `library.on.deck` | New item added to On Deck | +| `library.new` | New item added to library | +| `media.play` | Playback started | +| `media.pause` | Playback paused | +| `media.resume` | Playback resumed | +| `media.stop` | Playback stopped | +| `media.scrobble` | Played past ~90% | +| `media.rate` | Item rated | +| `admin.database.backup` | Scheduled DB backup completed | +| `admin.database.corrupted` | DB corruption detected | +| `device.new` | New device accessed server | +| `playback.started` | Shared user started playback (admin only) | + +#### Payload Structure + +- **Format**: Multipart HTTP POST (`Content-Type: multipart/form-data`) +- **JSON part**: `payload` field containing `event`, `user`, `owner`, `Account`, `Server`, `Player`, `Metadata` +- **Thumbnail part**: Optional JPEG `thumb` attachment for `media.play`, `library.new`, `library.on.deck`, `media.rate`, `playback.started` + +The webhook payload schema is **not present** in the OpenAPI spec. + +### Additional plex.tv Endpoints (Cross-cutting) + +These plex.tv endpoints are used by multiple integrations (Tautulli, Overseerr, Home Assistant, etc.) and are largely absent: + +| Endpoint | Used By | Status | +|---|---|---| +| `GET https://plex.tv/api/v2/pins` | Tautulli, Overseerr, Bazarr | **Absent** | +| `GET https://plex.tv/api/v2/pins/{id}` | Tautulli, Overseerr, Bazarr | **Absent** | +| `GET https://plex.tv/api/resources?includeHttps=1` | Tautulli, Overseerr, HA | **Absent** | +| `GET https://plex.tv/users/account` / `users/account.json` | Tautulli, Overseerr | **Absent** | +| `GET https://plex.tv/devices.xml` | Tautulli | **Absent** | +| `GET https://plex.tv/pms/servers.xml` | Tautulli | **Absent** | +| `GET https://plex.tv/api/servers/{machineId}/shared_servers` | Tautulli | **Absent** | +| `GET https://plex.tv/servers/{machineId}/sync_lists` | Tautulli | **Absent** | +| `GET https://plex.tv/api/downloads/{channel}.json` | Tautulli | **Absent** | +| `GET https://plex.tv/api/v2/cloud_server` | Tautulli | **Absent** | +| `GET https://plex.tv/api/v2/geoip` | Tautulli | **Absent** | +| `GET https://plex.tv/api/v2/ping` | Tautulli, Overseerr | **Absent** | +| `GET https://plex.tv/:/ip` | Tautulli | **Absent** | +| `GET https://discover.provider.plex.tv/library/sections/watchlist/all` | Overseerr, Jellyseerr | **Absent** | +| `GET https://discover.provider.plex.tv/library/metadata/{id}` | Overseerr, Jellyseerr | **Absent** | +| `GET https://metadata.provider.plex.tv/library/metadata/{id}` | Tautulli | **Absent** | + +--- + +## Summary table: Endpoint | Method | Used By | Status in Spec + +| Endpoint | Method | Used By | Status in Spec | +|---|---|---|---| +| `/status/sessions` | GET | Tautulli, HA, many | Present | +| `/status/sessions/terminate` | GET | Tautulli | Present | +| `/library/metadata/{id}?includeMarkers=1` | GET | Tautulli | Partial | +| `/library/metadata/{id}/grandchildren` | GET | Tautulli | Absent | +| `/library/sections/{id}/recentlyAdded` | GET | Tautulli | Absent | +| `/library/recentlyAdded` | GET | Tautulli | Absent | +| `/hubs/home/recentlyAdded` | GET | Tautulli | Absent | +| `/hubs/search?includeCollections=1` | GET | Tautulli | Partial | +| `/library/sections/{id}/label` | GET | Tautulli, Kometa | Absent | +| `/sync/items/{id}` | GET | Tautulli | Absent | +| `/sync/transcodeQueue` | GET | Tautulli | Absent | +| `/myplex/account` | GET | Tautulli | Absent | +| `/myplex/refreshReachability` | PUT | Tautulli | Absent | +| `/servers` | GET | Tautulli | Absent | +| `/library/sections/{id}/all?includeGuids=1` | GET | Overseerr | Partial | +| `/library/sections/{id}/all?addedAt>>={ts}` | GET | Overseerr | Partial | +| `discover.provider.plex.tv/library/sections/watchlist/all` | GET | Overseerr, Jellyseerr | Absent | +| `discover.provider.plex.tv/library/metadata/{id}` | GET | Overseerr, Jellyseerr | Absent | +| `metadata.provider.plex.tv/library/metadata/{id}` | GET | Tautulli | Absent | +| `/library/metadata/{id}/posters` | POST | Kometa | Absent | +| `/library/metadata/{id}/arts` | POST | Kometa | Absent | +| `/library/sections/{id}/refresh` | GET/POST | Kometa | Absent | +| `/library/sections/{id}/emptyTrash` | GET/POST | Kometa | Absent | +| `/library/sections/{id}/optimize` | GET/POST | Kometa | Absent | +| `/library/optimize` | GET/POST | Kometa | Absent | +| `/clients` | GET | HA | Absent | +| `/accounts` | GET | HA (via python-plexapi) | Absent | +| `/:/websockets/notifications` | WS | Tautulli, HA | Absent | +| `plex.tv/api/v2/pins` | POST | Tautulli, Overseerr, Bazarr | Absent | +| `plex.tv/api/v2/pins/{id}` | GET | Tautulli, Overseerr, Bazarr | Absent | +| `plex.tv/api/resources?includeHttps=1` | GET | Tautulli, Overseerr, HA | Absent | +| `plex.tv/users/account` / `users/account.json` | GET | Tautulli, Overseerr | Absent | +| `plex.tv/devices.xml` | GET | Tautulli | Absent | +| `plex.tv/pms/servers.xml` | GET | Tautulli | Absent | +| `plex.tv/api/servers/{machineId}/shared_servers` | GET | Tautulli | Absent | +| `plex.tv/servers/{machineId}/sync_lists` | GET | Tautulli | Absent | +| `plex.tv/api/downloads/{channel}.json` | GET | Tautulli | Absent | +| `plex.tv/api/v2/cloud_server` | GET | Tautulli | Absent | +| `plex.tv/api/v2/geoip` | GET | Tautulli | Absent | +| `plex.tv/api/v2/ping` | GET | Tautulli, Overseerr | Absent | +| `plex.tv/:/ip` | GET | Tautulli | Absent | +| Plex Webhook payload schema | POST (inbound) | Bazarr, HA, Notifiarr | Absent | + +--- + +## Priority gaps (most impactful missing endpoints) + +### 1. plex.tv Authentication & Discovery (`CRITICAL`) +The OAuth PIN flow (`/api/v2/pins`) and server discovery (`/api/resources?includeHttps=1`) are fundamental to every modern integration. Without these, client apps cannot authenticate users or discover connection URLs. These are completely missing. + +### 2. plex.tv Account & Sharing Endpoints (`HIGH`) +- `/users/account` and `/users/account.json` — required for account info, Plex Pass status, and home-user detection. +- `/api/servers/{machineId}/shared_servers` — required for understanding which libraries are shared with which users. +- `/api/users` — present in spec but only as XML; JSON variant used by some tools is not documented. + +### 3. Plex Discover / Watchlist Provider (`HIGH`) +- `discover.provider.plex.tv/library/sections/watchlist/all` +- `discover.provider.plex.tv/library/metadata/{id}` +These are now the canonical endpoints for Plex Watchlist data. Overseerr/Jellyseerr depend on them. The older `metadata.provider.plex.tv` endpoint is also used by Tautulli for GUID-based metadata lookups. + +### 4. Real-Time Websocket (`HIGH`) +- `/:/websockets/notifications` is the primary real-time event bus for sessions, timeline updates, and server status. Both Tautulli and Home Assistant rely on it. The spec documents SSE/EventSource but not the websocket path or its message schema (`NotificationContainer`, `PlaySessionStateNotification`, `TimelineEntry`, `ReachabilityNotification`). + +### 5. Media Metadata Parameters (`MEDIUM-HIGH`) +- `includeMarkers=1` on `/library/metadata/{id}` — critical for intro/credits skip detection (used by Tautulli and many clients). +- `includeGuids=1` on `/library/sections/{id}/all` — critical for matching items to external databases (TMDB, TVDB) in Overseerr/Kometa. +- `includeCollections=1` on `/hubs/search` — affects search behavior for collection discovery. + +### 6. Library & Server Maintenance Endpoints (`MEDIUM`) +- `/library/sections/{id}/refresh`, `/emptyTrash`, `/optimize` +- `/library/optimize` +- `/library/metadata/{id}/posters` and `/arts` (image upload) +These are essential for automation tools like Kometa and are well-known in the community but absent from the spec. + +### 7. Webhook Schema (`MEDIUM`) +The webhook payload structure and event types are documented only in Plex support articles. A formal OpenAPI schema for the multipart JSON payload would help webhook consumers (Bazarr, Home Assistant, Notifiarr, Tautulli) validate inputs. + +### 8. Local Server Utility Endpoints (`LOW-MEDIUM`) +- `/servers` — local server list +- `/library/recentlyAdded` and `/library/sections/{id}/recentlyAdded` — standard "new content" queries +- `/library/metadata/{id}/grandchildren` — useful for show→episode traversal without intermediate season fetches +- `/sync/items/{id}` and `/sync/transcodeQueue` — mobile sync management diff --git a/review/python_plexapi_gap_analysis.md b/review/python_plexapi_gap_analysis.md new file mode 100644 index 000000000..dd212a82f --- /dev/null +++ b/review/python_plexapi_gap_analysis.md @@ -0,0 +1,302 @@ +# python-plexapi Gap Analysis + +**Date:** 2026-06-03 +**SDK Version Analyzed:** master (pkkid/python-plexapi) +**OpenAPI Spec:** plex-api-spec.yaml (local) + +--- + +## 1. Endpoints in SDK but Missing from Spec + +### PMS Endpoints (Local Server) + +| Path | Method | Source File | What it does | +|------|--------|-------------|--------------| +| `/library` | GET | `server.py` | Returns the root `Library` object (used by `PlexServer.library`) | +| `/library/sections/` | GET | `server.py` | Fallback for non-owners to list sections (used when `/library` throws `BadRequest`) | +| `/clients` | GET | `server.py` | Lists connected `PlexClient` objects (`PlexServer.clients()`) | +| `/system/agents` | GET | `server.py` | Lists available metadata agents (`PlexServer.agents()`) | +| `/accounts` | GET | `server.py` | Lists local system accounts (`PlexServer.systemAccounts()`) | +| `/devices` | GET | `server.py` | Lists local system devices (`PlexServer.systemDevices()`) | +| `/services/browse` | GET | `server.py` | Browses filesystem paths (`PlexServer.browse()`) | +| `/services/browse/{base64path}` | GET | `server.py` | Browses a specific filesystem path | +| `/diagnostics/databases` | GET | `server.py` | Downloads server DB diagnostics (`PlexServer.downloadDatabases()`) | +| `/diagnostics/logs` | GET | `server.py` | Downloads server logs (`PlexServer.downloadLogs()`) | +| `/statistics/bandwidth` | GET | `server.py` | Dashboard bandwidth data (`PlexServer.bandwidth()`) | +| `/statistics/resources` | GET | `server.py` | Dashboard resource data (`PlexServer.resources()`) | +| `/sync/refreshSynclists` | PUT | `server.py` | Forces PMS to download new SyncList from plex.tv | +| `/sync/refreshContent` | PUT | `server.py` | Forces PMS to refresh content for known SyncLists | +| `/playlists?type=42` | GET / DELETE | `server.py` | Optimized/Conversion items (`optimizedItems()`, `conversions()`) | +| `/playQueues/1` | GET | `server.py` | Conversion queue (`PlexServer.conversions()`) | +| `/hubs/continueWatching/items` | GET | `server.py` | Continue Watching hub items (`PlexServer.continueWatching()`) | +| `/:/progress` | GET | `base.py` | Updates watch progress (`Playable.updateProgress()`) | +| `/actions/removeFromContinueWatching` | PUT | `video.py` | Removes item from Continue Watching (`Movie.removeFromContinueWatching()`) | +| `/library/metadata/{id}/nearest` | GET | `audio.py` | Sonically similar items (`Audio.sonicallySimilar()`) | +| `/library/sections/{id}/computePath` | GET | `library.py` | Sonic adventure path (`MusicSection.sonicAdventure()`) | + +### Plex.tv / MyPlex Endpoints (Cloud Auth) + +The spec is PMS-centric and does **not** document any plex.tv cloud APIs. python-plexapi relies heavily on these for authentication, sharing, and sync. + +| Path | Method | Source File | What it does | +|------|--------|-------------|--------------| +| `https://plex.tv/api/v2/user` | GET | `myplex.py` | MyPlex account profile | +| `https://plex.tv/api/v2/users/signin` | POST | `myplex.py` | Username/password sign-in (supports 2FA) | +| `https://plex.tv/api/v2/users/signout` | DELETE | `myplex.py` | Invalidate token | +| `https://plex.tv/api/v2/ping` | GET | `myplex.py` | Token refresh ping | +| `https://plex.tv/api/v2/user/webhooks` | GET / POST | `myplex.py` | Webhook management | +| `https://plex.tv/api/v2/user/{uuid}/settings/opt_outs` | GET | `myplex.py` | Online media source opt-outs | +| `https://plex.tv/api/v2/pins/link` | PUT | `myplex.py` | PIN-based linking | +| `https://plex.tv/api/v2/user/view_state_sync` | PUT | `myplex.py` | View state sync | +| `https://plex.tv/api/servers/{machineId}/shared_servers` | POST | `myplex.py` | Share library with friend | +| `https://plex.tv/api/home/users` | GET / POST | `myplex.py` | Plex Home user list / creation | +| `https://plex.tv/api/home/users/{userId}` | DELETE / PUT | `myplex.py` | Remove / update home user | +| `https://plex.tv/api/v2/home/users/restricted/{userId}` | PUT | `myplex.py` | Managed user restrictions | +| `https://plex.tv/api/servers/{machineId}` | GET | `myplex.py` | Server details for sharing | +| `https://plex.tv/api/v2/sharings/{userId}` | PUT / DELETE | `myplex.py` | Update/remove friend share | +| `https://plex.tv/api/claim/token.json` | GET | `myplex.py` | Claim token for new servers | +| `https://sonos.plex.tv/resources` | GET | `myplex.py` | Sonos speaker discovery | +| `https://vod.provider.plex.tv/hubs` | GET | `myplex.py` | VOD hub items | +| `https://music.provider.plex.tv/hubs` | GET | `myplex.py` | Tidal hub items | +| `https://plex.tv/devices/{clientId}/sync_items` | GET / POST | `sync.py` | Mobile sync item list / creation | + +### Client Remote-Control Endpoints + +The spec does not cover the Plex Client Control Protocol (used by `PlexClient`). + +| Path Prefix | Methods | Source File | What it does | +|-------------|---------|-------------|--------------| +| `/player/{command}` | GET (via proxy) | `client.py` | Playback/navigation remote control (pause, play, seek, etc.) | +| `/player/playback/playMedia` | GET (via proxy) | `client.py` | Start playback of a media item on a client | +| `/player/playback/setParameters` | GET (via proxy) | `client.py` | Set shuffle/repeat/volume | +| `/player/playback/setStreams` | GET (via proxy) | `client.py` | Set active audio/subtitle/video streams | +| `/player/timeline/poll` | GET (via proxy) | `client.py` | Poll client playback timeline | +| `/resources` | GET | `client.py` | Client capabilities and device info | + +--- + +## 2. Schema Field Mismatches + +Fields that python-plexapi parses from XML responses but which are **not documented** in the corresponding OpenAPI schemas. + +### `ServerConfiguration` (root `/`) + +| SDK Field | Spec Status | Notes | +|-----------|-------------|-------| +| `diagnostics` | **Type mismatch** | Spec: `string`. SDK parses as `list` (comma-separated diagnostics modules). | +| `transcoderVideoBitrates` | **Type mismatch** | Spec: untyped / description only. SDK parses as `list`. | +| `transcoderVideoQualities` | **Type mismatch** | Spec: `string`. SDK parses as `list`. | +| `transcoderVideoResolutions` | **Type mismatch** | Spec: description only. SDK parses as `list`. | +| `ownerFeatures` | **Type mismatch** | Spec: `string` (comma-separated). SDK parses as `list`. | + +### `Metadata` (Movies, Shows, Episodes, Tracks, etc.) + +| SDK Field | Found In | Spec Status | +|-----------|----------|-------------| +| `artBlurHash` | `video.py`, `audio.py` | **Missing** from `Metadata` schema | +| `thumbBlurHash` | `video.py`, `audio.py` | **Missing** from `Metadata` schema | +| `lastRatedAt` | `video.py`, `audio.py` | **Missing** from `Metadata` schema | +| `editionTitle` | `video.py` (Movie) | **Missing** | +| `languageOverride` | `video.py` (Movie, Show) | **Missing** | +| `enableCreditsMarkerGeneration` | `video.py` (Movie, Show) | **Missing** | +| `useOriginalTitle` | `video.py` (Movie, Show) | **Missing** | +| `slug` | `video.py` (Movie, Show) | **Missing** | +| `skipCount` | `audio.py` (Track) | **Missing** | +| `musicAnalysisVersion` | `audio.py` (Audio base) | **Missing** | +| `distance` | `audio.py` (Audio base) | **Missing** (sonic distance) | +| `sourceURI` | `video.py`, `audio.py`, `playlist.py` | **Missing** (remote/shared server items) | +| `playlistItemID` | `base.py` (Playable) | **Missing** | +| `playQueueItemID` | `base.py` (Playable) | **Missing** | + +### `Media` + +| SDK Field | Found In | Spec Status | +|-----------|----------|-------------| +| `uuid` | `media.py` | **Missing** from `Media` schema | +| `selected` | `media.py` | **Missing** | +| `title` | `media.py` | Present in spec ✅ | + +### `Part` + +| SDK Field | Found In | Spec Status | +|-----------|----------|-------------| +| `protocol` | `media.py` | **Missing** | +| `packetLength` | `media.py` | **Missing** | +| `requiredBandwidths` | `media.py` | **Missing** | +| `syncItemId` | `media.py` | **Missing** | +| `syncState` | `media.py` | **Missing** | +| `deepAnalysisVersion` | `media.py` | **Missing** | +| `decision` | `media.py` | Present in `MediaContainerWithDecision` ✅ | + +### `Stream` (Video, Audio, Subtitle, Lyric) + +| SDK Field | Found In | Spec Status | +|-----------|----------|-------------| +| `bitrateMode` | `media.py` (AudioStream) | **Missing** | +| `visualImpaired` | `media.py` (AudioStream) | **Missing** | +| `albumGain` | `media.py` (AudioStream) | **Missing** (track-only loudness) | +| `albumPeak` | `media.py` (AudioStream) | **Missing** | +| `albumRange` | `media.py` (AudioStream) | **Missing** | +| `endRamp` | `media.py` (AudioStream) | **Missing** | +| `gain` | `media.py` (AudioStream) | **Missing** | +| `loudness` | `media.py` (AudioStream) | **Missing** | +| `lra` | `media.py` (AudioStream) | **Missing** | +| `peak` | `media.py` (AudioStream) | **Missing** | +| `startRamp` | `media.py` (AudioStream) | **Missing** | +| `providerTitle` | `media.py` (SubtitleStream) | **Missing** | +| `score` | `media.py` (SubtitleStream) | **Missing** | +| `sourceKey` | `media.py` (SubtitleStream) | **Missing** | +| `transient` | `media.py` (SubtitleStream) | **Missing** | +| `userID` | `media.py` (SubtitleStream) | **Missing** | +| `minLines` | `media.py` (LyricStream) | **Missing** | +| `provider` | `media.py` (LyricStream) | **Missing** | +| `timed` | `media.py` (LyricStream) | **Missing** | +| `extendedDisplayTitle` | `media.py` (MediaPartStream) | Present in spec ✅ | +| `languageTag` | `media.py` (MediaPartStream) | Present in spec ✅ | +| `streamIdentifier` | `media.py` (MediaPartStream) | Present in spec ✅ | +| `perfectMatch` | `media.py` (SubtitleStream) | **Missing** | + +### `Collection` + +| SDK Field | Found In | Spec Status | +|-----------|----------|-------------| +| `collectionFilterBasedOnUser` | `collection.py` | **Missing** | +| `collectionMode` | `collection.py` | **Missing** | +| `collectionPublished` | `collection.py` | **Missing** | +| `collectionSort` | `collection.py` | **Missing** | +| `artBlurHash` | `collection.py` | **Missing** | +| `thumbBlurHash` | `collection.py` | **Missing** | +| `userRating` | `collection.py` | **Missing** | +| `lastRatedAt` | `collection.py` | **Missing** | + +### `Playlist` + +| SDK Field | Found In | Spec Status | +|-----------|----------|-------------| +| `durationInSeconds` | `playlist.py` | **Missing** | +| `radio` | `playlist.py` | **Missing** | +| `titleSort` | `playlist.py` | **Missing** | +| `librarySectionID` | `playlist.py` | Present in spec ✅ | +| `librarySectionKey` | `playlist.py` | Present in spec ✅ | +| `librarySectionTitle` | `playlist.py` | Present in spec ✅ | + +### `PlayQueue` + +| SDK Field | Found In | Spec Status | +|-----------|----------|-------------| +| `playQueueLastAddedItemID` | `playqueue.py` | Present in spec ✅ | +| `playQueueSelectedItemID` | `playqueue.py` | Present in spec ✅ | +| `playQueueSelectedItemOffset` | `playqueue.py` | Present in spec ✅ | +| `playQueueSelectedMetadataItemID` | `playqueue.py` | **Missing** | +| `playQueueShuffled` | `playqueue.py` | Present in spec ✅ | +| `playQueueSourceURI` | `playqueue.py` | Present in spec ✅ | +| `playQueueTotalCount` | `playqueue.py` | Present in spec ✅ | +| `playQueueVersion` | `playqueue.py` | Present in spec ✅ | + +--- + +## 3. Parameter / Query Gaps + +### Missing or Under-Documented Query Parameters + +| Parameter | Where Used | Spec Status | +|-----------|------------|-------------| +| `includeGuids` | Virtually every `fetchItems`/`fetchItem` call in SDK | Only documented on `/library/sections/{sectionId}/all` | +| `checkFiles` | `_INCLUDES` in `base.py` (`PlexPartialObject.reload()`) | Mentioned in description but not a formal parameter on most metadata endpoints | +| `includeMarkers` | `_INCLUDES` in `base.py` | Not formally documented on `/library/metadata/{ids}` | +| `includeChapters` | `_INCLUDES` in `base.py` | Not formally documented on most endpoints | +| `includeExternalMedia` | `_INCLUDES` in `base.py` | Missing from most endpoints | +| `includeExtras` | `_INCLUDES` in `base.py` | Missing from most endpoints | +| `includeRelated` | `_INCLUDES` in `base.py` | Missing from most endpoints | +| `includeOnDeck` | `_INCLUDES` in `base.py` | Missing | +| `includePopularLeaves` | `_INCLUDES` in `base.py` | Missing | +| `includeReviews` | `_INCLUDES` in `base.py` | Missing | +| `includeStations` | `_INCLUDES` in `base.py` | Missing | +| `includeAllConcerts` | `_INCLUDES` in `base.py` | Missing | +| `includeConcerts` | `_INCLUDES` in `base.py` | Missing | +| `includeBandwidths` | `_INCLUDES` in `base.py` | Missing | +| `includeLoudnessRamps` | `_INCLUDES` in `base.py` | Missing | +| `includeGeolocation` | `_INCLUDES` in `base.py` | Missing | +| `includeChildren` | `_INCLUDES` in `base.py` | Missing | +| `includeFields` | `_INCLUDES` in `base.py` | Mentioned in `/status/sessions/history/all` description only | +| `excludeElements` | `_EXCLUDES` in `base.py` | Mentioned in history description only | +| `excludeFields` | `_EXCLUDES` in `base.py` | Mentioned in history description only | +| `skipRefresh` | `_EXCLUDES` in `base.py` | Mentioned on `/library/metadata/{ids}/refresh` | +| `asyncAugmentMetadata=1` | `video.py` (`Video.augmentation()`) | **Missing** | +| `includeFiles` | `server.py` (`PlexServer.browse()`) | **Missing** (endpoint itself is missing) | +| `type=42` | `server.py` (`optimizedItems()`, `conversions()`) | **Missing** from `/playlists` schema | +| `timespan` (values: 1-6) | `server.py` (`bandwidth()`) | **Missing** from `/statistics/bandwidth` (endpoint missing) | +| `accountID`, `deviceID`, `lan` | `server.py` (`bandwidth()`) | **Missing** | +| `playlistType` | `server.py` (`playlists()`) | Present on `/playlists` ✅ | +| `sectionID` | `server.py` (`playlists()`) | Present on `/playlists` ✅ | +| `metadataItemID` | `server.py` (`history()`) | Present on `/status/sessions/history/all` ✅ | +| `viewedAt>` | `server.py` (`history()`) | Present ✅ | + +### Header Usage Differences + +| Header | SDK Usage | Spec Status | +|--------|-----------|-------------| +| `X-Plex-Container-Start` | Sent on every batched `fetchItems` call | Documented as response header; not always listed as request header | +| `X-Plex-Container-Size` | Sent on every batched `fetchItems` call | Documented as response header; not always listed as request header | +| `X-Plex-Session-Identifier` | Sent on timeline posts | Documented on `/:/timeline` ✅ | + +--- + +## 4. Auth Flow Differences + +| Aspect | python-plexapi | OpenAPI Spec | +|--------|----------------|--------------| +| **PMS Auth** | `X-Plex-Token` header (or `X-Plex-Token` query param via `url()`) | `token` security scheme (header-based) ✅ | +| **Plex.tv Sign-In** | `POST https://plex.tv/api/v2/users/signin` with form data (`login`, `password`, `rememberMe`, `verificationCode`) | **Not documented** (spec is PMS-only) | +| **JWT Auth** | `MyPlexJWTLogin` uses Ed25519 keypairs to sign JWTs for auth | **Not documented** | +| **Claim Flow** | `MyPlexAccount.claimToken()` fetches token from `plex.tv/api/claim/token.json`, then `POST /myplex/claim` on PMS | Claim endpoint on PMS is **missing** from spec | +| **Home User Switch** | `POST https://plex.tv/api/home/users/{id}/switch` returns new auth token | **Not documented** | +| **Token Scope** | `PlexServer.createToken(type='delegation', scope='all')` | `/security/token` is present ✅ | +| **User Switching** | `PlexServer.switchUser()` uses admin token to fetch user token, then creates new `PlexServer` instance | Not documented as a formal flow | + +--- + +## 5. Notes on Implementation Patterns + +### XML-First Parsing +- The SDK parses **XML** responses, not JSON. All object attributes are read from XML element attributes (`data.attrib.get('...')`). +- The SDK uses **camelCase** throughout to match Plex's XML attribute names exactly. +- The OpenAPI spec describes JSON schemas, but many fields only appear in XML responses (e.g. `artBlurHash`, `thumbBlurHash`). + +### Partial Object Auto-Reload +- `PlexPartialObject` implements lazy loading: accessing a `None` attribute triggers `_reload()` with `_INCLUDES`/`_EXCLUDES` parameters. +- This means the SDK relies heavily on metadata detail endpoints with optional include/exclude parameters that are not fully documented in the spec. + +### Client-Side Filtering +- `fetchItems()` supports client-side operators (`__gt`, `__contains`, `__regex`, etc.) applied to XML attributes after the server response. +- These operators are **not** server-side query parameters; they are post-processing filters in Python. + +### Batched Pagination +- `fetchItems()` automatically paginates using `X-Plex-Container-Start` and `X-Plex-Container-Size` headers. +- The SDK does not use traditional `offset`/`limit` query parameters for pagination; it uses Plex's header-based pagination protocol. + +### Multi-Server Awareness +- Playlist items can have `sourceURI` pointing to a different server. The SDK resolves these by looking up the server via `myPlexAccount().resource(serverID).connect()`. +- This cross-server item resolution is not described in the spec. + +### Playback & Sync URIs +- The SDK constructs custom `library://` and `server://` URIs for playlists, collections, and sync items. +- These URI schemes are internal to Plex and are used as `uri` parameters when creating playlists, collections, and sync items. + +### Client Proxy Pattern +- `PlexClient` can send commands directly to the client device **or** proxy them through the PMS using `X-Plex-Target-Client-Identifier`. +- The proxied client commands are sent to `/player/{command}` on the PMS, which forwards them to the client. This proxy path is not documented in the spec. + +--- + +## Summary + +The python-plexapi SDK covers a **significantly broader surface area** than the current OpenAPI spec, particularly in these areas: + +1. **Plex.tv cloud APIs** (auth, sharing, sync, home users, webhooks) +2. **Local PMS management endpoints** (diagnostics, statistics, browsing, agents, devices, accounts) +3. **Client remote control protocol** (navigation, playback, timeline polling) +4. **Fine-grained metadata include/exclude parameters** (the `_INCLUDES` / `_EXCLUDES` matrix) +5. **XML-specific fields** (blur hashes, loudness ramps, sync states, on-demand subtitle metadata) + +The spec is strongest on core media provider APIs (`/library/metadata`, `/library/sections`, `/playlists`, `/playQueues`, `/transcode`) but lacks many operational and administrative endpoints that the SDK uses daily. diff --git a/review/undocumented_endpoints_research.md b/review/undocumented_endpoints_research.md new file mode 100644 index 000000000..78a61e4b3 --- /dev/null +++ b/review/undocumented_endpoints_research.md @@ -0,0 +1,423 @@ +# Undocumented & Hidden Plex API Endpoints + +> **Research date:** 2026-06-03 +> **Scope:** Public forums, GitHub, Gists, Reddit, CVE write-ups, and the official `plex-api-spec.yaml` (≈17k lines). +> **Goal:** Catalog endpoints, patterns, auth quirks, and XML/JSON behaviors that are **not** present in the current OpenAPI spec. + +--- + +## How to read this document + +* **In spec?** = Already documented in `plex-api-spec.yaml`. +* **Not in spec** = Missing from the current spec and should be considered for addition. +* Sources are URLs where the endpoint or behavior was observed in the wild. + +--- + +## plex.tv API v2 (Account, Auth, Devices, Webhooks) + +The current spec only documents three `plex.tv/api/v2` paths (`/user`, `/users/signin`, `/resources`). The v2 surface is much larger. + +### Account & User + +| Path | Method | What it does | Auth | In spec? | Source | +|------|--------|--------------|------|----------|--------| +| `https://plex.tv/api/v2/user` | `GET` | Full account object (authToken, home, subscription, etc.) | `X-Plex-Token` | ✅ Yes | — | +| `https://plex.tv/api/v2/users/signin` | `POST` | Username/password sign-in | Basic / form | ✅ Yes | — | +| `https://plex.tv/api/v2/users/signout` | `DELETE` | Invalidate token | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://plex.tv/api/v2/features` | `GET` | Plex Pass feature flags for the account | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/plex-v2-api-documentation/444928) | +| `https://plex.tv/api/v2/friends` | `GET` | List of friends & shared users | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/plex-v2-api-documentation/444928) | +| `https://plex.tv/api/v2/home` | `GET` | Plex Home user list | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/plex-v2-api-documentation/444928) | +| `https://plex.tv/api/v2/server` | `GET` | Server association info for the logged-in user | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/plex-v2-api-documentation/444928) | +| `https://plex.tv/api/v2/users/password` | `POST` | Change/reset password | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/plex-v2-api-documentation/444928) | +| `https://plex.tv/api/v2/ping` | `GET` | Health / latency check | None | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://plex.tv/api/v2/user/view_state_sync` | `PUT` | Enable/disable watch-state sync consent | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://plex.tv/api/v2/user/{userUUID}/settings/opt_outs` | `GET` | Online-media-source opt-outs (e.g. `opt_in`, `opt_out`, `opt_out_managed`) | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | + +### Sharing & Invites + +| Path | Method | What it does | Auth | In spec? | Source | +|------|--------|--------------|------|----------|--------| +| `https://plex.tv/api/v2/shared_servers` | `POST` | Share a server with a user (managed or friend) | `X-Plex-Token` + `X-Plex-Client-Identifier` | ❌ No | [Plexopedia](https://www.plexopedia.com/plex-media-server/api-plextv/share-server/) | +| `https://plex.tv/api/v2/sharings/{userId}` | `PUT` | Update friend filters (allowSync, allowCameraUpload, filterMovies, etc.) | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://plex.tv/api/v2/sharings/{userId}` | `DELETE` | Remove a share / friend | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://plex.tv/api/v2/home/users/restricted/{userId}` | `PUT` | Update restricted (managed) home user settings | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://plex.tv/api/v2/server/access_tokens` | `GET` | List access tokens for the server (server-device token only) | `X-Plex-Token` | ❌ No | [CVE-2025-34158 write-up](https://github.com/lufinkey/vulnerability-research/blob/main/CVE-2025-34158/README.md) | +| `https://plex.tv/api/v2/server/users/features` | `GET` | Features enabled per shared user | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/request-for-admin-expert-review-server-claimed-but-all-tokens-return-403-forbidden/932522) | + +### PIN & OAuth + +| Path | Method | What it does | Auth | In spec? | Source | +|------|--------|--------------|------|----------|--------| +| `https://plex.tv/api/v2/pins` | `POST` | Create a 4-character PIN for device linking | `X-Plex-Client-Identifier` | ❌ No | [python-plexapi docs](https://python-plexapi.readthedocs.io/en/latest/modules/myplex.html) | +| `https://plex.tv/api/v2/pins/{pinId}` | `GET` | Poll PIN status; returns `authToken` when claimed | `X-Plex-Client-Identifier` | ❌ No | [plexargod repo](https://github.com/danielewood/plexargod) | +| `https://plex.tv/api/v2/pins/link` | `PUT` | Link a PIN to an account (used by OAuth flow) | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://clients.plex.tv/api/v2/pins` | `POST` | Alternative PIN endpoint (clients subdomain) | `X-Plex-Client-Identifier` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | + +### JWT Device Registration (new as of 2025) + +| Path | Method | What it does | Auth | In spec? | Source | +|------|--------|--------------|------|----------|--------| +| `https://clients.plex.tv/api/v2/auth/jwk` | `POST` | Register device public key (JWK) | `X-Plex-Token` + `X-Plex-Client-Identifier` | ❌ No | [Plex Pro Week blog](https://www.plex.tv/blog/plex-pro-week-25-api-unlocked/), [JonnyWong16 gist](https://gist.github.com/JonnyWong16/6720b9d9edc5686c72957d94b0d5b381) | +| `https://clients.plex.tv/api/v2/auth/nonce` | `GET` | Get a nonce to sign in the client JWT | `X-Plex-Client-Identifier` | ❌ No | [JonnyWong16 gist](https://gist.github.com/JonnyWong16/6720b9d9edc5686c72957d94b0d5b381) | +| `https://clients.plex.tv/api/v2/auth/token` | `POST` | Exchange signed client JWT for a Plex JWT | `X-Plex-Client-Identifier` | ❌ No | [JonnyWong16 gist](https://gist.github.com/JonnyWong16/6720b9d9edc5686c72957d94b0d5b381) | +| `https://clients.plex.tv/api/v2/auth/keys` | `GET` | Plex public JWKs for signature verification | None | ❌ No | [JonnyWong16 gist](https://gist.github.com/JonnyWong16/6720b9d9edc5686c72957d94b0d5b381) | + +**JWT quirks** +* Tokens expire after **7 days**. +* Must be refreshed via the keypair flow. +* Scope list: `username`, `email`, `friendly_name`, `restricted`, `anonymous`, `joinedAt`. +* Plex mentions **rate limiting** is active on these endpoints. + +### Webhooks Configuration + +| Path | Method | What it does | Auth | In spec? | Source | +|------|--------|--------------|------|----------|--------| +| `https://plex.tv/api/v2/user/webhooks` | `GET` | List configured webhook URLs | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://plex.tv/api/v2/user/webhooks` | `POST` | Add a webhook URL | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | + +### Device Certificate (used during server claim) + +| Path | Method | What it does | Auth | In spec? | Source | +|------|--------|--------------|------|----------|--------| +| `https://plex.tv/api/v2/devices/{deviceId}/certificate/subject` | `GET` | Get cert subject | `X-Plex-Token` | ❌ No | [Plex Forum logs](https://forums.plex.tv/t/fresh-install-unable-to-claim-ubuntu/853466) | +| `https://plex.tv/api/v2/devices/{deviceId}/certificate/csr` | `PUT` | Upload CSR | `X-Plex-Token` | ❌ No | [Plex Forum logs](https://forums.plex.tv/t/fresh-install-unable-to-claim-ubuntu/853466) | +| `https://plex.tv/api/v2/devices/{deviceId}/certificate/download` | `GET` | Download signed cert (may 202 / retry) | `X-Plex-Token` | ❌ No | [Plex Forum logs](https://forums.plex.tv/t/fresh-install-unable-to-claim-ubuntu/853466) | +| `https://plex.tv/api/v2/release_channels` | `GET` | Release channel info (seen during claim) | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/unable-to-set-my-claim-token/922072) | + +### Legacy v1 plex.tv endpoints still in use + +| Path | Method | What it does | Auth | In spec? | Source | +|------|--------|--------------|------|----------|--------| +| `https://plex.tv/pins.xml` | `POST` | Legacy PIN creation (returns XML) | `X-Plex-Client-Identifier` | ❌ No | [plexargod repo](https://github.com/danielewood/plexargod) | +| `https://plex.tv/pins/{pinId}` | `GET` | Legacy PIN check (returns XML) | `X-Plex-Client-Identifier` | ❌ No | [plexargod repo](https://github.com/danielewood/plexargod) | +| `https://plex.tv/api/resources` | `GET` | Published server connections (XML) | `X-Plex-Token` | ❌ No | [plexargod repo](https://github.com/danielewood/plexargod) | +| `https://plex.tv/api/users/` | `GET` | Friends list (XML) | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://plex.tv/api/servers/{machineId}` | `GET` | Server info (XML) | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://plex.tv/api/servers/{machineId}/shared_servers` | `POST` | Share server (XML) | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://clients.plex.tv/devices.xml` | `GET` | Authorized devices with tokens (XML) | `X-Plex-Token` | ❌ No | [CVE-2025-34158 write-up](https://github.com/lufinkey/vulnerability-research/blob/main/CVE-2025-34158/README.md) | + +--- + +## Cloud Provider Endpoints (`tv.plex.provider.*`) + +These are **not** in the spec at all. They are used by Plex clients for watchlists, search, and streaming metadata. + +### `metadata.provider.plex.tv` — **Deprecated** (moved to `discover.provider.plex.tv`) + +| Path | Method | What it does | Auth | In spec? | Source | +|------|--------|--------------|------|----------|--------| +| `https://metadata.provider.plex.tv/library/sections/watchlist/all` | `GET` | Fetch user watchlist | `X-Plex-Token` | ❌ No | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | +| `https://metadata.provider.plex.tv/actions/removeFromWatchlist` | `POST` | Remove from watchlist | `X-Plex-Token` | ❌ No | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | +| `https://metadata.provider.plex.tv/actions/addToWatchlist` | `POST` | Add to watchlist | `X-Plex-Token` | ❌ No | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | + +### `discover.provider.plex.tv` — **Current** + +| Path | Method | What it does | Auth | In spec? | Source | +|------|--------|--------------|------|----------|--------| +| `https://discover.provider.plex.tv/library/search` | `GET` | Search movies & shows in Discover | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://discover.provider.plex.tv/library/sections/watchlist/all` | `GET` | New watchlist endpoint | `X-Plex-Token` | ❌ No | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | +| `https://discover.provider.plex.tv/actions/removeFromWatchlist` | `POST` | New remove-from-watchlist | `X-Plex-Token` | ❌ No | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | +| `https://discover.provider.plex.tv/actions/addToWatchlist` | `POST` | New add-to-watchlist | `X-Plex-Token` | ❌ No | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | + +**Search query params** (from `searchDiscover`): +* `query`, `limit`, `searchTypes` (`movies,tv` or `movie` or `show`), `searchProviders` (`discover`, `discover,PLEXAVOD`, `discover,PLEXAVOD,PLEXTVOD`), `includeMetadata=1` +* Requires header `Accept: application/json`. + +### Other provider hostnames observed + +| Hostname | Purpose | In spec? | Source | +|----------|---------|----------|--------| +| `https://vod.provider.plex.tv` | VOD streaming / metadata | ❌ No | [Netify](https://www.netify.ai/resources/hostnames/vod.provider.plex.tv), [python-plexapi](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://music.provider.plex.tv` | Music provider | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `tv.plex.provider.vod` | VOD provider identifier | ❌ No | [Plex Pro Week blog](https://www.plex.tv/blog/plex-pro-week-25-api-unlocked/) | +| `tv.plex.provider.music` | Music provider identifier | ❌ No | [Plex Pro Week blog](https://www.plex.tv/blog/plex-pro-week-25-api-unlocked/) | +| `tv.plex.provider.discover` | Discover provider identifier | ❌ No | [Plex Pro Week blog](https://www.plex.tv/blog/plex-pro-week-25-api-unlocked/) | +| `tv.plex.provider.metadata` | Metadata provider identifier | ❌ No | [Plex Pro Week blog](https://www.plex.tv/blog/plex-pro-week-25-api-unlocked/) | + +--- + +## Server Management (undiscovered preferences, system endpoints) + +### System & Diagnostics + +| Path | Method | What it does | Auth | In spec? | Source | +|------|--------|--------------|------|----------|--------| +| `GET /system/agents` | `GET` | List metadata agents | `X-Plex-Token` (admin) | ❌ No | Unofficial wiki / community knowledge | +| `GET /system/agents/{agentId}` | `GET` | Agent details & settings | `X-Plex-Token` (admin) | ❌ No | Unofficial wiki / community knowledge | +| `GET /system/settings` | `GET` | System-level settings | `X-Plex-Token` (admin) | ❌ No | Unofficial wiki / community knowledge | +| `GET /system/updates` | `GET` | Check for PMS updates | `X-Plex-Token` (admin) | ❌ No | Unofficial wiki / community knowledge | +| `GET /diagnostics` | `GET` | Server diagnostics | `X-Plex-Token` (admin) | ❌ No | Unofficial wiki / community knowledge | +| `GET /sync` | `GET` | Sync status overview | `X-Plex-Token` | ❌ No | Unofficial wiki / community knowledge | +| `GET /sync/items` | `GET` | Sync items list | `X-Plex-Token` | ❌ No | Unofficial wiki / community knowledge | +| `GET /sync/queue` | `GET` | Sync queue | `X-Plex-Token` | ❌ No | Unofficial wiki / community knowledge | +| `GET /transcode/sessions` | `GET` | Active transcode sessions | `X-Plex-Token` (admin) | ❌ No | Unofficial wiki / community knowledge | + +### Preferences (`/:/prefs` is in spec, but many hidden settings are not) + +The spec documents `GET /:/prefs`, `GET /:/prefs/get`, and `PUT /:/prefs`. +What is **not** documented are the ~40+ *hidden* preference keys that can be read/written via the same endpoint: + +* `aBRKeepOldTranscodes`, `allowHighOutputBitrates`, `backgroundQueueIdlePaused` +* `butlerTaskGarbageCollectBlobs`, `butlerTaskGenerateMediaIndexFiles` +* `certificateVersion`, `dvrShowUnsupportedDevices`, `enableABRDebugOverlay` +* `enableAirplay`, `eyeQUser`, `forceAutoAdjustQuality` +* `generateIndexFilesDuringAnalysis`, `gracenoteUser` +* `hardwareDevicePath` (default `/dev/dri/renderD128`) +* `manualPortMappingMode`, `manualPortMappingPort` +* `minimumProgressTime`, `plexMetricsUrl`, `plexOnlineMail`, `plexOnlineUrl` +* `syncMyPlexLoginGCDeferral`, `syncPagingItemsLimit` +* `systemAudioCodecs`, `transcoderH264MinimumCRF`, `transcoderH264Options` +* `transcoderH264OptionsOverride`, `transcoderH264Preset` +* `transcoderLivePruneBuffer`, `transcoderLogLevel` + +Source: [Python PlexAPI settings docs](https://python-plexapi.readthedocs.io/en/latest/modules/settings.html), [Plex hidden settings article](https://support.plex.tv/articles/201105343-advanced-hidden-server-settings/) + +--- + +## Media Library (hidden params, extra endpoints) + +### Missing sub-endpoints under `/library/sections/{sectionId}` + +The spec documents `/library/sections/{sectionId}/all`, `/albums`, `/allLeaves`, `/analyze`, `/arts`, `/autocomplete`, `/categories`, `/cluster`, `/collections`, `/common`, `/computePath`, `/emptyTrash`, `/filters`, `/firstCharacters`, `/indexes`, `/intros`, `/location`, `/moment`, `/nearest`, `/prefs`, `/refresh`, `/sorts`, `/collection/{collectionId}`, `/composite/{updatedAt}`. + +**Not documented:** + +| Path | Method | Purpose | In spec? | Source | +|------|--------|---------|----------|--------| +| `/library/sections/{sectionId}/onDeck` | `GET` | On-deck items for this section | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/unwatched` | `GET` | Unwatched items | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/newest` | `GET` | Newest additions | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/byYear` | `GET` | Browse by year | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/byDecade` | `GET` | Browse by decade | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/byContentRating` | `GET` | Browse by content rating | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/byResolution` | `GET` | Browse by resolution | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/byFolder` | `GET` | Browse by folder | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/agents` | `GET` | Available agents for this section | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/match` | `GET` | Match items in section | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/unmatch` | `GET` | Unmatch items in section | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/edit` | `GET/PUT` | Edit section metadata | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/delete` | `DELETE` | Delete the section | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/move` | `PUT` | Move section paths | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/settings` | `GET` | Section-specific settings | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/playlists` | `GET` | Playlists belonging to section | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/hubs` | `GET` | Hubs for this section | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/timeline` | `GET` | Section timeline | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/search` | `GET` | Section-scoped search | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/tags` | `GET` | Tags in section | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/artists` | `GET` | Artists (music) | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/shows` | `GET` | Shows (TV) | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/episodes` | `GET` | Episodes | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/movies` | `GET` | Movies | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/clips` | `GET` | Clips | ❌ No | Community knowledge / client traffic | +| `/library/sections/{sectionId}/photos` | `GET` | Photos | ❌ No | Community knowledge / client traffic | + +### Missing sub-endpoints under `/library/metadata/{ratingKey}` + +The spec documents many (`/credits`, `/extras`, `/file`, `/index`, `/intro`, `/marker`, `/match`, `/matches`, `/merge`, `/nearest`, `/prefs`, `/refresh`, `/related`, `/similar`, `/split`, `/subtitles`, `/tree`, `/unmatch`, `/users/top`, `/voiceActivity`, `/augmentations/{augmentationId}`, `/media/{mediaItem}`, `/marker/{marker}`, `/nearest`, `/file`, `/parts/{partId}`, etc.). + +**Not documented:** + +| Path | Method | Purpose | In spec? | Source | +|------|--------|---------|----------|--------| +| `/library/metadata/{ratingKey}/children` | `GET` | Children of a show/season/artist/album | ❌ No | Client `key` attribute in metadata responses | +| `/library/metadata/{ratingKey}/onDeck` | `GET` | On-deck for this show/season | ❌ No | Client traffic | +| `/library/metadata/{ratingKey}/reviews` | `GET` | User reviews | ❌ No | Client traffic | +| `/library/metadata/{ratingKey}/parent` | `GET` | Parent metadata shortcut | ❌ No | Client traffic | +| `/library/metadata/{ratingKey}/grandparent` | `GET` | Grandparent metadata shortcut | ❌ No | Client traffic | + +### Undocumented query parameters for `/library/sections/{sectionId}/all` + +The spec only lists `includeMeta`, `includeGuids`, `sectionId`, `mediaQuery`, `X-Plex-Container-Start`, `X-Plex-Container-Size`. +The following params are widely used by official clients but **absent** from the spec: + +* **Type filtering:** `type` (`1`=movie, `2`=show, `3`=season, `4`=episode, `8`=artist, `9`=album, `10`=track, …) +* **Sorting:** `sort` (e.g. `titleSort`, `year`, `addedAt`, `lastViewedAt`, `viewCount`, `rating`) +* **Filters:** `filters`, `unwatched` (`1`) +* **Tag filters:** `genre`, `studio`, `contentRating`, `resolution`, `year`, `firstCharacter` +* **Include flags:** `includeCollections`, `includeExternalMedia`, `includeAdvanced`, `includeMeta`, `checkFiles`, `includeRelated`, `includeExtras`, `includePopularLeaves`, `includeConcerts`, `includeOnDeck`, `includeChapters`, `includePreferences`, `includeBandwidths`, `includeLoudnessRamps`, `includeStations`, `includeExternalIds`, `includeReviews`, `includeCredits`, `includeArt`, `includeThumb`, `includeBanner`, `includeTheme`, `includeFields` +* **Async flags:** `asyncAugmentMetadata`, `asyncRefreshLocalMediaAgent`, `nocache`, `excludeFields`, `skipRefresh` + +--- + +## Playback & Transcoder (hidden tuning params) + +### Player control endpoints (missing from spec entirely) + +The Plex Web app uses these to remotely control clients. They are **not** in the spec. + +| Path | Method | Purpose | +|------|--------|---------| +| `/player/playback/play` | `POST` | Start playback | +| `/player/playback/pause` | `POST` | Pause | +| `/player/playback/stop` | `POST` | Stop | +| `/player/playback/seek` | `POST` | Seek to time | +| `/player/playback/skipTo` | `POST` | Skip to item | +| `/player/playback/skipBy` | `POST` | Skip forward/backward | +| `/player/playback/stepForward` | `POST` | Step forward | +| `/player/playback/stepBack` | `POST` | Step back | +| `/player/playback/setParameters` | `POST` | Set playback params | +| `/player/playback/subtitleStream` | `POST` | Change subtitle stream | +| `/player/playback/audioStream` | `POST` | Change audio stream | +| `/player/playback/videoStream` | `POST` | Change video stream | +| `/player/playback/volume` | `POST` | Set volume | +| `/player/playback/mute` | `POST` | Mute | +| `/player/playback/unmute` | `POST` | Unmute | +| `/player/playback/setTextStream` | `POST` | Set text stream | +| `/player/playback/setRating` | `POST` | Rate item | +| `/player/playback/setViewOffset` | `POST` | Set resume offset | +| `/player/playback/setState` | `POST` | Set playback state | +| `/player/playback/refreshPlayQueue` | `POST` | Refresh play queue | +| `/player/playback/playMedia` | `POST` | Play specific media | + +**Auth:** Usually requires a `X-Plex-Target-Client-Identifier` header plus the controlling user’s `X-Plex-Token`. + +### Transcode session segments + +The spec documents `/{transcodeType}/:/transcode/universal/start.{extension}`, `/decision`, `/fallback`, `/subtitles`. +What is missing: + +| Path | Purpose | In spec? | Source | +|------|---------|----------|--------| +| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s` | DASH/HLS segment delivery | ❌ No | [UnicornTranscoder issue #136](https://github.com/UnicornTranscoder/UnicornTranscoder/issues/136) | +| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts` | HLS TS segment delivery | ❌ No | Community knowledge | +| `/music/:/transcode` | Audio transcode endpoint | ❌ No | Community knowledge | + +### Stream URL hidden parameters + +When requesting a direct-play or transcode stream URL, these query params are accepted but undocumented in the spec: + +* `maxVideoBitrate`, `videoResolution` +* `offset`, `copyts`, `protocol` +* `mediaIndex`, `partIndex` +* `platform`, `X-Plex-Token` + +Source: [Python PlexAPI base docs](https://python-plexapi.readthedocs.io/en/latest/modules/base.html) + +--- + +## Webhooks & Events + +### Configuration + +* `GET https://plex.tv/api/v2/user/webhooks` — list URLs. +* `POST https://plex.tv/api/v2/user/webhooks` — add a URL (body likely JSON with `url` field). + +### Payload format + +* **Content-Type:** `multipart/form-data` (not pure JSON). +* **Fields:** + * `payload` — JSON string containing `event`, `user`, `owner`, `Account`, `Server`, `Player`, `Metadata`. + * `thumb` — JPEG thumbnail (only for `media.play` and `media.rate`). +* **Events:** `media.play`, `media.pause`, `media.resume`, `media.stop`, `media.scrobble`, `media.rate`, `library.new`. + +Source: [Plex Support – Webhooks](https://support.plex.tv/articles/115002267687-webhooks/) + +### Sonos integration + +* `https://sonos.plex.tv` — Plex-to-Sonos control gateway. Routes through Plex remote access. Not in spec. +* Requires Plex Pass + linked Sonos account + remote access enabled. + +Source: [Python PlexAPI docs](https://python-plexapi.readthedocs.io/en/latest/introduction.html) + +--- + +## Legacy / Deprecated endpoints + +| Path | Status | Replacement | Source | +|------|--------|-------------|--------| +| `https://plex.tv/pins.xml` | Legacy XML PIN API | `https://plex.tv/api/v2/pins` | [plexargod repo](https://github.com/danielewood/plexargod) | +| `https://plex.tv/api/resources` | Legacy XML resources | `https://plex.tv/api/v2/resources` | [plexargod repo](https://github.com/danielewood/plexargod) | +| `https://plex.tv/api/users/` | Legacy XML friends | `https://plex.tv/api/v2/friends` | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://plex.tv/api/servers/{machineId}/shared_servers` | Legacy XML sharing | `https://plex.tv/api/v2/shared_servers` | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | +| `https://clients.plex.tv/devices.xml` | Legacy XML devices | `https://plex.tv/api/v2/resources` or JWT flow | [CVE-2025-34158 write-up](https://github.com/lufinkey/vulnerability-research/blob/main/CVE-2025-34158/README.md) | +| `https://metadata.provider.plex.tv/...` | Deprecated Oct 2025 | `https://discover.provider.plex.tv/...` | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | + +--- + +## XML vs JSON quirks + +| Behavior | Details | +|----------|---------| +| **Default format** | Most PMS endpoints return **XML** unless `Accept: application/json` is sent. | +| **plex.tv v2** | Generally returns **JSON** by default. | +| **Legacy endpoints** (`/pins.xml`, `/api/resources`, `/api/users/`) | Return **XML** only. | +| **Webhook payload** | JSON wrapped in a `multipart/form-data` field named `payload`; thumbnail delivered as a second file part. | +| **Empty responses** | Some `PUT`/`DELETE` endpoints return `204 No Content` with no body. | + +--- + +## Rate Limiting & Special Headers + +| Topic | Details | +|-------|---------| +| **JWT / Auth rate limits** | Plex Pro Week ’25 blog explicitly mentions built-in rate limiting on auth endpoints to prevent abuse. | [Plex Pro Week blog](https://www.plex.tv/blog/plex-pro-week-25-api-unlocked/) | +| **Claim loops** | `POST https://plex.tv/servers.xml` can return `429 Too Many Requests` if retried too aggressively. | [Plex Forum](https://forums.plex.tv/t/fresh-install-unable-to-claim-ubuntu/853466) | +| **Provider timeouts** | Custom metadata providers may be timed out by PMS if responses are slow; no documented timeout value. | [Plex Forum – Custom Metadata Providers](https://forums.plex.tv/t/announcement-custom-metadata-providers/934384?page=2) | +| **Required headers** | `X-Plex-Client-Identifier` is **mandatory** for PIN and JWT flows. `X-Plex-Token` can be passed as header or query param. | Community knowledge | +| **Client info headers** | `X-Plex-Product`, `X-Plex-Version`, `X-Plex-Platform`, `X-Plex-Platform-Version`, `X-Plex-Device`, `X-Plex-Model`, `X-Plex-Device-Vendor`, `X-Plex-Device-Name`, `X-Plex-Marketplace` are expected by most plex.tv endpoints. | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | + +--- + +## Summary: What should be added to the spec + +### High priority (missing blocks) + +1. **plex.tv API v2 surface** + * `/features`, `/friends`, `/home`, `/server`, `/users/signout`, `/users/password` + * `/pins`, `/pins/link`, `/ping` + * `/shared_servers`, `/sharings/{userId}`, `/home/users/restricted/{userId}` + * `/user/webhooks`, `/user/view_state_sync`, `/user/{uuid}/settings/opt_outs` + * `/server/access_tokens`, `/server/users/features` + * `/devices/{id}/certificate/*`, `/release_channels` + * **JWT auth sub-tree:** `clients.plex.tv/api/v2/auth/jwk`, `/nonce`, `/token`, `/keys` + +2. **Cloud providers** + * `discover.provider.plex.tv/library/search` + * `discover.provider.plex.tv/library/sections/watchlist/all` + * `discover.provider.plex.tv/actions/addToWatchlist` & `removeFromWatchlist` + * `vod.provider.plex.tv` & `music.provider.plex.tv` base paths + * Deprecated but historically important: `metadata.provider.plex.tv` watchlist endpoints (for migration docs) + +3. **Player control API** + * All `/player/playback/*` endpoints (play, pause, stop, seek, volume, stream selection, etc.) + +4. **Transcode segments** + * `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s` / `.ts` + * `/music/:/transcode` + +5. **Missing library section sub-endpoints** + * `/onDeck`, `/unwatched`, `/newest`, `/byYear`, `/byDecade`, `/byContentRating`, `/byResolution`, `/byFolder` + * `/agents`, `/match`, `/unmatch`, `/edit`, `/delete`, `/move`, `/settings` + * `/playlists`, `/hubs`, `/timeline`, `/search`, `/tags` + * `/artists`, `/shows`, `/episodes`, `/movies`, `/clips`, `/photos` + +6. **Missing metadata sub-endpoints** + * `/library/metadata/{id}/children`, `/onDeck`, `/reviews`, `/parent`, `/grandparent` + +7. **System & diagnostics** + * `/system/agents`, `/system/agents/{id}`, `/system/settings`, `/system/updates` + * `/diagnostics`, `/sync`, `/sync/items`, `/sync/queue`, `/transcode/sessions` + +### Medium priority (query params & schemas) + +8. **Expand `/library/sections/{sectionId}/all` parameters** + * `type`, `sort`, `filters`, `unwatched`, `genre`, `studio`, `contentRating`, `resolution`, `year`, `firstCharacter` + * `includeCollections`, `includeExternalMedia`, `includeAdvanced`, `checkFiles`, `includeRelated`, `includeExtras`, `includePopularLeaves`, `includeConcerts`, `includeOnDeck`, `includeChapters`, `includePreferences`, `includeBandwidths`, `includeLoudnessRamps`, `includeStations`, `includeExternalIds`, `includeReviews`, `includeCredits`, `includeArt`, `includeThumb`, `includeBanner`, `includeTheme`, `includeFields` + * `asyncAugmentMetadata`, `asyncRefreshLocalMediaAgent`, `nocache`, `excludeFields`, `skipRefresh` + +9. **Webhook schema** + * Document the `multipart/form-data` payload, event enum, and thumbnail attachment behavior. + +10. **Hidden preferences schema** + * Document the hidden `BoolInt` / `text` preferences accessible via `/:/prefs`. + +### Low priority (legacy / reference) + +11. **Legacy v1 endpoints** + * `POST /pins.xml`, `GET /pins/{id}`, `GET /api/resources`, `GET /api/users/`, `GET /api/servers/{machineId}`, `POST /api/servers/{machineId}/shared_servers`, `GET /clients.plex.tv/devices.xml` + * Useful for migration guides and backwards-compatibility notes. + +--- + +*End of research.* diff --git a/scripts/discovery/diff_analyzer.py b/scripts/discovery/diff_analyzer.py new file mode 100755 index 000000000..9dafd2f0b --- /dev/null +++ b/scripts/discovery/diff_analyzer.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python3 +""" +Diff Analyzer — Compare captured traffic against the OpenAPI spec. +Produces a structured gap report (JSON) of missing endpoints, methods, and query params. +""" + +import json +import os +import re +import sys +from collections import defaultdict +from urllib.parse import urlparse, parse_qs +import yaml + +SPEC_PATH = os.environ.get("SPEC_PATH", "plex-api-spec.yaml") +TRAFFIC_PATH = os.environ.get("TRAFFIC_PATH", "/tmp/traffic.jsonl") +REPORT_PATH = os.environ.get("REPORT_PATH", "/tmp/diff_report.json") + + +def load_spec(path): + with open(path, "r") as f: + return yaml.safe_load(f) + + +def normalize_path(path): + """Normalize URL path by replacing dynamic segments with placeholders.""" + # Collapse consecutive digits or UUID-like segments into {id} + # Plex uses numeric IDs, GUIDs, and string keys as path params + segments = [] + for seg in path.strip("/").split("/"): + if re.match(r"^\d+$", seg): + segments.append("{id}") + elif re.match(r"^[0-9a-fA-F-]{20,}$", seg): + segments.append("{guid}") + elif re.match(r"^[0-9a-zA-Z_-]{30,}$", seg): + # Likely a token or key + segments.append("{key}") + else: + segments.append(seg) + return "/" + "/".join(segments) + + +def extract_spec_paths(spec): + """Extract set of (normalized_path, method) from spec.""" + paths = spec.get("paths", {}) + spec_set = set() + for path, methods in paths.items(): + norm = normalize_path(path) + for method in methods: + if method.lower() in ("get", "post", "put", "delete", "patch", "options"): + spec_set.add((norm, method.upper())) + return spec_set + + +def extract_traffic_paths(traffic_path): + """Extract set of (normalized_path, method) from captured traffic.""" + traffic_set = set() + path_methods = defaultdict(set) + path_params = defaultdict(set) + with open(traffic_path, "r") as f: + for line in f: + line = line.strip() + if not line: + continue + entry = json.loads(line) + raw_path = urlparse(entry["path"]).path + norm = normalize_path(raw_path) + method = entry["method"].upper() + traffic_set.add((norm, method)) + path_methods[norm].add(method) + + # Track query params + qs = parse_qs(urlparse(entry["path"]).query) + for key in qs: + path_params[(norm, method)].add(key) + return traffic_set, path_methods, path_params + + +def build_report(spec_set, traffic_set, path_methods, path_params, spec): + missing_in_spec = traffic_set - spec_set + # Also check for methods on known paths that are missing + missing_methods = [] + for (norm_path, method) in missing_in_spec: + missing_methods.append({ + "path": norm_path, + "method": method, + "query_params_seen": sorted(path_params.get((norm_path, method), [])), + }) + + # Identify paths in spec never hit during capture (potential dead code or untested) + spec_only = spec_set - traffic_set + + # Query param gaps: for paths+methods present in both, which query params are missing from spec? + spec_paths_obj = spec.get("paths", {}) + param_gaps = [] + for (norm_path, method) in (spec_set & traffic_set): + # Find the actual spec path that matches norm_path + spec_entry = None + for spath, smethods in spec_paths_obj.items(): + if normalize_path(spath) == norm_path and method.lower() in smethods: + spec_entry = smethods[method.lower()] + break + if not spec_entry: + continue + spec_params = set() + for p in spec_entry.get("parameters", []): + if p.get("in") == "query": + spec_params.add(p.get("name")) + seen_params = path_params.get((norm_path, method), set()) + missing_params = seen_params - spec_params + if missing_params: + param_gaps.append({ + "path": norm_path, + "method": method, + "missing_query_params": sorted(missing_params), + }) + + return { + "summary": { + "endpoints_in_spec": len(spec_set), + "endpoints_captured": len(traffic_set), + "missing_from_spec": len(missing_methods), + "untested_in_spec": len(spec_only), + "query_param_gaps": len(param_gaps), + }, + "missing_endpoints": sorted(missing_methods, key=lambda x: (x["path"], x["method"])), + "untested_endpoints": sorted([{"path": p, "method": m} for p, m in spec_only], key=lambda x: (x["path"], x["method"])), + "query_param_gaps": sorted(param_gaps, key=lambda x: (x["path"], x["method"])), + } + + +def main(): + if not os.path.exists(TRAFFIC_PATH): + print(f"Traffic file not found: {TRAFFIC_PATH}", file=sys.stderr) + sys.exit(1) + if not os.path.exists(SPEC_PATH): + print(f"Spec file not found: {SPEC_PATH}", file=sys.stderr) + sys.exit(1) + + spec = load_spec(SPEC_PATH) + spec_set = extract_spec_paths(spec) + traffic_set, path_methods, path_params = extract_traffic_paths(TRAFFIC_PATH) + + report = build_report(spec_set, traffic_set, path_methods, path_params, spec) + + with open(REPORT_PATH, "w") as f: + json.dump(report, f, indent=2) + + print(json.dumps(report["summary"], indent=2)) + missing = report["summary"]["missing_from_spec"] + print(f"\nDiff report written to {REPORT_PATH}") + if missing > 0: + print(f"WARNING: {missing} captured endpoint(s) missing from spec.") + sys.exit(2) + else: + print("All captured endpoints are documented in the spec.") + + +if __name__ == "__main__": + main() diff --git a/scripts/discovery/generate_traffic.py b/scripts/discovery/generate_traffic.py new file mode 100755 index 000000000..3f6fb7e27 --- /dev/null +++ b/scripts/discovery/generate_traffic.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python3 +""" +Synthetic traffic generator for Plex Media Server. +Exercises a broad set of endpoints through the Arbiter proxy to maximize +coverage for the discovery/diff pipeline. +""" + +import argparse +import sys +import time +import urllib.request +import urllib.error +import json + + +def fetch(base: str, path: str, method: str = "GET", headers: dict = None, data: bytes = None): + """Make a request and return (status, body).""" + url = f"{base}{path}" + req = urllib.request.Request(url, method=method, data=data) + if headers: + for k, v in headers.items(): + req.add_header(k, v) + try: + with urllib.request.urlopen(req, timeout=10) as resp: + body = resp.read().decode("utf-8", errors="replace") + return resp.status, body + except urllib.error.HTTPError as e: + body = e.read().decode("utf-8", errors="replace") if e.fp else "" + return e.code, body + except Exception as e: + return 0, str(e) + + +def run(base: str, token: str = None): + headers = {} + if token: + headers["X-Plex-Token"] = token + + endpoints = [ + # Core identity & status + ("GET", "/identity"), + ("GET", "/"), + ("GET", "/status"), + ("GET", "/status/sessions"), + ("GET", "/status/sessions/history"), + ("GET", "/status/transcodes/active"), + + # Library + ("GET", "/library"), + ("GET", "/library/sections"), + ("GET", "/library/onDeck"), + ("GET", "/library/recentlyAdded"), + ("GET", "/library/search?query=test"), + + # System + ("GET", "/system/agents"), + ("GET", "/system/devices"), + ("GET", "/system/updates"), + + # Accounts & users + ("GET", "/accounts"), + ("GET", "/myplex/account"), + ("GET", "/home/users"), + + # Media providers + ("GET", "/media/providers"), + ("GET", "/media/providers/search?query=test"), + + # Hubs + ("GET", "/hubs"), + ("GET", "/hubs/home"), + ("GET", "/hubs/home/recentlyAdded"), + ("GET", "/hubs/sections/all"), + + # Clients & resources + ("GET", "/clients"), + ("GET", "/resources"), + ("GET", "/servers"), + ("GET", "/devices"), + + # Channels & plugins + ("GET", "/channels/all"), + ("GET", "/channels/recentlyViewed"), + + # Playlists + ("GET", "/playlists"), + + # Sync + ("GET", "/sync/items"), + ("GET", "/sync/transcodeQueue"), + + # Butlers & tasks + ("GET", "/butler"), + ("GET", "/butler/tasks"), + ("GET", "/butler/statistics"), + + # Preferences & settings + ("GET", "/:/prefs"), + ("GET", "/:/plugins"), + ("GET", "/:/prefs?X-Plex-Token=dummy"), + + # Statistics + ("GET", "/statistics/resources"), + ("GET", "/statistics/bandwidth"), + + # Services + ("GET", "/services/browse"), + + # Photo transcoder + ("GET", "/photo/:/transcode?url=/&width=100&height=100"), + + # Timeline + ("GET", "/player/timeline/poll"), + + # Diagnostics + ("GET", "/diagnostics/logs"), + ("GET", "/diagnostics/sections"), + + # Actions + ("POST", "/actions/scan"), + ("POST", "/actions/scan?force=1"), + ("GET", "/actions/generateMediaIndex"), + + # WebSocket (upgrade only; proxy captures the upgrade) + # This will 400 without WS upgrade headers but still registers the path + ("GET", "/:/websockets/notifications"), + ] + + print(f"[TRAFFIC] Hitting {len(endpoints)} endpoints via {base} ...", file=sys.stderr) + for method, path in endpoints: + status, body = fetch(base, path, method=method, headers=headers) + indicator = "✓" if status == 200 else "○" if status in (401, 403) else "✗" + print(f" {indicator} {method} {path} -> {status}", file=sys.stderr) + time.sleep(0.1) + + print("[TRAFFIC] Done.", file=sys.stderr) + + +def main(): + parser = argparse.ArgumentParser(description="Generate synthetic Plex traffic") + parser.add_argument("--base", default="http://localhost:8080", help="Proxy base URL") + parser.add_argument("--token", default=None, help="X-Plex-Token for authenticated requests") + args = parser.parse_args() + run(args.base, args.token) + + +if __name__ == "__main__": + main() diff --git a/scripts/discovery/run_discovery.py b/scripts/discovery/run_discovery.py new file mode 100755 index 000000000..d7fcda58e --- /dev/null +++ b/scripts/discovery/run_discovery.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +""" +Orchestrates the full discovery pipeline using Arbiter as the proxy: + 1. Start Arbiter + PMS via docker-compose + 2. Wait for PMS and Arbiter docs server health + 3. Run synthetic traffic generator + 4. Fetch traffic.jsonl and diff report from Arbiter + 5. Stop services + 6. Run local diff_analyzer on captured traffic + 7. Output report and exit with appropriate code +""" + +import os +import subprocess +import sys +import time +import json +import urllib.request + +COMPOSE_FILE = os.environ.get("COMPOSE_FILE", "docker-compose.yml") +REPORT_PATH = os.environ.get("REPORT_PATH", "/tmp/diff_report.json") +TRAFFIC_PATH = os.environ.get("TRAFFIC_PATH", "/tmp/traffic.jsonl") +ARBITER_DOCS_URL = "http://localhost:9000" + +def run(cmd, check=True): + print(f"[DISCOVERY] {' '.join(cmd)}", file=sys.stderr) + return subprocess.run(cmd, check=check) + +def wait_for_url(url, timeout=180): + print(f"[DISCOVERY] Waiting for {url} ...", file=sys.stderr) + for i in range(timeout): + try: + with urllib.request.urlopen(url, timeout=5) as resp: + if resp.status == 200: + print(f"[DISCOVERY] {url} is up.", file=sys.stderr) + return True + except Exception: + pass + time.sleep(1) + print(f"[DISCOVERY] {url} failed to respond.", file=sys.stderr) + return False + +def fetch_jsonl(): + url = f"{ARBITER_DOCS_URL}/traffic.jsonl" + print(f"[DISCOVERY] Fetching traffic from {url} ...", file=sys.stderr) + try: + with urllib.request.urlopen(url, timeout=30) as resp: + with open(TRAFFIC_PATH, "wb") as f: + f.write(resp.read()) + print(f"[DISCOVERY] Traffic saved to {TRAFFIC_PATH}", file=sys.stderr) + return True + except Exception as e: + print(f"[DISCOVERY] Failed to fetch traffic: {e}", file=sys.stderr) + return False + +def fetch_diff(): + url = f"{ARBITER_DOCS_URL}/diff" + print(f"[DISCOVERY] Fetching diff from {url} ...", file=sys.stderr) + try: + with urllib.request.urlopen(url, timeout=30) as resp: + data = json.loads(resp.read()) + with open(REPORT_PATH, "w") as f: + json.dump(data, f, indent=2) + print(f"[DISCOVERY] Diff report saved to {REPORT_PATH}", file=sys.stderr) + return data + except Exception as e: + print(f"[DISCOVERY] Failed to fetch diff: {e}", file=sys.stderr) + return None + +def main(): + os.chdir(os.path.dirname(os.path.abspath(__file__))) + os.chdir("../..") # Back to project root + + # 1. Start services + run(["docker", "compose", "-f", COMPOSE_FILE, "up", "-d"]) + + # 2. Wait for PMS and Arbiter + pms_ok = wait_for_url("http://localhost:32400/identity") + arbiter_ok = wait_for_url(f"{ARBITER_DOCS_URL}/openapi.json", timeout=60) + + if not pms_ok: + run(["docker", "compose", "-f", COMPOSE_FILE, "logs", "pms"]) + run(["docker", "compose", "-f", COMPOSE_FILE, "down"]) + sys.exit(1) + + if not arbiter_ok: + run(["docker", "compose", "-f", COMPOSE_FILE, "logs", "proxy"]) + run(["docker", "compose", "-f", COMPOSE_FILE, "down"]) + sys.exit(1) + + # 3. Run synthetic traffic generator + print("[DISCOVERY] Running synthetic traffic generator...", file=sys.stderr) + result = subprocess.run([ + sys.executable, + "scripts/discovery/generate_traffic.py", + "--base", "http://localhost:8080", + ]) + if result.returncode != 0: + print("[DISCOVERY] Traffic generation failed, continuing anyway...", file=sys.stderr) + + # 4. Fetch outputs from Arbiter + fetch_jsonl() + arbiter_diff = fetch_diff() + + # 5. Stop services + run(["docker", "compose", "-f", COMPOSE_FILE, "down"]) + + # 6. Run local diff analyzer as fallback / cross-check + print("[DISCOVERY] Running local diff analyzer...", file=sys.stderr) + result = subprocess.run([sys.executable, "scripts/discovery/diff_analyzer.py"]) + + # 7. Output report summary + if os.path.exists(REPORT_PATH): + with open(REPORT_PATH) as f: + report = json.load(f) + print(json.dumps(report.get("summary", report), indent=2)) + elif arbiter_diff: + print(json.dumps(arbiter_diff.get("summary", arbiter_diff), indent=2)) + + sys.exit(result.returncode) + +if __name__ == "__main__": + main() diff --git a/scripts/extract_schemas.py b/scripts/extract_schemas.py new file mode 100644 index 000000000..3965e49d9 --- /dev/null +++ b/scripts/extract_schemas.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python3 +""" +Extract inline schemas from plex-api-spec.yaml into reusable components. +Run from repo root: python scripts/extract_schemas.py +""" + +import yaml +from copy import deepcopy + +SPEC_PATH = "plex-api-spec.yaml" + + +def load_spec(): + with open(SPEC_PATH, "r") as f: + return yaml.safe_load(f) + + +def save_spec(spec): + with open(SPEC_PATH, "w") as f: + yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) + + +def extract_activity(spec): + """Extract Activity inline schema from /activities GET 200 response.""" + items = spec["paths"]["/activities"]["get"]["responses"]["200"]["content"][ + "application/json" + ]["schema"]["properties"]["MediaContainer"]["allOf"][0]["properties"]["Activity"][ + "items" + ] + spec["components"]["schemas"]["Activity"] = items + spec["paths"]["/activities"]["get"]["responses"]["200"]["content"][ + "application/json" + ]["schema"]["properties"]["MediaContainer"]["allOf"][0]["properties"]["Activity"][ + "items" + ] = {"$ref": "#/components/schemas/Activity"} + print("Extracted Activity schema") + + +def extract_butler_task(spec): + """Extract ButlerTask inline schema from /butler GET 200 response.""" + items = spec["paths"]["/butler"]["get"]["responses"]["200"]["content"][ + "application/json" + ]["schema"]["properties"]["ButlerTasks"]["properties"]["ButlerTask"]["items"] + spec["components"]["schemas"]["ButlerTask"] = items + spec["paths"]["/butler"]["get"]["responses"]["200"]["content"][ + "application/json" + ]["schema"]["properties"]["ButlerTasks"]["properties"]["ButlerTask"]["items"] = { + "$ref": "#/components/schemas/ButlerTask" + } + print("Extracted ButlerTask schema") + + +def extract_updater_release(spec): + """Extract Release inline schema from /updater/status GET 200 response.""" + items = spec["paths"]["/updater/status"]["get"]["responses"]["200"]["content"][ + "application/json" + ]["schema"]["properties"]["MediaContainer"]["allOf"][0]["properties"]["Release"][ + "items" + ] + spec["components"]["schemas"]["UpdaterRelease"] = items + spec["paths"]["/updater/status"]["get"]["responses"]["200"]["content"][ + "application/json" + ]["schema"]["properties"]["MediaContainer"]["allOf"][0]["properties"]["Release"][ + "items" + ] = {"$ref": "#/components/schemas/UpdaterRelease"} + print("Extracted UpdaterRelease schema") + + +def extract_download_queue(spec): + """Extract DownloadQueue inline schema from POST /downloadQueue 200 response.""" + schema = spec["paths"]["/downloadQueue"]["post"]["responses"]["200"]["content"][ + "application/json" + ]["schema"]["properties"]["MediaContainer"]["allOf"][1]["properties"]["DownloadQueue"] + spec["components"]["schemas"]["DownloadQueue"] = schema + spec["paths"]["/downloadQueue"]["post"]["responses"]["200"]["content"][ + "application/json" + ]["schema"]["properties"]["MediaContainer"]["allOf"][1]["properties"][ + "DownloadQueue" + ] = {"$ref": "#/components/schemas/DownloadQueue"} + print("Extracted DownloadQueue schema") + + +def extract_download_queue_item(spec): + """Extract DownloadQueueItem inline schema from GET /downloadQueue/{queueId}/items.""" + items = spec["paths"]["/downloadQueue/{queueId}/items"]["get"]["responses"]["200"][ + "content" + ]["application/json"]["schema"]["properties"]["MediaContainer"]["allOf"][1][ + "properties" + ]["DownloadQueueItem"]["items"] + spec["components"]["schemas"]["DownloadQueueItem"] = items + spec["paths"]["/downloadQueue/{queueId}/items"]["get"]["responses"]["200"][ + "content" + ]["application/json"]["schema"]["properties"]["MediaContainer"]["allOf"][1][ + "properties" + ]["DownloadQueueItem"]["items"] = {"$ref": "#/components/schemas/DownloadQueueItem"} + print("Extracted DownloadQueueItem schema") + + +def extract_media_grabber(spec): + """Extract MediaGrabber inline schema from GET /media/grabbers.""" + items = spec["paths"]["/media/grabbers"]["get"]["responses"]["200"]["content"][ + "application/json" + ]["schema"]["properties"]["MediaContainer"]["allOf"][1]["properties"][ + "MediaGrabber" + ]["items"] + spec["components"]["schemas"]["MediaGrabber"] = items + spec["paths"]["/media/grabbers"]["get"]["responses"]["200"]["content"][ + "application/json" + ]["schema"]["properties"]["MediaContainer"]["allOf"][1]["properties"][ + "MediaGrabber" + ]["items"] = {"$ref": "#/components/schemas/MediaGrabber"} + print("Extracted MediaGrabber schema") + + +def extract_device_channel(spec): + """Extract DeviceChannel inline schema from GET /media/grabbers/devices/{deviceId}/channels.""" + items = spec["paths"]["/media/grabbers/devices/{deviceId}/channels"]["get"][ + "responses" + ]["200"]["content"]["application/json"]["schema"]["properties"]["MediaContainer"][ + "allOf" + ][1]["properties"]["DeviceChannel"]["items"] + spec["components"]["schemas"]["DeviceChannel"] = items + spec["paths"]["/media/grabbers/devices/{deviceId}/channels"]["get"]["responses"][ + "200" + ]["content"]["application/json"]["schema"]["properties"]["MediaContainer"][ + "allOf" + ][1]["properties"]["DeviceChannel"]["items"] = { + "$ref": "#/components/schemas/DeviceChannel" + } + print("Extracted DeviceChannel schema") + + +def main(): + spec = load_spec() + extract_activity(spec) + extract_butler_task(spec) + extract_updater_release(spec) + extract_download_queue(spec) + extract_download_queue_item(spec) + extract_media_grabber(spec) + extract_device_channel(spec) + save_spec(spec) + print(f"Saved {SPEC_PATH}") + + +if __name__ == "__main__": + main() diff --git a/scripts/phase2_backfill.py b/scripts/phase2_backfill.py new file mode 100644 index 000000000..2cae7391d --- /dev/null +++ b/scripts/phase2_backfill.py @@ -0,0 +1,737 @@ +#!/usr/bin/env python3 +""" +Phase 2: Critical Path Backfill +Adds missing CRITICAL/HIGH priority endpoints and schemas to plex-api-spec.yaml. +""" + +import yaml +from copy import deepcopy + +SPEC_PATH = "plex-api-spec.yaml" + + +def load_spec(): + with open(SPEC_PATH, "r") as f: + return yaml.safe_load(f) + + +def save_spec(spec): + with open(SPEC_PATH, "w") as f: + yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) + + +def add_schemas(spec): + """Add WebSocket/Event schemas and other missing reusable schemas.""" + schemas = spec.setdefault("components", {}).setdefault("schemas", {}) + + schemas["NotificationContainer"] = { + "type": "object", + "properties": { + "type": {"type": "string", "description": "The notification type"}, + "size": {"type": "integer", "description": "Number of notifications"}, + "PlaySessionStateNotification": { + "type": "array", + "items": {"$ref": "#/components/schemas/PlaySessionStateNotification"}, + }, + "StatusNotification": { + "type": "array", + "items": {"$ref": "#/components/schemas/StatusNotification"}, + }, + "ReachabilityNotification": { + "type": "array", + "items": {"$ref": "#/components/schemas/ReachabilityNotification"}, + }, + "TimelineEntry": { + "type": "array", + "items": {"$ref": "#/components/schemas/TimelineEntry"}, + }, + }, + } + + schemas["PlaySessionStateNotification"] = { + "type": "object", + "description": "Real-time playback state change notification", + "properties": { + "sessionKey": {"type": "string"}, + "guid": {"type": "string"}, + "ratingKey": {"type": "string"}, + "url": {"type": "string"}, + "key": {"type": "string"}, + "viewOffset": {"type": "integer"}, + "playQueueItemID": {"type": "integer"}, + "playQueueID": {"type": "integer"}, + "state": {"type": "string", "enum": ["playing", "paused", "stopped"]}, + "transcodeSession": {"type": "string"}, + "controllable": {"type": "string"}, + }, + } + + schemas["StatusNotification"] = { + "type": "object", + "description": "Server status notification (e.g. library scan complete)", + "properties": { + "title": {"type": "string"}, + "description": {"type": "string"}, + "type": {"type": "string"}, + }, + } + + schemas["ReachabilityNotification"] = { + "type": "object", + "description": "Server reachability status change notification", + "properties": { + "status": {"type": "string"}, + }, + } + + schemas["TimelineEntry"] = { + "type": "object", + "description": "A timeline update entry delivered via WebSocket or EventSource", + "properties": { + "itemID": {"type": "integer"}, + "type": {"type": "integer"}, + "title": {"type": "string"}, + "state": {"type": "integer"}, + "playQueueItemID": {"type": "integer"}, + "metadataState": {"type": "string"}, + }, + } + + print("Added event/notification schemas") + + +def add_plex_tv_endpoints(spec): + """Add missing plex.tv v2 authentication and account endpoints.""" + paths = spec.setdefault("paths", {}) + + # Common X-Plex parameter references + x_plex_params = [ + {"$ref": "#/components/parameters/accepts"}, + {"$ref": "#/components/parameters/X-Plex-Client-Identifier"}, + {"$ref": "#/components/parameters/X-Plex-Product"}, + {"$ref": "#/components/parameters/X-Plex-Version"}, + {"$ref": "#/components/parameters/X-Plex-Platform"}, + {"$ref": "#/components/parameters/X-Plex-Platform-Version"}, + {"$ref": "#/components/parameters/X-Plex-Device"}, + {"$ref": "#/components/parameters/X-Plex-Model"}, + {"$ref": "#/components/parameters/X-Plex-Device-Vendor"}, + {"$ref": "#/components/parameters/X-Plex-Device-Name"}, + {"$ref": "#/components/parameters/X-Plex-Marketplace"}, + ] + + # Standard 200 response for simple OK + ok_200 = {"description": "OK"} + bad_request = {"$ref": "#/components/responses/400"} + unauthorized = {"$ref": "#/components/responses/401"} + + # OAuth PIN Flow + paths.setdefault("/pins", {}) + paths["/pins"] = { + "post": { + "operationId": "createOAuthPin", + "summary": "Create OAuth PIN", + "description": "Create a 4-character PIN for device linking via OAuth. The user must visit https://plex.tv/link and enter the PIN to authorize the device.", + "tags": ["Authentication"], + "servers": [{"url": "https://plex.tv/api/v2"}], + "security": [{"clientIdentifier": []}], + "parameters": deepcopy(x_plex_params), + "responses": { + "200": { + "description": "PIN created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": {"type": "integer"}, + "code": {"type": "string"}, + "product": {"type": "string"}, + "trusted": {"type": "boolean"}, + "qr": {"type": "string"}, + "clientIdentifier": {"type": "string"}, + "expiresIn": {"type": "integer"}, + "createdAt": {"type": "string"}, + "expiresAt": {"type": "string"}, + "authToken": {"type": "string", "nullable": True}, + "newRegistration": {"type": "boolean"}, + }, + } + } + }, + }, + "400": deepcopy(bad_request), + "401": deepcopy(unauthorized), + }, + } + } + + paths.setdefault("/pins/{pinId}", {}) + paths["/pins/{pinId}"] = { + "get": { + "operationId": "getOAuthPin", + "summary": "Get OAuth PIN Status", + "description": "Poll the PIN status. Returns authToken when the user has linked the device.", + "tags": ["Authentication"], + "servers": [{"url": "https://plex.tv/api/v2"}], + "security": [{"clientIdentifier": []}], + "parameters": deepcopy(x_plex_params) + + [ + { + "name": "pinId", + "in": "path", + "required": True, + "schema": {"type": "integer"}, + } + ], + "responses": { + "200": { + "description": "PIN status", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": {"type": "integer"}, + "code": {"type": "string"}, + "product": {"type": "string"}, + "trusted": {"type": "boolean"}, + "qr": {"type": "string"}, + "clientIdentifier": {"type": "string"}, + "expiresIn": {"type": "integer"}, + "createdAt": {"type": "string"}, + "expiresAt": {"type": "string"}, + "authToken": {"type": "string", "nullable": True}, + "newRegistration": {"type": "boolean"}, + "pmsIdentifier": {"type": "string", "nullable": True}, + "pmsVersion": {"type": "string", "nullable": True}, + }, + } + } + }, + }, + "400": deepcopy(bad_request), + "401": deepcopy(unauthorized), + }, + } + } + + # Sign out + paths.setdefault("/users/signout", {}) + paths["/users/signout"] = { + "delete": { + "operationId": "signOut", + "summary": "Sign Out", + "description": "Invalidate the current authentication token.", + "tags": ["Authentication"], + "servers": [{"url": "https://plex.tv/api/v2"}], + "parameters": deepcopy(x_plex_params), + "responses": {"200": ok_200, "400": deepcopy(bad_request)}, + } + } + + # Ping + paths.setdefault("/ping", {}) + paths["/ping"] = { + "get": { + "operationId": "ping", + "summary": "Ping", + "description": "Health / latency check. No authentication required.", + "tags": ["Authentication"], + "servers": [{"url": "https://plex.tv/api/v2"}], + "security": [], + "responses": {"200": ok_200}, + } + } + + # Friends + paths.setdefault("/friends", {}) + paths["/friends"] = { + "get": { + "operationId": "getFriends", + "summary": "Get Friends", + "description": "Get the list of friends and shared users.", + "tags": ["Users"], + "servers": [{"url": "https://plex.tv/api/v2"}], + "parameters": deepcopy(x_plex_params), + "responses": { + "200": { + "description": "List of friends", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": {"type": "integer"}, + "uuid": {"type": "string"}, + "title": {"type": "string"}, + "username": {"type": "string"}, + "email": {"type": "string"}, + "thumb": {"type": "string"}, + }, + }, + } + }, + } + } + }, + }, + "400": deepcopy(bad_request), + "401": deepcopy(unauthorized), + }, + } + } + + print("Added plex.tv auth/account endpoints") + + +def add_core_pms_endpoints(spec): + """Add critical missing PMS local endpoints.""" + paths = spec.setdefault("paths", {}) + + x_plex_params = [ + {"$ref": "#/components/parameters/accepts"}, + {"$ref": "#/components/parameters/X-Plex-Client-Identifier"}, + {"$ref": "#/components/parameters/X-Plex-Product"}, + {"$ref": "#/components/parameters/X-Plex-Version"}, + {"$ref": "#/components/parameters/X-Plex-Platform"}, + {"$ref": "#/components/parameters/X-Plex-Platform-Version"}, + {"$ref": "#/components/parameters/X-Plex-Device"}, + {"$ref": "#/components/parameters/X-Plex-Model"}, + {"$ref": "#/components/parameters/X-Plex-Device-Vendor"}, + {"$ref": "#/components/parameters/X-Plex-Device-Name"}, + {"$ref": "#/components/parameters/X-Plex-Marketplace"}, + ] + + ok_200 = {"description": "OK"} + + # /clients + paths.setdefault("/clients", {}) + paths["/clients"] = { + "get": { + "operationId": "getClients", + "summary": "Get Clients", + "description": "Get a list of connected Plex clients.", + "tags": ["General"], + "parameters": deepcopy(x_plex_params), + "responses": { + "200": { + "description": "List of clients", + "content": { + "application/json": { + "schema": { + "allOf": [ + {"$ref": "#/components/schemas/MediaContainer"}, + { + "type": "object", + "properties": { + "Server": { + "type": "array", + "items": {"$ref": "#/components/schemas/PlexDevice"}, + } + }, + }, + ] + } + } + }, + } + }, + } + } + + # /accounts + paths.setdefault("/accounts", {}) + paths["/accounts"] = { + "get": { + "operationId": "getSystemAccounts", + "summary": "Get System Accounts", + "description": "Get a list of local system accounts.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x_plex_params), + "responses": {"200": ok_200}, + } + } + + # /devices + paths.setdefault("/devices", {}) + paths["/devices"] = { + "get": { + "operationId": "getSystemDevices", + "summary": "Get System Devices", + "description": "Get a list of local system devices.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x_plex_params), + "responses": {"200": ok_200}, + } + } + + # /servers + paths.setdefault("/servers", {}) + paths["/servers"] = { + "get": { + "operationId": "getLocalServers", + "summary": "Get Local Servers", + "description": "Get a list of local servers.", + "tags": ["General"], + "parameters": deepcopy(x_plex_params), + "responses": {"200": ok_200}, + } + } + + # /library/sections/{sectionId}/onDeck + paths.setdefault("/library/sections/{sectionId}/onDeck", {}) + paths["/library/sections/{sectionId}/onDeck"] = { + "get": { + "operationId": "getOnDeck", + "summary": "Get On Deck", + "description": "Get On Deck items for a library section.", + "tags": ["Library"], + "parameters": deepcopy(x_plex_params) + + [ + { + "name": "sectionId", + "in": "path", + "required": True, + "schema": {"type": "integer"}, + } + ], + "responses": { + "200": { + "description": "On Deck items", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/MediaContainerWithMetadata"} + } + }, + } + }, + } + } + + # /library/sections/{sectionId}/recentlyAdded + paths.setdefault("/library/sections/{sectionId}/recentlyAdded", {}) + paths["/library/sections/{sectionId}/recentlyAdded"] = { + "get": { + "operationId": "getRecentlyAddedBySection", + "summary": "Get Recently Added by Section", + "description": "Get recently added items for a specific library section.", + "tags": ["Library"], + "parameters": deepcopy(x_plex_params) + + [ + { + "name": "sectionId", + "in": "path", + "required": True, + "schema": {"type": "integer"}, + } + ], + "responses": { + "200": { + "description": "Recently added items", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/MediaContainerWithMetadata"} + } + }, + } + }, + } + } + + # /library/recentlyAdded + paths.setdefault("/library/recentlyAdded", {}) + paths["/library/recentlyAdded"] = { + "get": { + "operationId": "getRecentlyAdded", + "summary": "Get Recently Added", + "description": "Get globally recently added items across all libraries.", + "tags": ["Library"], + "parameters": deepcopy(x_plex_params), + "responses": { + "200": { + "description": "Recently added items", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/MediaContainerWithMetadata"} + } + }, + } + }, + } + } + + # /hubs/home/recentlyAdded + paths.setdefault("/hubs/home/recentlyAdded", {}) + paths["/hubs/home/recentlyAdded"] = { + "get": { + "operationId": "getHomeRecentlyAdded", + "summary": "Get Home Recently Added", + "description": "Get hub-centric recently added items.", + "tags": ["Hubs"], + "parameters": deepcopy(x_plex_params), + "responses": { + "200": { + "description": "Recently added hub items", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/MediaContainerWithHubs"} + } + }, + } + }, + } + } + + # /system/agents + paths.setdefault("/system/agents", {}) + paths["/system/agents"] = { + "get": { + "operationId": "getMetadataAgents", + "summary": "Get Metadata Agents", + "description": "Get a list of available metadata agents.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x_plex_params), + "responses": {"200": ok_200}, + } + } + + # /actions/removeFromContinueWatching + paths.setdefault("/actions/removeFromContinueWatching", {}) + paths["/actions/removeFromContinueWatching"] = { + "put": { + "operationId": "removeFromContinueWatching", + "summary": "Remove from Continue Watching", + "description": "Remove an item from the Continue Watching hub.", + "tags": ["General"], + "parameters": deepcopy(x_plex_params) + + [ + { + "name": "ratingKey", + "in": "query", + "required": True, + "schema": {"type": "string"}, + } + ], + "responses": {"200": ok_200}, + } + } + + print("Added core PMS missing endpoints") + + +def add_cloud_provider_endpoints(spec): + """Add Plex Discover / Cloud provider endpoints.""" + paths = spec.setdefault("paths", {}) + + x_plex_params = [ + {"$ref": "#/components/parameters/accepts"}, + {"$ref": "#/components/parameters/X-Plex-Client-Identifier"}, + {"$ref": "#/components/parameters/X-Plex-Product"}, + {"$ref": "#/components/parameters/X-Plex-Version"}, + {"$ref": "#/components/parameters/X-Plex-Platform"}, + {"$ref": "#/components/parameters/X-Plex-Platform-Version"}, + {"$ref": "#/components/parameters/X-Plex-Device"}, + {"$ref": "#/components/parameters/X-Plex-Model"}, + {"$ref": "#/components/parameters/X-Plex-Device-Vendor"}, + {"$ref": "#/components/parameters/X-Plex-Device-Name"}, + {"$ref": "#/components/parameters/X-Plex-Marketplace"}, + ] + + ok_200 = {"description": "OK"} + bad_request = {"$ref": "#/components/responses/400"} + unauthorized = {"$ref": "#/components/responses/401"} + + # Discover search + paths.setdefault("/library/search", {}) + paths["/library/search"] = { + "get": { + "operationId": "searchDiscover", + "summary": "Search Discover", + "description": "Search movies and shows in Plex Discover.", + "tags": ["Provider"], + "servers": [{"url": "https://discover.provider.plex.tv"}], + "parameters": deepcopy(x_plex_params) + + [ + { + "name": "query", + "in": "query", + "schema": {"type": "string"}, + }, + { + "name": "limit", + "in": "query", + "schema": {"type": "integer", "default": 10}, + }, + { + "name": "searchTypes", + "in": "query", + "schema": {"type": "string", "example": "movies,tv"}, + }, + { + "name": "searchProviders", + "in": "query", + "schema": { + "type": "string", + "example": "discover,PLEXAVOD,PLEXTVOD", + }, + }, + { + "name": "includeMetadata", + "in": "query", + "schema": {"type": "integer", "default": 1}, + }, + ], + "responses": { + "200": ok_200, + "400": deepcopy(bad_request), + "401": deepcopy(unauthorized), + }, + } + } + + # Discover watchlist + paths.setdefault("/library/sections/watchlist/all", {}) + paths["/library/sections/watchlist/all"] = { + "get": { + "operationId": "getWatchlist", + "summary": "Get Watchlist", + "description": "Get the user's Plex Discover watchlist.", + "tags": ["Provider"], + "servers": [{"url": "https://discover.provider.plex.tv"}], + "parameters": deepcopy(x_plex_params), + "responses": { + "200": { + "description": "Watchlist items", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/MediaContainerWithMetadata"} + } + }, + }, + "400": deepcopy(bad_request), + "401": deepcopy(unauthorized), + }, + } + } + + # Add to watchlist + paths.setdefault("/actions/addToWatchlist", {}) + paths["/actions/addToWatchlist"] = { + "post": { + "operationId": "addToWatchlist", + "summary": "Add to Watchlist", + "description": "Add an item to the user's Plex Discover watchlist.", + "tags": ["Provider"], + "servers": [{"url": "https://discover.provider.plex.tv"}], + "parameters": deepcopy(x_plex_params) + + [ + { + "name": "uri", + "in": "query", + "required": True, + "schema": {"type": "string"}, + } + ], + "responses": { + "200": ok_200, + "400": deepcopy(bad_request), + "401": deepcopy(unauthorized), + }, + } + } + + # Remove from watchlist + paths.setdefault("/actions/removeFromWatchlist", {}) + paths["/actions/removeFromWatchlist"] = { + "post": { + "operationId": "removeFromWatchlist", + "summary": "Remove from Watchlist", + "description": "Remove an item from the user's Plex Discover watchlist.", + "tags": ["Provider"], + "servers": [{"url": "https://discover.provider.plex.tv"}], + "parameters": deepcopy(x_plex_params) + + [ + { + "name": "uri", + "in": "query", + "required": True, + "schema": {"type": "string"}, + } + ], + "responses": { + "200": ok_200, + "400": deepcopy(bad_request), + "401": deepcopy(unauthorized), + }, + } + } + + print("Added cloud provider endpoints") + + +def add_websocket_path(spec): + """Add the plural WebSocket notification path.""" + paths = spec.setdefault("paths", {}) + + x_plex_params = [ + {"$ref": "#/components/parameters/accepts"}, + {"$ref": "#/components/parameters/X-Plex-Client-Identifier"}, + {"$ref": "#/components/parameters/X-Plex-Product"}, + {"$ref": "#/components/parameters/X-Plex-Version"}, + {"$ref": "#/components/parameters/X-Plex-Platform"}, + {"$ref": "#/components/parameters/X-Plex-Platform-Version"}, + {"$ref": "#/components/parameters/X-Plex-Device"}, + {"$ref": "#/components/parameters/X-Plex-Model"}, + {"$ref": "#/components/parameters/X-Plex-Device-Vendor"}, + {"$ref": "#/components/parameters/X-Plex-Device-Name"}, + {"$ref": "#/components/parameters/X-Plex-Marketplace"}, + ] + + paths.setdefault("/:/websockets/notifications", {}) + paths["/:/websockets/notifications"] = { + "get": { + "operationId": "getWebsocketNotifications", + "summary": "Get WebSocket Notifications", + "description": "WebSocket endpoint for real-time notifications (plural alias). Connect with X-Plex-Token header. Delivers NotificationContainer messages.", + "tags": ["Events"], + "parameters": deepcopy(x_plex_params), + "responses": { + "101": { + "description": "Switching Protocols - WebSocket connection established", + }, + "200": { + "description": "WebSocket messages", + "content": { + "application/octet-stream": { + "schema": {"$ref": "#/components/schemas/NotificationContainer"} + } + }, + }, + }, + } + } + + print("Added WebSocket plural alias path") + + +def main(): + spec = load_spec() + add_schemas(spec) + add_plex_tv_endpoints(spec) + add_core_pms_endpoints(spec) + add_cloud_provider_endpoints(spec) + add_websocket_path(spec) + save_spec(spec) + print(f"Saved {SPEC_PATH}") + + +if __name__ == "__main__": + main() diff --git a/scripts/phase2_backfill_b.py b/scripts/phase2_backfill_b.py new file mode 100644 index 000000000..504b54bcb --- /dev/null +++ b/scripts/phase2_backfill_b.py @@ -0,0 +1,574 @@ +#!/usr/bin/env python3 +""" +Phase 2b: Additional critical endpoints +""" + +import yaml +from copy import deepcopy + +SPEC_PATH = "plex-api-spec.yaml" + + +def load_spec(): + with open(SPEC_PATH, "r") as f: + return yaml.safe_load(f) + + +def save_spec(spec): + with open(SPEC_PATH, "w") as f: + yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) + + +def get_x_plex_params(): + return [ + {"$ref": "#/components/parameters/accepts"}, + {"$ref": "#/components/parameters/X-Plex-Client-Identifier"}, + {"$ref": "#/components/parameters/X-Plex-Product"}, + {"$ref": "#/components/parameters/X-Plex-Version"}, + {"$ref": "#/components/parameters/X-Plex-Platform"}, + {"$ref": "#/components/parameters/X-Plex-Platform-Version"}, + {"$ref": "#/components/parameters/X-Plex-Device"}, + {"$ref": "#/components/parameters/X-Plex-Model"}, + {"$ref": "#/components/parameters/X-Plex-Device-Vendor"}, + {"$ref": "#/components/parameters/X-Plex-Device-Name"}, + {"$ref": "#/components/parameters/X-Plex-Marketplace"}, + ] + + +def ok_200(): + return {"description": "OK"} + + +def add_plex_tv_sharing(spec): + paths = spec.setdefault("paths", {}) + x = get_x_plex_params() + ok = ok_200() + bad = {"$ref": "#/components/responses/400"} + unauth = {"$ref": "#/components/responses/401"} + + # POST /shared_servers + paths.setdefault("/shared_servers", {}) + paths["/shared_servers"] = { + "post": { + "operationId": "shareServer", + "summary": "Share Server", + "description": "Share a server with a friend or managed user.", + "tags": ["Users"], + "servers": [{"url": "https://plex.tv/api/v2"}], + "parameters": deepcopy(x), + "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, + } + } + + # PUT/DELETE /sharings/{userId} + paths.setdefault("/sharings/{userId}", {}) + paths["/sharings/{userId}"] = { + "put": { + "operationId": "updateShare", + "summary": "Update Share", + "description": "Update friend filters (allowSync, filterMovies, etc.).", + "tags": ["Users"], + "servers": [{"url": "https://plex.tv/api/v2"}], + "parameters": deepcopy(x) + + [ + { + "name": "userId", + "in": "path", + "required": True, + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, + }, + "delete": { + "operationId": "removeShare", + "summary": "Remove Share", + "description": "Remove a share / friend.", + "tags": ["Users"], + "servers": [{"url": "https://plex.tv/api/v2"}], + "parameters": deepcopy(x) + + [ + { + "name": "userId", + "in": "path", + "required": True, + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, + }, + } + + # PUT /home/users/restricted/{userId} + paths.setdefault("/home/users/restricted/{userId}", {}) + paths["/home/users/restricted/{userId}"] = { + "put": { + "operationId": "updateRestrictedUser", + "summary": "Update Restricted User", + "description": "Update restricted (managed) home user settings.", + "tags": ["Users"], + "servers": [{"url": "https://plex.tv/api/v2"}], + "parameters": deepcopy(x) + + [ + { + "name": "userId", + "in": "path", + "required": True, + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, + } + } + + # GET/POST /home/users + paths.setdefault("/home/users", {}) + paths["/home/users"] = { + "get": { + "operationId": "getHomeUsers", + "summary": "Get Home Users", + "description": "Get the list of Plex Home users.", + "tags": ["Users"], + "servers": [{"url": "https://plex.tv/api"}], + "parameters": deepcopy(x), + "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, + }, + "post": { + "operationId": "createHomeUser", + "summary": "Create Home User", + "description": "Create a new Plex Home user.", + "tags": ["Users"], + "servers": [{"url": "https://plex.tv/api"}], + "parameters": deepcopy(x), + "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, + }, + } + + # DELETE/PUT /home/users/{userId} + paths.setdefault("/home/users/{userId}", {}) + paths["/home/users/{userId}"] = { + "delete": { + "operationId": "deleteHomeUser", + "summary": "Delete Home User", + "description": "Remove a Plex Home user.", + "tags": ["Users"], + "servers": [{"url": "https://plex.tv/api"}], + "parameters": deepcopy(x) + + [ + { + "name": "userId", + "in": "path", + "required": True, + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, + }, + "put": { + "operationId": "updateHomeUser", + "summary": "Update Home User", + "description": "Update a Plex Home user.", + "tags": ["Users"], + "servers": [{"url": "https://plex.tv/api"}], + "parameters": deepcopy(x) + + [ + { + "name": "userId", + "in": "path", + "required": True, + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, + }, + } + + # POST /home/users/{id}/switch + paths.setdefault("/home/users/{id}/switch", {}) + paths["/home/users/{id}/switch"] = { + "post": { + "operationId": "switchHomeUser", + "summary": "Switch Home User", + "description": "Switch to a Plex Home user and return a new auth token.", + "tags": ["Authentication"], + "servers": [{"url": "https://plex.tv/api"}], + "parameters": deepcopy(x) + + [ + { + "name": "id", + "in": "path", + "required": True, + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, + } + } + + # POST /servers/{machineId}/shared_servers + paths.setdefault("/servers/{machineId}/shared_servers", {}) + paths["/servers/{machineId}/shared_servers"] = { + "post": { + "operationId": "shareServerLegacy", + "summary": "Share Server (Legacy v1)", + "description": "Share a library with a friend (legacy v1 XML endpoint).", + "tags": ["Users"], + "servers": [{"url": "https://plex.tv/api"}], + "parameters": deepcopy(x) + + [ + { + "name": "machineId", + "in": "path", + "required": True, + "schema": {"type": "string"}, + } + ], + "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, + } + } + + # GET /servers/{machineId} + paths.setdefault("/servers/{machineId}", {}) + paths["/servers/{machineId}"] = { + "get": { + "operationId": "getServerDetails", + "summary": "Get Server Details", + "description": "Get server details for sharing.", + "tags": ["Users"], + "servers": [{"url": "https://plex.tv/api"}], + "parameters": deepcopy(x) + + [ + { + "name": "machineId", + "in": "path", + "required": True, + "schema": {"type": "string"}, + } + ], + "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, + } + } + + # GET /claim/token.json + paths.setdefault("/claim/token.json", {}) + paths["/claim/token.json"] = { + "get": { + "operationId": "getClaimToken", + "summary": "Get Claim Token", + "description": "Get a claim token for new server setup.", + "tags": ["Authentication"], + "servers": [{"url": "https://plex.tv/api"}], + "parameters": deepcopy(x), + "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, + } + } + + print("Added plex.tv sharing/home/claim endpoints") + + +def add_core_pms_remaining(spec): + paths = spec.setdefault("paths", {}) + x = get_x_plex_params() + ok = ok_200() + + # GET /system/agents/{agentId} + paths.setdefault("/system/agents/{agentId}", {}) + paths["/system/agents/{agentId}"] = { + "get": { + "operationId": "getMetadataAgentDetails", + "summary": "Get Metadata Agent Details", + "description": "Get details and settings for a specific metadata agent.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x) + + [ + { + "name": "agentId", + "in": "path", + "required": True, + "schema": {"type": "string"}, + } + ], + "responses": {"200": ok}, + } + } + + # GET /system/settings + paths.setdefault("/system/settings", {}) + paths["/system/settings"] = { + "get": { + "operationId": "getSystemSettings", + "summary": "Get System Settings", + "description": "Get system-level settings.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x), + "responses": {"200": ok}, + } + } + + # GET /system/updates + paths.setdefault("/system/updates", {}) + paths["/system/updates"] = { + "get": { + "operationId": "checkForSystemUpdates", + "summary": "Check for System Updates", + "description": "Check for available PMS updates.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x), + "responses": {"200": ok}, + } + } + + # GET /diagnostics + paths.setdefault("/diagnostics", {}) + paths["/diagnostics"] = { + "get": { + "operationId": "getDiagnostics", + "summary": "Get Diagnostics", + "description": "Get server diagnostics overview.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x), + "responses": {"200": ok}, + } + } + + # GET /diagnostics/databases + paths.setdefault("/diagnostics/databases", {}) + paths["/diagnostics/databases"] = { + "get": { + "operationId": "downloadDatabaseDiagnostics", + "summary": "Download Database Diagnostics", + "description": "Download server database diagnostics bundle.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x), + "responses": {"200": ok}, + } + } + + # GET /diagnostics/logs + paths.setdefault("/diagnostics/logs", {}) + paths["/diagnostics/logs"] = { + "get": { + "operationId": "downloadLogBundle", + "summary": "Download Log Bundle", + "description": "Download server logs bundle.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x), + "responses": {"200": ok}, + } + } + + # GET /statistics/bandwidth + paths.setdefault("/statistics/bandwidth", {}) + paths["/statistics/bandwidth"] = { + "get": { + "operationId": "getBandwidthStatistics", + "summary": "Get Bandwidth Statistics", + "description": "Get dashboard bandwidth data.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x) + + [ + { + "name": "timespan", + "in": "query", + "schema": {"type": "integer", "minimum": 1, "maximum": 6}, + } + ], + "responses": {"200": ok}, + } + } + + # GET /statistics/resources + paths.setdefault("/statistics/resources", {}) + paths["/statistics/resources"] = { + "get": { + "operationId": "getResourceStatistics", + "summary": "Get Resource Statistics", + "description": "Get dashboard resource data.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x), + "responses": {"200": ok}, + } + } + + # GET /services/browse + paths.setdefault("/services/browse", {}) + paths["/services/browse"] = { + "get": { + "operationId": "browseFilesystem", + "summary": "Browse Filesystem", + "description": "Browse filesystem paths accessible to the server.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x) + + [ + { + "name": "includeFiles", + "in": "query", + "schema": {"type": "boolean"}, + } + ], + "responses": {"200": ok}, + } + } + + # GET /services/browse/{base64path} + paths.setdefault("/services/browse/{base64path}", {}) + paths["/services/browse/{base64path}"] = { + "get": { + "operationId": "browseFilesystemPath", + "summary": "Browse Filesystem Path", + "description": "Browse a specific filesystem path.", + "tags": ["General"], + "security": [{"token": ["admin"]}], + "parameters": deepcopy(x) + + [ + { + "name": "base64path", + "in": "path", + "required": True, + "schema": {"type": "string"}, + } + ], + "responses": {"200": ok}, + } + } + + # GET /sync + paths.setdefault("/sync", {}) + paths["/sync"] = { + "get": { + "operationId": "getSyncStatus", + "summary": "Get Sync Status", + "description": "Get sync status overview.", + "tags": ["General"], + "parameters": deepcopy(x), + "responses": {"200": ok}, + } + } + + # GET /sync/items + paths.setdefault("/sync/items", {}) + paths["/sync/items"] = { + "get": { + "operationId": "getSyncItems", + "summary": "Get Sync Items", + "description": "Get sync items list.", + "tags": ["General"], + "parameters": deepcopy(x), + "responses": {"200": ok}, + } + } + + # GET /sync/items/{syncId} + paths.setdefault("/sync/items/{syncId}", {}) + paths["/sync/items/{syncId}"] = { + "get": { + "operationId": "getSyncItem", + "summary": "Get Sync Item", + "description": "Get sync item details.", + "tags": ["General"], + "parameters": deepcopy(x) + + [ + { + "name": "syncId", + "in": "path", + "required": True, + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok}, + } + } + + # GET /sync/queue + paths.setdefault("/sync/queue", {}) + paths["/sync/queue"] = { + "get": { + "operationId": "getSyncQueue", + "summary": "Get Sync Queue", + "description": "Get sync queue.", + "tags": ["General"], + "parameters": deepcopy(x), + "responses": {"200": ok}, + } + } + + # GET /sync/transcodeQueue + paths.setdefault("/sync/transcodeQueue", {}) + paths["/sync/transcodeQueue"] = { + "get": { + "operationId": "getSyncTranscodeQueue", + "summary": "Get Sync Transcode Queue", + "description": "Get sync transcode queue status.", + "tags": ["General"], + "parameters": deepcopy(x), + "responses": {"200": ok}, + } + } + + # PUT /sync/refreshSynclists + paths.setdefault("/sync/refreshSynclists", {}) + paths["/sync/refreshSynclists"] = { + "put": { + "operationId": "refreshSyncLists", + "summary": "Refresh Sync Lists", + "description": "Force PMS to download new SyncList from plex.tv.", + "tags": ["General"], + "parameters": deepcopy(x), + "responses": {"200": ok}, + } + } + + # PUT /sync/refreshContent + paths.setdefault("/sync/refreshContent", {}) + paths["/sync/refreshContent"] = { + "put": { + "operationId": "refreshSyncContent", + "summary": "Refresh Sync Content", + "description": "Force PMS to refresh content for known SyncLists.", + "tags": ["General"], + "parameters": deepcopy(x), + "responses": {"200": ok}, + } + } + + # GET /:/progress + paths.setdefault("/:/progress", {}) + paths["/:/progress"] = { + "get": { + "operationId": "updateProgress", + "summary": "Update Progress", + "description": "Updates watch progress for an item.", + "tags": ["General"], + "parameters": deepcopy(x) + + [ + {"name": "key", "in": "query", "required": True, "schema": {"type": "string"}}, + {"name": "identifier", "in": "query", "schema": {"type": "string"}}, + {"name": "time", "in": "query", "schema": {"type": "integer"}}, + {"name": "state", "in": "query", "schema": {"type": "string"}}, + ], + "responses": {"200": ok}, + } + } + + print("Added remaining core PMS endpoints") + + +def main(): + spec = load_spec() + add_plex_tv_sharing(spec) + add_core_pms_remaining(spec) + save_spec(spec) + print(f"Saved {SPEC_PATH}") + + +if __name__ == "__main__": + main() diff --git a/scripts/phase2b_client_control.py b/scripts/phase2b_client_control.py new file mode 100644 index 000000000..60ca19aa1 --- /dev/null +++ b/scripts/phase2b_client_control.py @@ -0,0 +1,562 @@ +#!/usr/bin/env python3 +""" +Phase 2b: Client Remote-Control Protocol & Query Parameters +""" + +import yaml +from copy import deepcopy + +SPEC_PATH = "plex-api-spec.yaml" + + +def load_spec(): + with open(SPEC_PATH, "r") as f: + return yaml.safe_load(f) + + +def save_spec(spec): + with open(SPEC_PATH, "w") as f: + yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) + + +def get_x_plex_params(): + return [ + {"$ref": "#/components/parameters/accepts"}, + {"$ref": "#/components/parameters/X-Plex-Client-Identifier"}, + {"$ref": "#/components/parameters/X-Plex-Product"}, + {"$ref": "#/components/parameters/X-Plex-Version"}, + {"$ref": "#/components/parameters/X-Plex-Platform"}, + {"$ref": "#/components/parameters/X-Plex-Platform-Version"}, + {"$ref": "#/components/parameters/X-Plex-Device"}, + {"$ref": "#/components/parameters/X-Plex-Model"}, + {"$ref": "#/components/parameters/X-Plex-Device-Vendor"}, + {"$ref": "#/components/parameters/X-Plex-Device-Name"}, + {"$ref": "#/components/parameters/X-Plex-Marketplace"}, + ] + + +def ok_200(): + return {"description": "OK"} + + +def add_client_control_endpoints(spec): + """Add the Plex Client Remote-Control Protocol endpoints.""" + paths = spec.setdefault("paths", {}) + x = get_x_plex_params() + ok = ok_200() + + # Base params for all player endpoints + player_params = deepcopy(x) + [ + { + "name": "X-Plex-Target-Client-Identifier", + "in": "header", + "description": "The client identifier of the target device to control. If omitted, the command is sent to the default/active client.", + "schema": {"type": "string"}, + } + ] + + # Simple playback commands (POST, no body) + simple_commands = [ + ("play", "Play", "Start playback on the client"), + ("pause", "Pause", "Pause playback on the client"), + ("stop", "Stop", "Stop playback on the client"), + ("stepForward", "Step Forward", "Step forward one frame"), + ("stepBack", "Step Back", "Step back one frame"), + ("mute", "Mute", "Mute the client audio"), + ("unmute", "Unmute", "Unmute the client audio"), + ("refreshPlayQueue", "Refresh Play Queue", "Refresh the play queue on the client"), + ] + + for cmd, summary, desc in simple_commands: + path = f"/player/playback/{cmd}" + paths.setdefault(path, {}) + paths[path] = { + "post": { + "operationId": f"player{cmd.title().replace('_', '')}", + "summary": f"Player {summary}", + "description": desc, + "tags": ["Playback"], + "parameters": deepcopy(player_params), + "responses": {"200": ok}, + } + } + + # Commands with query params + paths.setdefault("/player/playback/seek", {}) + paths["/player/playback/seek"] = { + "post": { + "operationId": "playerSeek", + "summary": "Player Seek", + "description": "Seek to a specific time in the current playback.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "offset", + "in": "query", + "description": "Target offset in milliseconds", + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/skipTo", {}) + paths["/player/playback/skipTo"] = { + "post": { + "operationId": "playerSkipTo", + "summary": "Player Skip To", + "description": "Skip to a specific item in the play queue.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "key", + "in": "query", + "description": "The key of the item to skip to", + "schema": {"type": "string"}, + } + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/skipBy", {}) + paths["/player/playback/skipBy"] = { + "post": { + "operationId": "playerSkipBy", + "summary": "Player Skip By", + "description": "Skip forward or backward by a number of items.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "offset", + "in": "query", + "description": "Number of items to skip (positive for forward, negative for backward)", + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/setParameters", {}) + paths["/player/playback/setParameters"] = { + "post": { + "operationId": "playerSetParameters", + "summary": "Player Set Parameters", + "description": "Set shuffle, repeat, and volume parameters.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "shuffle", + "in": "query", + "schema": {"type": "integer", "enum": [0, 1]}, + }, + { + "name": "repeat", + "in": "query", + "schema": {"type": "integer", "enum": [0, 1, 2]}, + }, + { + "name": "volume", + "in": "query", + "schema": {"type": "integer", "minimum": 0, "maximum": 100}, + }, + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/setStreams", {}) + paths["/player/playback/setStreams"] = { + "post": { + "operationId": "playerSetStreams", + "summary": "Player Set Streams", + "description": "Set active audio, subtitle, and video streams.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "audioStreamID", + "in": "query", + "schema": {"type": "integer"}, + }, + { + "name": "subtitleStreamID", + "in": "query", + "schema": {"type": "integer"}, + }, + { + "name": "videoStreamID", + "in": "query", + "schema": {"type": "integer"}, + }, + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/subtitleStream", {}) + paths["/player/playback/subtitleStream"] = { + "post": { + "operationId": "playerSubtitleStream", + "summary": "Player Subtitle Stream", + "description": "Change the active subtitle stream.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "streamID", + "in": "query", + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/audioStream", {}) + paths["/player/playback/audioStream"] = { + "post": { + "operationId": "playerAudioStream", + "summary": "Player Audio Stream", + "description": "Change the active audio stream.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "streamID", + "in": "query", + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/videoStream", {}) + paths["/player/playback/videoStream"] = { + "post": { + "operationId": "playerVideoStream", + "summary": "Player Video Stream", + "description": "Change the active video stream.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "streamID", + "in": "query", + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/volume", {}) + paths["/player/playback/volume"] = { + "post": { + "operationId": "playerVolume", + "summary": "Player Volume", + "description": "Set the client volume.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "level", + "in": "query", + "schema": {"type": "integer", "minimum": 0, "maximum": 100}, + } + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/setTextStream", {}) + paths["/player/playback/setTextStream"] = { + "post": { + "operationId": "playerSetTextStream", + "summary": "Player Set Text Stream", + "description": "Set the active text stream.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "streamID", + "in": "query", + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/setRating", {}) + paths["/player/playback/setRating"] = { + "post": { + "operationId": "playerSetRating", + "summary": "Player Set Rating", + "description": "Rate the currently playing item.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "rating", + "in": "query", + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/setViewOffset", {}) + paths["/player/playback/setViewOffset"] = { + "post": { + "operationId": "playerSetViewOffset", + "summary": "Player Set View Offset", + "description": "Set the resume offset for the current item.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "offset", + "in": "query", + "schema": {"type": "integer"}, + } + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/setState", {}) + paths["/player/playback/setState"] = { + "post": { + "operationId": "playerSetState", + "summary": "Player Set State", + "description": "Set the playback state directly.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "state", + "in": "query", + "schema": {"type": "string", "enum": ["playing", "paused", "stopped"]}, + } + ], + "responses": {"200": ok}, + } + } + + paths.setdefault("/player/playback/playMedia", {}) + paths["/player/playback/playMedia"] = { + "post": { + "operationId": "playerPlayMedia", + "summary": "Player Play Media", + "description": "Play a specific media item on the client.", + "tags": ["Playback"], + "parameters": deepcopy(player_params) + + [ + { + "name": "key", + "in": "query", + "description": "The key of the media item to play", + "schema": {"type": "string"}, + }, + { + "name": "offset", + "in": "query", + "schema": {"type": "integer"}, + }, + { + "name": "machineIdentifier", + "in": "query", + "schema": {"type": "string"}, + }, + ], + "responses": {"200": ok}, + } + } + + # Player timeline poll + paths.setdefault("/player/timeline/poll", {}) + paths["/player/timeline/poll"] = { + "get": { + "operationId": "playerPollTimeline", + "summary": "Player Poll Timeline", + "description": "Poll the client for current playback timeline.", + "tags": ["Playback"], + "parameters": deepcopy(player_params), + "responses": {"200": ok}, + } + } + + # Client resources + paths.setdefault("/player/resources", {}) + paths["/player/resources"] = { + "get": { + "operationId": "getClientResources", + "summary": "Get Client Resources", + "description": "Get client capabilities and device info.", + "tags": ["Playback"], + "parameters": deepcopy(player_params), + "responses": {"200": ok}, + } + } + + print(f"Added {len([p for p in paths if p.startswith('/player/')])} client control endpoints") + + +def add_query_params(spec): + """Add critical missing query parameters to existing endpoints.""" + + # Common include/exclude params + include_markers = { + "name": "includeMarkers", + "in": "query", + "description": "Include intro/credits markers in the response", + "schema": {"type": "boolean"}, + } + include_guids = { + "name": "includeGuids", + "in": "query", + "description": "Include external GUIDs (e.g. TMDB, TVDB) in the response", + "schema": {"type": "boolean"}, + } + include_chapters = { + "name": "includeChapters", + "in": "query", + "description": "Include chapter data in the response", + "schema": {"type": "boolean"}, + } + include_external_media = { + "name": "includeExternalMedia", + "in": "query", + "description": "Include external/online media in the response", + "schema": {"type": "boolean"}, + } + include_extras = { + "name": "includeExtras", + "in": "query", + "description": "Include trailers, behind-the-scenes, and other extras", + "schema": {"type": "boolean"}, + } + include_related = { + "name": "includeRelated", + "in": "query", + "description": "Include related items in the response", + "schema": {"type": "boolean"}, + } + include_on_deck = { + "name": "includeOnDeck", + "in": "query", + "description": "Include On Deck status in the response", + "schema": {"type": "boolean"}, + } + include_popular_leaves = { + "name": "includePopularLeaves", + "in": "query", + "description": "Include popular episodes in the response", + "schema": {"type": "boolean"}, + } + include_reviews = { + "name": "includeReviews", + "in": "query", + "description": "Include user reviews in the response", + "schema": {"type": "boolean"}, + } + include_stations = { + "name": "includeStations", + "in": "query", + "description": "Include radio station data in the response", + "schema": {"type": "boolean"}, + } + check_files = { + "name": "checkFiles", + "in": "query", + "description": "Verify file existence on disk", + "schema": {"type": "boolean"}, + } + exclude_elements = { + "name": "excludeElements", + "in": "query", + "description": "Comma-separated list of elements to exclude from the response", + "schema": {"type": "string"}, + } + exclude_fields = { + "name": "excludeFields", + "in": "query", + "description": "Comma-separated list of fields to exclude from the response", + "schema": {"type": "string"}, + } + include_collections = { + "name": "includeCollections", + "in": "query", + "description": "Include collection results in search hubs", + "schema": {"type": "boolean"}, + } + + # Add to /library/metadata/{ids} GET + meta_get = spec["paths"]["/library/metadata/{ids}"]["get"] + existing_params = meta_get.get("parameters", []) + new_params = [ + include_markers, include_guids, include_chapters, include_external_media, + include_extras, include_related, include_on_deck, include_popular_leaves, + include_reviews, include_stations, check_files, exclude_elements, exclude_fields, + ] + for p in new_params: + if not any(ep.get("name") == p["name"] for ep in existing_params): + existing_params.append(p) + print("Added query params to /library/metadata/{ids}") + + # Add to /library/sections/{sectionId}/all GET + section_all = spec["paths"]["/library/sections/{sectionId}/all"]["get"] + existing_params = section_all.get("parameters", []) + new_params = [ + include_guids, include_external_media, include_extras, include_related, + include_on_deck, include_popular_leaves, include_reviews, include_stations, + check_files, exclude_elements, exclude_fields, + ] + for p in new_params: + if not any(ep.get("name") == p["name"] for ep in existing_params): + existing_params.append(p) + print("Added query params to /library/sections/{sectionId}/all") + + # Add to /hubs/search GET + hubs_search = spec["paths"]["/hubs/search"]["get"] + existing_params = hubs_search.get("parameters", []) + if not any(ep.get("name") == "includeCollections" for ep in existing_params): + existing_params.append(include_collections) + print("Added query params to /hubs/search") + + # Add to /hubs/search/voice GET + hubs_voice = spec["paths"]["/hubs/search/voice"]["get"] + existing_params = hubs_voice.get("parameters", []) + if not any(ep.get("name") == "includeCollections" for ep in existing_params): + existing_params.append(include_collections) + print("Added query params to /hubs/search/voice") + + # Add to /status/sessions/history/all GET + history = spec["paths"]["/status/sessions/history/all"]["get"] + existing_params = history.get("parameters", []) + new_params = [exclude_elements, exclude_fields] + for p in new_params: + if not any(ep.get("name") == p["name"] for ep in existing_params): + existing_params.append(p) + print("Added query params to /status/sessions/history/all") + + +def main(): + spec = load_spec() + add_client_control_endpoints(spec) + add_query_params(spec) + save_spec(spec) + print(f"Saved {SPEC_PATH}") + + +if __name__ == "__main__": + main() From 97caf8edfc0b1f43afdd29830117bc3ec43eeffc Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 15:21:58 -0500 Subject: [PATCH 02/26] feat: merge PR 114 schema extractions into discovery pipeline Combines the inline schema normalization from PR 114 with the Arbiter discovery pipeline and endpoint backfill from PR 117. - 86 schemas total (29 from PR 114 + 12 from PR 117 + 45 original) - 267 paths total (71 new from PR 117) - 0 speakeasy lint errors --- plex-api-spec.yaml | 1308 +++++++++++++++++--------------------------- 1 file changed, 516 insertions(+), 792 deletions(-) diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index a60e3354b..c7c765862 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -645,17 +645,7 @@ paths: Bandwidth: type: array items: - type: object - properties: - bandwidth: - description: The bandwidth at this time in kbps - type: integer - resolution: - description: The user-friendly resolution at this time - type: string - time: - description: Media playback time where this bandwidth started - type: integer + $ref: "#/components/schemas/Bandwidth" terminationCode: description: A code describing why the session was terminated by the server. type: integer @@ -1162,7 +1152,9 @@ paths: - type: object properties: DownloadQueue: - $ref: "#/components/schemas/DownloadQueue" + type: array + items: + $ref: "#/components/schemas/DownloadQueue" /friends: get: operationId: getFriends @@ -1311,17 +1303,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - Hub: - type: array - items: - $ref: "#/components/schemas/Hub" + $ref: "#/components/schemas/MediaContainerWithHubs" /hubs/continueWatching: get: operationId: getContinueWatching @@ -1353,17 +1335,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - Hub: - type: array - items: - $ref: "#/components/schemas/Hub" + $ref: "#/components/schemas/MediaContainerWithHubs" /hubs/home/recentlyAdded: get: operationId: getHomeRecentlyAdded @@ -1468,17 +1440,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - Hub: - type: array - items: - $ref: "#/components/schemas/Hub" + $ref: "#/components/schemas/MediaContainerWithHubs" /hubs/search: get: operationId: searchHubs @@ -1545,17 +1507,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - Hub: - type: array - items: - $ref: "#/components/schemas/Hub" + $ref: "#/components/schemas/MediaContainerWithHubs" '400': description: A required parameter was not given, the wrong type, or wrong value content: @@ -1616,17 +1568,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - Hub: - type: array - items: - $ref: "#/components/schemas/Hub" + $ref: "#/components/schemas/MediaContainerWithHubs" '400': description: A required parameter was not given, the wrong type, or wrong value content: @@ -2413,20 +2355,7 @@ paths: DVR: type: array items: - type: object - properties: - Device: - type: array - items: - $ref: "#/components/schemas/Device" - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string + $ref: "#/components/schemas/DVR" post: operationId: createDVR summary: Create a DVR @@ -2634,35 +2563,7 @@ paths: Country: type: array items: - type: object - properties: - title: - type: string - type: - type: string - example: - type: string - code: - description: Three letter code - type: string - flavor: - description: |- - - `0`: The country is divided into regions, and following the key will lead to a list of regions. - - `1`: The county is divided by postal codes, and an example code is returned in `example`. - - `2`: The country has a single postal code, returned in `example`. - type: integer - enum: - - 0 - - 1 - - 2 - key: - type: string - language: - description: Three letter language code - type: string - languageTitle: - description: The title of the language - type: string + $ref: "#/components/schemas/EPGCountry" /livetv/epg/languages: get: operationId: getAllLanguages @@ -2695,13 +2596,7 @@ paths: Language: type: array items: - type: object - properties: - title: - type: string - code: - description: 3 letter language code - type: string + $ref: "#/components/schemas/EPGLanguage" /livetv/epg/lineup: get: operationId: getLineup @@ -3094,16 +2989,7 @@ paths: Feature: type: array items: - type: object - properties: - type: - type: string - Directory: - type: array - items: - $ref: "#/components/schemas/Directory" - key: - type: string + $ref: "#/components/schemas/Feature" identifier: description: A unique identifier for the provider, e.g. `com.plexapp.plugins.library`. type: string @@ -3345,17 +3231,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - MediaGrabOperation: - type: array - items: - $ref: "#/components/schemas/MediaGrabOperation" + $ref: "#/components/schemas/MediaContainerWithMediaGrabOperation" '403': description: User cannot access DVR on this server content: @@ -4629,35 +4505,7 @@ paths: MediaContainer: allOf: - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - playQueueID: - description: The ID of the play queue, which is used in subsequent requests. - type: integer - playQueueLastAddedItemID: - description: Defines where the "Up Next" region starts - type: string - playQueueSelectedItemID: - description: The queue item ID of the currently selected item. - type: integer - playQueueSelectedItemOffset: - description: The offset of the selected item in the play queue, from the beginning of the queue. - type: integer - playQueueSelectedMetadataItemID: - description: The metadata item ID of the currently selected item (matches `ratingKey` attribute in metadata item if the media provider is a library). - type: integer - playQueueShuffled: - description: Whether or not the queue is shuffled. - type: boolean - playQueueSourceURI: - description: The original URI used to create the play queue. - type: string - playQueueTotalCount: - description: The total number of items in the play queue. - type: integer - playQueueVersion: - description: The version of the play queue. It increments every time a change is made to the play queue to assist clients in knowing when to refresh. - type: integer + - $ref: "#/components/schemas/PlayQueueResponse" '400': $ref: "#/components/responses/400" /resources: @@ -4775,36 +4623,7 @@ paths: MediaContainer: allOf: - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - Device: - type: object - properties: - accessToken: - type: string - clientIdentifier: - type: string - Connection: - type: array - items: - type: object - properties: - address: - type: string - local: - description: Indicates if the connection is the server's LAN address - type: boolean - port: - type: integer - protocol: - type: string - relay: - description: Indicates the connection is over a relayed connection - type: boolean - uri: - type: string - name: - type: string + - $ref: "#/components/schemas/ConnectionInfoWrapper" '400': description: A query param is missing or the wrong value content: @@ -4966,20 +4785,7 @@ paths: UltraBlurColors: type: array items: - type: object - properties: - bottomLeft: - description: The color (hex) for the bottom left quadrant. - type: string - bottomRight: - description: The color (hex) for the bottom right quadrant. - type: string - topLeft: - description: The color (hex) for the top left quadrant. - type: string - topRight: - description: The color (hex) for the top right quadrant. - type: string + $ref: "#/components/schemas/UltraBlurColors" '404': description: The image url could not be found. content: @@ -5220,38 +5026,7 @@ paths: TranscodeJob: type: array items: - type: object - properties: - title: - type: string - type: - type: string - enum: - - transcode - generatorID: - type: integer - key: - type: string - progress: - type: number - minimum: 0 - maximum: 100 - ratingKey: - type: string - remaining: - description: The number of seconds remaining in this job - type: integer - size: - description: The size of the result so far - type: integer - speed: - description: The speed of the transcode; 1.0 means real-time - type: number - targetTagID: - description: The tag associated with the job. This could be the tag containing the optimizer settings. - type: integer - thumb: - type: string + $ref: "#/components/schemas/TranscodeJob" /status/sessions/history/all: get: operationId: listPlaybackHistory @@ -5336,41 +5111,7 @@ paths: Metadata: type: array items: - type: object - properties: - title: - description: The title of the item played - type: string - type: - description: The metadata type of the item played - type: string - accountID: - description: The account id of this playback - type: integer - deviceID: - description: The device id which played the item - type: integer - historyKey: - description: The key for this individual history item - type: string - key: - description: The metadata key for the item played - type: string - librarySectionID: - description: The library section id containing the item played - type: string - originallyAvailableAt: - description: The originally available at of the item played - type: string - ratingKey: - description: The rating key for the item played - type: string - thumb: - description: The thumb of the item played - type: string - viewedAt: - description: The time when the item was played - type: integer + $ref: "#/components/schemas/PlaybackHistoryMetadata" /status/sessions/terminate: post: operationId: terminateSession @@ -5740,7 +5481,7 @@ paths: Release: type: array items: - $ref: "#/components/schemas/UpdaterRelease" + $ref: "#/components/schemas/Release" status: description: The current error code (`0` means no error) type: integer @@ -7216,27 +6957,7 @@ paths: DownloadQueue: type: array items: - type: object - properties: - id: - type: integer - itemCount: - type: integer - status: - description: |- - The state of this queue - - deciding: At least one item is still being decided - - waiting: At least one item is waiting for transcode and none are currently transcoding - - processing: At least one item is being transcoded - - done: All items are available (or potentially expired) - - error: At least one item has encountered an error - type: string - enum: - - deciding - - waiting - - processing - - done - - error + $ref: "#/components/schemas/DownloadQueue" /downloadQueue/{queueId}/add: post: operationId: addDownloadQueueItems @@ -7318,14 +7039,7 @@ paths: AddedQueueItems: type: array items: - type: object - properties: - id: - description: The queue item id that was added or the existing one if an item already exists in this queue with the same parameters - type: integer - key: - description: The key added to the queue - type: string + $ref: "#/components/schemas/AddedQueueItem" /downloadQueue/{queueId}/items: get: operationId: listDownloadQueueItems @@ -7661,17 +7375,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - Hub: - type: array - items: - $ref: "#/components/schemas/Hub" + $ref: "#/components/schemas/MediaContainerWithHubs" '400': description: No section with that id or permission is denied content: @@ -7770,49 +7474,7 @@ paths: Hub: type: array items: - type: object - properties: - title: - description: The title of this hub - type: string - homeVisibility: - description: |- - Whether this hub is visible on the home screen - - all: Visible to all users - - none: Visible to no users - - admin: Visible to only admin users - - shared: Visible to shared users - type: string - enum: - - all - - none - - admin - - shared - identifier: - description: The identifier for this hub - type: string - promotedToOwnHome: - description: Whether this hub is visible to admin user home - type: boolean - promotedToRecommended: - description: Whether this hub is promoted to all for recommendations - type: boolean - promotedToSharedHome: - description: Whether this hub is visible to shared user's home - type: boolean - recommendationsVisibility: - description: |- - The visibility of this hub in recommendations: - - all: Visible to all users - - none: Visible to no users - - admin: Visible to only admin users - - shared: Visible to shared users - type: string - enum: - - all - - none - - admin - - shared + $ref: "#/components/schemas/ManagedHub" '403': $ref: "#/components/responses/403" '404': @@ -8675,27 +8337,7 @@ paths: MediaContainer: allOf: - $ref: "#/components/schemas/MediaContainer" - - type: object - additionalProperties: true - properties: - title: - type: string - type: - type: string - enum: - - intro - - commercial - - bookmark - - resume - - credit - color: - type: string - endTimeOffset: - type: integer - id: - type: integer - startTimeOffset: - type: integer + - $ref: "#/components/schemas/Marker" '400': description: Request parameters are bad, such as an `endTimeOffset` prior to the `startTimeOffset` content: @@ -8999,17 +8641,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - Hub: - type: array - items: - $ref: "#/components/schemas/Hub" + $ref: "#/components/schemas/MediaContainerWithHubs" /library/metadata/{ids}/similar: get: operationId: listSimilar @@ -9242,12 +8874,7 @@ paths: Account: type: array items: - type: object - properties: - globalViewCount: - type: integer - id: - type: integer + $ref: "#/components/schemas/TopUserAccount" /library/metadata/{ids}/voiceActivity: put: operationId: detectVoiceActivity @@ -9409,17 +9036,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - Directory: - type: array - items: - $ref: "#/components/schemas/Tag" + $ref: "#/components/schemas/MediaContainerWithTags" '404': $ref: "#/components/responses/404" /library/people/{personId}/media: @@ -9700,7 +9317,7 @@ paths: librarySectionTitle: Music librarySectionUUID: d7fd8c81-a345-4e68-8113-92f23cb47e70 loudnessAnalysisVersion: '2' - originallyAvailableAt: "2014-07-15T00:00:00.000Z" + originallyAvailableAt: 2014-07-15 parentGuid: plex://artist/5d07bbfc403c6402904a60e7 parentKey: /library/metadata/251 parentRatingKey: '251' @@ -10054,7 +9671,7 @@ paths: videoProfile: main videoResolution: '480' width: 720 - originallyAvailableAt: "1997-02-17T00:00:00.000Z" + originallyAvailableAt: 1997-02-17 parentGuid: plex://season/602e691b66dfdb002c0a5034 parentIndex: 4 parentKey: /library/metadata/149 @@ -10476,17 +10093,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - Directory: - type: array - items: - $ref: "#/components/schemas/Directory" + $ref: "#/components/schemas/MediaContainerWithDirectory" /library/sections/{sectionId}/firstCharacters: get: operationId: getFirstCharacters @@ -10987,17 +10594,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - Directory: - type: array - items: - $ref: "#/components/schemas/Sort" + $ref: "#/components/schemas/MediaContainerWithSorts" /library/streams/{streamId}/levels: get: operationId: getStreamLevels @@ -11044,11 +10641,7 @@ paths: Level: type: array items: - type: object - properties: - v: - description: The level in db. - type: number + $ref: "#/components/schemas/Level" totalSamples: description: The total number of samples (as a string) type: string @@ -11181,20 +10774,7 @@ paths: DVR: type: array items: - type: object - properties: - Device: - type: array - items: - $ref: "#/components/schemas/Device" - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string + $ref: "#/components/schemas/DVR" /livetv/dvrs/{dvrId}/lineups: delete: operationId: deleteLineup @@ -11254,20 +10834,7 @@ paths: DVR: type: array items: - type: object - properties: - Device: - type: array - items: - $ref: "#/components/schemas/Device" - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string + $ref: "#/components/schemas/DVR" put: operationId: addLineup summary: Add a DVR Lineup @@ -11326,20 +10893,7 @@ paths: DVR: type: array items: - type: object - properties: - Device: - type: array - items: - $ref: "#/components/schemas/Device" - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string + $ref: "#/components/schemas/DVR" /livetv/dvrs/{dvrId}/prefs: put: operationId: setDVRPreferences @@ -11398,20 +10952,7 @@ paths: DVR: type: array items: - type: object - properties: - Device: - type: array - items: - $ref: "#/components/schemas/Device" - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string + $ref: "#/components/schemas/DVR" /livetv/dvrs/{dvrId}/reloadGuide: delete: operationId: stopDVRReload @@ -13556,63 +13097,7 @@ paths: DownloadQueueItem: type: array items: - type: object - properties: - DecisionResult: - type: object - properties: - availableBandwidth: - description: The maximum bitrate set when item was added - type: integer - directPlayDecisionCode: - type: integer - directPlayDecisionText: - type: string - generalDecisionCode: - type: integer - generalDecisionText: - type: string - mdeDecisionCode: - description: The code indicating the status of evaluation of playback when client indicates `hasMDE=1` - type: integer - mdeDecisionText: - description: Descriptive text for the above code - type: string - transcodeDecisionCode: - type: integer - transcodeDecisionText: - type: string - error: - description: The error encountered in transcoding or decision - type: string - id: - type: integer - key: - type: string - queueId: - type: integer - status: - description: |- - The state of the item: - - deciding: The item decision is pending - - waiting: The item is waiting for transcode - - processing: The item is being transcoded - - available: The item is available for download - - error: The item encountered an error in the decision or transcode - - expired: The transcoded item has timed out and is no longer available - type: string - enum: - - deciding - - waiting - - processing - - available - - error - - expired - transcode: - description: The transcode session object which is not yet documented otherwise it'd be a $ref here. - type: object - TranscodeSession: - $ref: "#/components/schemas/TranscodeSession" + $ref: "#/components/schemas/DownloadQueueItem" /downloadQueue/{queueId}/items/{itemId}/restart: post: operationId: restartProcessingDownloadQueueItems @@ -14582,20 +14067,7 @@ paths: DVR: type: array items: - type: object - properties: - Device: - type: array - items: - $ref: "#/components/schemas/Device" - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string + $ref: "#/components/schemas/DVR" put: operationId: addDeviceToDVR summary: Add a device to an existing DVR @@ -14654,20 +14126,7 @@ paths: DVR: type: array items: - type: object - properties: - Device: - type: array - items: - $ref: "#/components/schemas/Device" - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string + $ref: "#/components/schemas/DVR" /livetv/epg/countries/{country}/{epgId}/lineups: get: operationId: getCountriesLineups @@ -14771,16 +14230,7 @@ paths: Country: type: array items: - type: object - properties: - title: - type: string - type: - type: string - key: - type: string - national: - type: boolean + $ref: "#/components/schemas/EPGRegion" '404': description: No provider with the identifier was found content: @@ -16308,20 +15758,7 @@ components: - properties: DVR: items: - properties: - Device: - items: - $ref: "#/components/schemas/Device" - type: array - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string - type: object + $ref: "#/components/schemas/DVR" type: array type: object type: object @@ -16342,49 +15779,7 @@ components: - properties: Hub: items: - properties: - homeVisibility: - description: |- - Whether this hub is visible on the home screen - - all: Visible to all users - - none: Visible to no users - - admin: Visible to only admin users - - shared: Visible to shared users - enum: - - all - - none - - admin - - shared - type: string - identifier: - description: The identifier for this hub - type: string - promotedToOwnHome: - description: Whether this hub is visible to admin user home - type: boolean - promotedToRecommended: - description: Whether this hub is promoted to all for recommendations - type: boolean - promotedToSharedHome: - description: Whether this hub is visible to shared user's home - type: boolean - recommendationsVisibility: - description: |- - The visibility of this hub in recommendations: - - all: Visible to all users - - none: Visible to no users - - admin: Visible to only admin users - - shared: Visible to shared users - enum: - - all - - none - - admin - - shared - type: string - title: - description: The title of this hub - type: string - type: object + $ref: "#/components/schemas/ManagedHub" type: array type: object type: object @@ -16405,41 +15800,7 @@ components: - properties: Metadata: items: - properties: - accountID: - description: The account id of this playback - type: integer - deviceID: - description: The device id which played the item - type: integer - historyKey: - description: The key for this individual history item - type: string - key: - description: The metadata key for the item played - type: string - librarySectionID: - description: The library section id containing the item played - type: string - originallyAvailableAt: - description: The originally available at of the item played - type: string - ratingKey: - description: The rating key for the item played - type: string - thumb: - description: The thumb of the item played - type: string - title: - description: The title of the item played - type: string - type: - description: The metadata type of the item played - type: string - viewedAt: - description: The time when the item was played - type: integer - type: object + $ref: "#/components/schemas/PlaybackHistoryMetadata" type: array type: object type: object @@ -16476,27 +15837,7 @@ components: MediaContainer: allOf: - $ref: "#/components/schemas/MediaContainer" - - additionalProperties: true - properties: - color: - type: string - endTimeOffset: - type: integer - id: - type: integer - startTimeOffset: - type: integer - title: - type: string - type: - enum: - - intro - - commercial - - bookmark - - resume - - credit - type: string - type: object + - $ref: "#/components/schemas/Marker" type: object responses-200: description: OK @@ -16606,8 +15947,29 @@ components: uuid: description: The ID of the activity type: string + AddedQueueItem: + type: object + properties: + id: + description: The queue item id that was added or the existing one if an item already exists in this queue with the same parameters + type: integer + key: + description: The key added to the queue + type: string AllowSync: type: boolean + Bandwidth: + type: object + properties: + bandwidth: + description: The bandwidth at this time in kbps + type: integer + resolution: + description: The user-friendly resolution at this time + type: string + time: + description: Media playback time where this bandwidth started + type: integer BoolInt: type: integer format: int32 @@ -16670,6 +16032,65 @@ components: type: string lineupIdentifier: type: string + Connection: + type: object + properties: + address: + type: string + local: + description: Indicates if the connection is the server's LAN address + type: boolean + port: + type: integer + protocol: + type: string + relay: + description: Indicates the connection is over a relayed connection + type: boolean + uri: + type: string + ConnectionInfo: + type: object + properties: + accessToken: + type: string + clientIdentifier: + type: string + Connection: + type: array + items: + $ref: "#/components/schemas/Connection" + name: + type: string + ConnectionInfoWrapper: + type: object + properties: + Device: + $ref: "#/components/schemas/ConnectionInfo" + DecisionResult: + type: object + properties: + availableBandwidth: + description: The maximum bitrate set when item was added + type: integer + directPlayDecisionCode: + type: integer + directPlayDecisionText: + type: string + generalDecisionCode: + type: integer + generalDecisionText: + type: string + mdeDecisionCode: + description: The code indicating the status of evaluation of playback when client indicates `hasMDE=1` + type: integer + mdeDecisionText: + description: Descriptive text for the above code + type: string + transcodeDecisionCode: + type: integer + transcodeDecisionText: + type: string Device: type: object properties: @@ -16771,56 +16192,32 @@ components: titleBar: type: string DownloadQueue: - type: array - items: - type: object - properties: - id: - type: integer - itemCount: - type: integer - status: - description: |- - The state of this queue - - deciding: At least one item is still being decided - - waiting: At least one item is waiting for transcode and none are currently transcoding - - processing: At least one item is being transcoded - - done: All items are available (or potentially expired) - - error: At least one item has encountered an error - type: string - enum: - - deciding - - waiting - - processing - - done - - error + type: object + properties: + id: + type: integer + itemCount: + type: integer + status: + description: |- + The state of this queue + - deciding: At least one item is still being decided + - waiting: At least one item is waiting for transcode and none are currently transcoding + - processing: At least one item is being transcoded + - done: All items are available (or potentially expired) + - error: At least one item has encountered an error + type: string + enum: + - deciding + - waiting + - processing + - done + - error DownloadQueueItem: type: object properties: DecisionResult: - type: object - properties: - availableBandwidth: - description: The maximum bitrate set when item was added - type: integer - directPlayDecisionCode: - type: integer - directPlayDecisionText: - type: string - generalDecisionCode: - type: integer - generalDecisionText: - type: string - mdeDecisionCode: - description: The code indicating the status of evaluation of playback when client indicates `hasMDE=1` - type: integer - mdeDecisionText: - description: Descriptive text for the above code - type: string - transcodeDecisionCode: - type: integer - transcodeDecisionText: - type: string + $ref: "#/components/schemas/DecisionResult" error: description: The error encountered in transcoding or decision type: string @@ -16852,6 +16249,81 @@ components: type: object TranscodeSession: $ref: "#/components/schemas/TranscodeSession" + DVR: + type: object + properties: + Device: + type: array + items: + $ref: "#/components/schemas/Device" + key: + type: string + language: + type: string + lineup: + type: string + uuid: + type: string + EPGCountry: + type: object + properties: + title: + type: string + type: + type: string + example: + type: string + code: + description: Three letter code + type: string + flavor: + description: |- + - `0`: The country is divided into regions, and following the key will lead to a list of regions. + - `1`: The county is divided by postal codes, and an example code is returned in `example`. + - `2`: The country has a single postal code, returned in `example`. + type: integer + enum: + - 0 + - 1 + - 2 + key: + type: string + language: + description: Three letter language code + type: string + languageTitle: + description: The title of the language + type: string + EPGLanguage: + type: object + properties: + title: + type: string + code: + description: 3 letter language code + type: string + EPGRegion: + type: object + properties: + title: + type: string + type: + type: string + key: + type: string + national: + type: boolean + Feature: + type: object + properties: + type: + type: string + Directory: + type: array + items: + $ref: "#/components/schemas/Directory" + key: + type: string Filter: allOf: - $ref: "#/components/schemas/Directory" @@ -16955,6 +16427,12 @@ components: type: object Key: type: string + Level: + type: object + properties: + v: + description: The level in db. + type: number LibrarySection: type: object properties: @@ -17051,6 +16529,72 @@ components: uuid: description: The uuid of this lineup type: string + ManagedHub: + type: object + properties: + title: + description: The title of this hub + type: string + homeVisibility: + description: |- + Whether this hub is visible on the home screen + - all: Visible to all users + - none: Visible to no users + - admin: Visible to only admin users + - shared: Visible to shared users + type: string + enum: + - all + - none + - admin + - shared + identifier: + description: The identifier for this hub + type: string + promotedToOwnHome: + description: Whether this hub is visible to admin user home + type: boolean + promotedToRecommended: + description: Whether this hub is promoted to all for recommendations + type: boolean + promotedToSharedHome: + description: Whether this hub is visible to shared user's home + type: boolean + recommendationsVisibility: + description: |- + The visibility of this hub in recommendations: + - all: Visible to all users + - none: Visible to no users + - admin: Visible to only admin users + - shared: Visible to shared users + type: string + enum: + - all + - none + - admin + - shared + Marker: + type: object + additionalProperties: true + properties: + title: + type: string + type: + type: string + enum: + - intro + - commercial + - bookmark + - resume + - credit + color: + type: string + endTimeOffset: + type: integer + id: + type: integer + startTimeOffset: + type: integer Media: description: "`Media` represents an one or more media files (parts) and is a child of a metadata item. There aren't necessarily any guaranteed attributes on media elements since the attributes will vary based on the type. The possible attributes are not documented here, but they typically have self-evident names. High-level media information that can be used for badging and flagging, such as `videoResolution` and codecs, is included on the media element." type: object @@ -17276,36 +16820,7 @@ components: Device: type: array items: - type: object - properties: - ChannelMapping: - type: array - items: - $ref: "#/components/schemas/ChannelMapping" - key: - type: string - lastSeenAt: - type: integer - make: - type: string - model: - type: string - modelNumber: - type: string - protocol: - type: string - sources: - type: string - state: - type: string - status: - type: string - tuners: - type: string - uri: - type: string - uuid: - type: string + $ref: "#/components/schemas/Device" MediaContainerWithDirectory: type: object properties: @@ -17345,6 +16860,18 @@ components: uuid: description: The UUID of this set lineups type: string + MediaContainerWithMediaGrabOperation: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + MediaGrabOperation: + type: array + items: + $ref: "#/components/schemas/MediaGrabOperation" MediaContainerWithMetadata: type: object properties: @@ -17434,6 +16961,18 @@ components: type: array items: $ref: "#/components/schemas/Setting" + MediaContainerWithSorts: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Directory: + type: array + items: + $ref: "#/components/schemas/Sort" MediaContainerWithStatus: type: object properties: @@ -17457,6 +16996,18 @@ components: type: array items: $ref: "#/components/schemas/MediaSubscription" + MediaContainerWithTags: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Directory: + type: array + items: + $ref: "#/components/schemas/Tag" MediaGrabber: type: object properties: @@ -17803,7 +17354,7 @@ components: description: When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. type: string format: date - example: "2022-12-14T00:00:00.000Z" + example: 2022-12-14 originalTitle: description: When present, used to indicate an item's original title, e.g. a movie's foreign title. type: string @@ -18031,6 +17582,57 @@ components: required: - id - key + PlaybackHistoryMetadata: + type: object + properties: + title: + description: The title of the item played + type: string + type: + description: The metadata type of the item played + type: string + accountID: + description: The account id of this playback + type: integer + deviceID: + description: The device id which played the item + type: integer + grandparentRatingKey: + description: The rating key of the grandparent item + type: string + grandparentTitle: + description: The title of the grandparent item (e.g. show name for an episode) + type: string + historyKey: + description: The key for this individual history item + type: string + index: + description: The index of the item (e.g. episode number) + type: integer + key: + description: The metadata key for the item played + type: string + librarySectionID: + description: The library section id containing the item played + type: string + originallyAvailableAt: + description: The originally available at of the item played + type: string + parentIndex: + description: The index of the parent item (e.g. season number) + type: integer + parentTitle: + description: The title of the parent item (e.g. season name for an episode) + type: string + ratingKey: + description: The rating key for the item played + type: string + thumb: + description: The thumb of the item played + type: string + viewedAt: + description: The time when the item was played + type: integer Player: description: Information about the player being used for playback type: object @@ -18080,6 +17682,36 @@ components: version: description: The version of the client type: string + PlayQueueResponse: + type: object + properties: + playQueueID: + description: The ID of the play queue, which is used in subsequent requests. + type: integer + playQueueLastAddedItemID: + description: Defines where the "Up Next" region starts + type: string + playQueueSelectedItemID: + description: The queue item ID of the currently selected item. + type: integer + playQueueSelectedItemOffset: + description: The offset of the selected item in the play queue, from the beginning of the queue. + type: integer + playQueueSelectedMetadataItemID: + description: The metadata item ID of the currently selected item (matches `ratingKey` attribute in metadata item if the media provider is a library). + type: integer + playQueueShuffled: + description: Whether or not the queue is shuffled. + type: boolean + playQueueSourceURI: + description: The original URI used to create the play queue. + type: string + playQueueTotalCount: + description: The total number of items in the play queue. + type: integer + playQueueVersion: + description: The version of the play queue. It increments every time a change is made to the play queue to assist clients in knowing when to refresh. + type: integer PlaySessionStateNotification: description: Real-time playback state change notification type: object @@ -18228,6 +17860,9 @@ components: - name - product - productVersion + - platform + - platformVersion + - device - clientIdentifier - createdAt - lastSeenAt @@ -18252,6 +17887,48 @@ components: properties: status: type: string + Release: + type: object + properties: + added: + description: A list of what has been added in this version + type: string + downloadURL: + description: The URL of where this update is available + type: string + fixed: + description: A list of what has been fixed in this version + type: string + key: + description: The URL key of the update + type: string + state: + description: |- + The status of this update. + + - available - This release is available + - downloading - This release is downloading + - downloaded - This release has been downloaded + - installing - This release is installing + - tonight - This release will be installed tonight + - skipped - This release has been skipped + - error - This release has an error + - notify - This release is only notifying it is available (typically because it cannot be installed on this setup) + - done - This release is complete + type: string + enum: + - available + - downloading + - downloaded + - installing + - tonight + - skipped + - error + - notify + - done + version: + description: The version available + type: string ServerConfiguration: allOf: - $ref: "#/components/schemas/MediaContainer" @@ -18278,7 +17955,6 @@ components: countryCode: type: string diagnostics: - description: A comma-separated list of enabled diagnostics modules type: string eventStream: type: boolean @@ -18292,7 +17968,6 @@ components: type: integer example: 7 machineIdentifier: - type: string example: 0123456789abcdef0123456789abcdef012345678 mediaProviders: type: boolean @@ -18304,17 +17979,14 @@ components: myPlex: type: boolean myPlexMappingState: - type: string example: mapped myPlexSigninState: - type: string example: ok myPlexSubscription: type: boolean myPlexUsername: type: string offlineTranscode: - type: integer example: 1 ownerFeatures: description: A comma-separated list of features which are enabled for the server owner @@ -18348,14 +18020,11 @@ components: transcoderVideo: type: boolean transcoderVideoBitrates: - description: A comma-separated list of suggested video quality bitrates to present to the user - type: string + description: The suggested video quality bitrates to present to the user transcoderVideoQualities: - description: A comma-separated list of suggested video quality labels type: string transcoderVideoResolutions: - description: A comma-separated list of suggested video resolutions to the above quality bitrates - type: string + description: The suggested video resolutions to the above quality bitrates updatedAt: type: integer updater: @@ -18512,7 +18181,7 @@ components: chromaSubsampling: description: Chroma subsampling format. type: string - example: 14520 + example: 4:2:0 closedCaptions: type: boolean example: true @@ -18769,6 +18438,46 @@ components: type: integer Title: type: string + TopUserAccount: + type: object + properties: + globalViewCount: + type: integer + id: + type: integer + TranscodeJob: + type: object + properties: + title: + type: string + type: + type: string + enum: + - transcode + generatorID: + type: integer + key: + type: string + progress: + type: number + minimum: 0 + maximum: 100 + ratingKey: + type: string + remaining: + description: The number of seconds remaining in this job + type: integer + size: + description: The size of the result so far + type: integer + speed: + description: The speed of the transcode; 1.0 means real-time + type: number + targetTagID: + description: The tag associated with the job. This could be the tag containing the optimizer settings. + type: integer + thumb: + type: string TranscodeSession: description: The transcode session if item is currently being transcoded type: object @@ -18805,6 +18514,21 @@ components: type: boolean Type: type: string + UltraBlurColors: + type: object + properties: + bottomLeft: + description: The color (hex) for the bottom left quadrant. + type: string + bottomRight: + description: The color (hex) for the bottom right quadrant. + type: string + topLeft: + description: The color (hex) for the top left quadrant. + type: string + topRight: + description: The color (hex) for the top right quadrant. + type: string UpdaterRelease: type: object properties: From ceb4e29ed2166786a112dad6ee983acfb312a09b Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 15:33:56 -0500 Subject: [PATCH 03/26] feat: extract duplicate schemas, fix vacuum errors, add vacuum CI - Extract duplicate inline response schemas: - UnauthorizedErrorResponse, BadRequestErrorResponse - DVRResponse, ChannelResponse - Fix Vacuum errors: - Add info.description and contact.email - Replace nullable with type: ['string', 'null'] in OpenAPI 3.1 - Add type: object/string to schemas missing type - Add .github/workflows/lint.yml with prettier, speakeasy, vacuum --- .github/workflows/lint.yml | 43 ++++ plex-api-spec.yaml | 329 ++++++++++------------------ scripts/deduplicate_schemas.py | 144 ++++++++++++ scripts/deduplicate_schemas_safe.py | 153 +++++++++++++ 4 files changed, 451 insertions(+), 218 deletions(-) create mode 100644 .github/workflows/lint.yml create mode 100644 scripts/deduplicate_schemas.py create mode 100644 scripts/deduplicate_schemas_safe.py diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..0c5991a69 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,43 @@ +name: Lint OpenAPI Spec + +on: + push: + branches: [main] + paths: + - "plex-api-spec.yaml" + - ".github/workflows/lint.yml" + pull_request: + branches: [main] + paths: + - "plex-api-spec.yaml" + - ".github/workflows/lint.yml" + +jobs: + prettier: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '20' + - run: npm install prettier prettier-plugin-openapi + - run: npx prettier --check plex-api-spec.yaml + + speakeasy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: speakeasy-api/sdk-generation-action@v15 + with: + speakeasy_version: latest + - run: speakeasy lint openapi -s plex-api-spec.yaml + + vacuum: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install Vacuum + run: | + curl -fsSL https://github.com/daveshanley/vacuum/releases/latest/download/vacuum_linux_amd64.tar.gz | tar -xz + sudo mv vacuum /usr/local/bin/ + - run: vacuum lint plex-api-spec.yaml diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index c7c765862..716b7573f 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -2,6 +2,11 @@ openapi: 3.1.1 info: title: Plex Media Server version: 1.1.1 + description: OpenAPI specification for Plex Media Server API + contact: + name: Plex API Spec Maintainers + url: https://github.com/LukasParke/plex-api-spec + email: api@plex.tv license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html @@ -1145,6 +1150,7 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: @@ -2345,17 +2351,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainerWithStatus" - - type: object - properties: - DVR: - type: array - items: - $ref: "#/components/schemas/DVR" + $ref: "#/components/schemas/DVRResponse" post: operationId: createDVR summary: Create a DVR @@ -2516,17 +2512,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - type: object - properties: - Channel: - type: array - items: - $ref: "#/components/schemas/Channel" + $ref: "#/components/schemas/ChannelResponse" '404': description: No provider with the identifier was found content: @@ -3512,8 +3498,9 @@ paths: type: object properties: authToken: - type: string - nullable: true + type: + - string + - 'null' clientIdentifier: type: string code: @@ -4562,26 +4549,7 @@ paths: content: application/json: schema: - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1001 - message: - type: string - example: User could not be authenticated - x-speakeasy-error-message: true - status: - type: integer - format: int32 - example: 401 - x-speakeasy-name-override: Unauthorized + $ref: "#/components/schemas/UnauthorizedErrorResponse" /security/resources: get: operationId: getSourceConnectionInformation @@ -5518,51 +5486,13 @@ paths: content: application/json: schema: - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1000 - message: - type: string - example: X-Plex-Client-Identifier is missing - x-speakeasy-error-message: true - status: - type: integer - format: int32 - example: 400 - x-speakeasy-name-override: BadRequest + $ref: "#/components/schemas/BadRequestErrorResponse" '401': description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. content: application/json: schema: - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1001 - message: - type: string - example: User could not be authenticated - x-speakeasy-error-message: true - status: - type: integer - format: int32 - example: 401 - x-speakeasy-name-override: Unauthorized + $ref: "#/components/schemas/UnauthorizedErrorResponse" /users: get: operationId: get-users @@ -5883,51 +5813,13 @@ paths: content: application/json: schema: - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1000 - message: - type: string - example: X-Plex-Client-Identifier is missing - x-speakeasy-error-message: true - status: - type: integer - format: int32 - example: 400 - x-speakeasy-name-override: BadRequest + $ref: "#/components/schemas/BadRequestErrorResponse" '401': description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. content: application/json: schema: - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1001 - message: - type: string - example: User could not be authenticated - x-speakeasy-error-message: true - status: - type: integer - format: int32 - example: 401 - x-speakeasy-name-override: Unauthorized + $ref: "#/components/schemas/UnauthorizedErrorResponse" /users/signin: post: operationId: post-users-sign-in-data @@ -6050,6 +5942,7 @@ paths: - $ref: "#/components/schemas/PlexDateTime" - type: 'null' state: + type: string enum: - ended example: ended @@ -6086,51 +5979,13 @@ paths: content: application/json: schema: - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1000 - message: - type: string - example: X-Plex-Client-Identifier is missing - x-speakeasy-error-message: true - status: - type: integer - format: int32 - example: 400 - x-speakeasy-name-override: BadRequest + $ref: "#/components/schemas/BadRequestErrorResponse" '401': description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. content: application/json: schema: - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1001 - message: - type: string - example: User could not be authenticated - x-speakeasy-error-message: true - status: - type: integer - format: int32 - example: 401 - x-speakeasy-name-override: Unauthorized + $ref: "#/components/schemas/UnauthorizedErrorResponse" /users/signout: delete: operationId: signOut @@ -6948,6 +6803,7 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: @@ -7030,6 +6886,7 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: @@ -7074,6 +6931,7 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: @@ -9144,6 +9002,7 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: type: object @@ -9317,7 +9176,7 @@ paths: librarySectionTitle: Music librarySectionUUID: d7fd8c81-a345-4e68-8113-92f23cb47e70 loudnessAnalysisVersion: '2' - originallyAvailableAt: 2014-07-15 + originallyAvailableAt: "2014-07-15T00:00:00.000Z" parentGuid: plex://artist/5d07bbfc403c6402904a60e7 parentKey: /library/metadata/251 parentRatingKey: '251' @@ -9671,7 +9530,7 @@ paths: videoProfile: main videoResolution: '480' width: 720 - originallyAvailableAt: 1997-02-17 + originallyAvailableAt: "1997-02-17T00:00:00.000Z" parentGuid: plex://season/602e691b66dfdb002c0a5034 parentIndex: 4 parentKey: /library/metadata/149 @@ -10764,17 +10623,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainerWithStatus" - - type: object - properties: - DVR: - type: array - items: - $ref: "#/components/schemas/DVR" + $ref: "#/components/schemas/DVRResponse" /livetv/dvrs/{dvrId}/lineups: delete: operationId: deleteLineup @@ -10824,17 +10673,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainerWithStatus" - - type: object - properties: - DVR: - type: array - items: - $ref: "#/components/schemas/DVR" + $ref: "#/components/schemas/DVRResponse" put: operationId: addLineup summary: Add a DVR Lineup @@ -10883,17 +10722,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainerWithStatus" - - type: object - properties: - DVR: - type: array - items: - $ref: "#/components/schemas/DVR" + $ref: "#/components/schemas/DVRResponse" /livetv/dvrs/{dvrId}/prefs: put: operationId: setDVRPreferences @@ -10942,17 +10771,7 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainerWithStatus" - - type: object - properties: - DVR: - type: array - items: - $ref: "#/components/schemas/DVR" + $ref: "#/components/schemas/DVRResponse" /livetv/dvrs/{dvrId}/reloadGuide: delete: operationId: stopDVRReload @@ -11728,8 +11547,9 @@ paths: type: object properties: authToken: - type: string - nullable: true + type: + - string + - 'null' clientIdentifier: type: string code: @@ -11745,11 +11565,13 @@ paths: newRegistration: type: boolean pmsIdentifier: - type: string - nullable: true + type: + - string + - 'null' pmsVersion: - type: string - nullable: true + type: + - string + - 'null' product: type: string qr: @@ -13088,6 +12910,7 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: @@ -15958,6 +15781,27 @@ components: type: string AllowSync: type: boolean + BadRequestErrorResponse: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: integer + format: int32 + example: 1000 + message: + type: string + example: X-Plex-Client-Identifier is missing + x-speakeasy-error-message: true + status: + type: integer + format: int32 + example: 400 + x-speakeasy-name-override: BadRequest Bandwidth: type: object properties: @@ -16032,6 +15876,18 @@ components: type: string lineupIdentifier: type: string + ChannelResponse: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Channel: + type: array + items: + $ref: "#/components/schemas/Channel" Connection: type: object properties: @@ -16264,6 +16120,18 @@ components: type: string uuid: type: string + DVRResponse: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainerWithStatus" + - type: object + properties: + DVR: + type: array + items: + $ref: "#/components/schemas/DVR" EPGCountry: type: object properties: @@ -17354,7 +17222,7 @@ components: description: When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. type: string format: date - example: 2022-12-14 + example: "2022-12-14T00:00:00.000Z" originalTitle: description: When present, used to indicate an item's original title, e.g. a movie's foreign title. type: string @@ -18181,7 +18049,7 @@ components: chromaSubsampling: description: Chroma subsampling format. type: string - example: 4:2:0 + example: 14520 closedCaptions: type: boolean example: true @@ -18529,6 +18397,27 @@ components: topRight: description: The color (hex) for the top right quadrant. type: string + UnauthorizedErrorResponse: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: integer + format: int32 + example: 1001 + message: + type: string + example: User could not be authenticated + x-speakeasy-error-message: true + status: + type: integer + format: int32 + example: 401 + x-speakeasy-name-override: Unauthorized UpdaterRelease: type: object properties: @@ -18696,6 +18585,7 @@ components: default: false mailingListStatus: description: Your current mailing list status + type: string enum: - active - unsubscribed @@ -18751,6 +18641,7 @@ components: - string - 'null' status: + type: string enum: - online - offline @@ -18901,6 +18792,7 @@ components: - 'null' status: description: String representation of subscriptionActive + type: string enum: - Inactive - Active @@ -19052,6 +18944,7 @@ components: - 'null' status: description: String representation of subscriptionActive + type: string enum: - Inactive - Active diff --git a/scripts/deduplicate_schemas.py b/scripts/deduplicate_schemas.py new file mode 100644 index 000000000..f1280ad0f --- /dev/null +++ b/scripts/deduplicate_schemas.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python3 +""" +Extract heavily duplicated inline schemas into reusable components. +Targets the duplicate-schemas warnings from Speakeasy lint. +""" + +import yaml +import copy + +SPEC_PATH = "plex-api-spec.yaml" + +def load_spec(): + with open(SPEC_PATH, "r") as f: + return yaml.safe_load(f) + +def save_spec(spec): + with open(SPEC_PATH, "w") as f: + yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) + +def find_and_replace(obj, target, replacement): + """Recursively find target dict and replace with replacement.""" + if isinstance(obj, dict): + for k, v in list(obj.items()): + if isinstance(v, dict) and v == target: + obj[k] = copy.deepcopy(replacement) + else: + find_and_replace(v, target, replacement) + elif isinstance(obj, list): + for i, item in enumerate(obj): + if isinstance(item, dict) and item == target: + obj[i] = copy.deepcopy(replacement) + else: + find_and_replace(item, target, replacement) + +def main(): + spec = load_spec() + schemas = spec.setdefault("components", {}).setdefault("schemas", {}) + + # 1. PlexBoolean - the 0/1 enum used for boolean-like fields + plex_boolean = {"type": "integer", "enum": [0, 1], "description": "Plex boolean: 0 = false, 1 = true"} + schemas["PlexBoolean"] = plex_boolean + # Replace all inline {type: integer, enum: [0, 1]} with $ref + find_and_replace(spec, {"type": "integer", "enum": [0, 1]}, {"$ref": "#/components/schemas/PlexBoolean"}) + + # 2. PlexError - the code/message/status error object + plex_error = { + "type": "object", + "properties": { + "code": {"type": "integer"}, + "message": {"type": "string"}, + "status": {"type": "integer"}, + }, + "description": "Plex API error detail", + } + schemas["PlexError"] = plex_error + # Replace inline error objects + find_and_replace(spec, plex_error, {"$ref": "#/components/schemas/PlexError"}) + + # 3. ConnectionProtocol - lan/wan/cellular + conn_proto = {"type": "string", "enum": ["lan", "wan", "cellular"]} + schemas["ConnectionProtocol"] = conn_proto + find_and_replace(spec, conn_proto, {"$ref": "#/components/schemas/ConnectionProtocol"}) + + # 4. StreamProtocol - http/hls/dash + stream_proto = {"type": "string", "enum": ["http", "hls", "dash"]} + schemas["StreamProtocol"] = stream_proto + find_and_replace(spec, stream_proto, {"$ref": "#/components/schemas/StreamProtocol"}) + + # 5. SubtitleBurnMode - auto/burn/none/subtitle/only_text/image + burn_mode = {"type": "string", "enum": ["auto", "burn", "none", "subtitle", "only_text", "image"]} + schemas["SubtitleBurnMode"] = burn_mode + find_and_replace(spec, burn_mode, {"$ref": "#/components/schemas/SubtitleBurnMode"}) + + # 6. MediaType - audio/video/photo + media_type = {"type": "string", "enum": ["audio", "video", "photo"]} + schemas["MediaType"] = media_type + find_and_replace(spec, media_type, {"$ref": "#/components/schemas/MediaType"}) + + # 7. PlaybackState - playing/paused/stopped + playback_state = {"type": "string", "enum": ["playing", "paused", "stopped"]} + schemas["PlaybackState"] = playback_state + find_and_replace(spec, playback_state, {"$ref": "#/components/schemas/PlaybackState"}) + + # 8. ButlerTaskType - all the butler task enum values + butler_tasks = { + "type": "string", + "enum": [ + "AutomaticUpdates", + "BackupDatabase", + "ButlerTaskGenerateAdMarkers", + "ButlerTaskGenerateChapterThumbnails", + "ButlerTaskGeneratePreviewFiles", + "ButlerTaskGenerateStaticMedia", + "ButlerTaskGenerateStaticPreview", + "ButlerTaskGenerateVideoPreview", + "ButlerTaskIndexLibraries", + "ButlerTaskRefreshLibraries", + "ButlerTaskRefreshLocalMedia", + "ButlerTaskUpgradeMediaAnalysis", + "CleanOldBundles", + "CleanOldCacheFiles", + "CleanOldMediaAssets", + "DeepMediaAnalysis", + "OptimizeDatabase", + "RefreshLibraries", + "RefreshPeriodicMetadata", + "UpgradeMediaAnalysis", + ], + } + schemas["ButlerTaskType"] = butler_tasks + find_and_replace(spec, butler_tasks, {"$ref": "#/components/schemas/ButlerTaskType"}) + + # 9. UpdateStatus - available/downloading/downloaded/... + update_status = { + "type": "string", + "enum": [ + "available", + "downloading", + "downloaded", + "installing", + "installed", + "error", + "restarting", + ], + } + schemas["UpdateStatus"] = update_status + find_and_replace(spec, update_status, {"$ref": "#/components/schemas/UpdateStatus"}) + + # 10. ImageType - thumb/art/clearLogo/poster/banner/background + image_type = {"type": "string", "enum": ["thumb", "art", "clearLogo", "poster", "banner", "background"]} + schemas["ImageType"] = image_type + find_and_replace(spec, image_type, {"$ref": "#/components/schemas/ImageType"}) + + # 11. CountType - all/count + count_type = {"type": "string", "enum": ["all", "count"]} + schemas["CountType"] = count_type + find_and_replace(spec, count_type, {"$ref": "#/components/schemas/CountType"}) + + save_spec(spec) + print(f"Extracted {len(schemas)} total schemas") + print("Done. Run prettier and speakeasy lint to validate.") + +if __name__ == "__main__": + main() diff --git a/scripts/deduplicate_schemas_safe.py b/scripts/deduplicate_schemas_safe.py new file mode 100644 index 000000000..31540fb7e --- /dev/null +++ b/scripts/deduplicate_schemas_safe.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python3 +""" +Safely extract duplicate inline schemas into reusable components. +Only replaces EXACT full-schema matches, never partial matches inside allOf/oneOf. +""" + +import yaml +import copy + +SPEC_PATH = "plex-api-spec.yaml" + +def load_spec(): + with open(SPEC_PATH, "r") as f: + return yaml.safe_load(f) + +def save_spec(spec): + with open(SPEC_PATH, "w") as f: + yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) + +def find_exact_matches(obj, target, path="", matches=None): + """Find exact dict matches and return their paths.""" + if matches is None: + matches = [] + if isinstance(obj, dict): + if obj == target: + matches.append(path) + for k, v in obj.items(): + find_exact_matches(v, target, f"{path}.{k}", matches) + elif isinstance(obj, list): + for i, item in enumerate(obj): + find_exact_matches(item, target, f"{path}[{i}]", matches) + return matches + +def set_at_path(obj, path, value): + """Set a value at a dotted path like paths./users.get.responses.200.content.""" + parts = path.strip(".").split(".") + current = obj + for part in parts[:-1]: + if part.startswith("[") and part.endswith("]"): + idx = int(part[1:-1]) + current = current[idx] + else: + current = current[part] + last = parts[-1] + if last.startswith("[") and last.endswith("]"): + idx = int(last[1:-1]) + current[idx] = value + else: + current[last] = value + +def main(): + spec = load_spec() + schemas = spec.setdefault("components", {}).setdefault("schemas", {}) + + # 1. Extract the full 401 error response schema + # Find the first 401 response and use it as the canonical version + error_401_schema = None + for path, methods in spec.get("paths", {}).items(): + for method, op in methods.items(): + if "401" in op.get("responses", {}): + content = op["responses"]["401"].get("content", {}) + if "application/json" in content: + error_401_schema = copy.deepcopy(content["application/json"].get("schema")) + break + if error_401_schema: + break + + if error_401_schema: + schemas["UnauthorizedErrorResponse"] = error_401_schema + # Replace all matching 401 response schemas + for path, methods in spec.get("paths", {}).items(): + for method, op in methods.items(): + if "401" in op.get("responses", {}): + content = op["responses"]["401"].get("content", {}) + if "application/json" in content: + if content["application/json"].get("schema") == error_401_schema: + content["application/json"]["schema"] = {"$ref": "#/components/schemas/UnauthorizedErrorResponse"} + + # 2. Extract the full 400 error response schema + error_400_schema = None + for path, methods in spec.get("paths", {}).items(): + for method, op in methods.items(): + if "400" in op.get("responses", {}): + content = op["responses"]["400"].get("content", {}) + if "application/json" in content: + error_400_schema = copy.deepcopy(content["application/json"].get("schema")) + break + if error_400_schema: + break + + if error_400_schema: + schemas["BadRequestErrorResponse"] = error_400_schema + for path, methods in spec.get("paths", {}).items(): + for method, op in methods.items(): + if "400" in op.get("responses", {}): + content = op["responses"]["400"].get("content", {}) + if "application/json" in content: + if content["application/json"].get("schema") == error_400_schema: + content["application/json"]["schema"] = {"$ref": "#/components/schemas/BadRequestErrorResponse"} + + # 3. Extract the full 200 response schema for /livetv/dvrs endpoints + # These all have the same MediaContainerWithStatus + DVR wrapper + dvr_response_schema = None + dvr_endpoints = [ + ("/livetv/dvrs", "get"), + ("/livetv/dvrs/{dvrId}", "get"), + ("/livetv/dvrs/{dvrId}/lineups", "delete"), + ("/livetv/dvrs/{dvrId}/lineups", "put"), + ("/livetv/dvrs/{dvrId}/prefs", "put"), + ("/livetv/dvrs/{dvrId}/lineups", "post"), + ("/livetv/dvrs/{dvrId}/prefs", "get"), + ("/livetv/dvrs/{dvrId}/refresh", "get"), + ] + for path, method in dvr_endpoints: + if path in spec.get("paths", {}) and method in spec["paths"][path]: + content = spec["paths"][path][method].get("responses", {}).get("200", {}).get("content", {}) + if "application/json" in content: + dvr_response_schema = copy.deepcopy(content["application/json"].get("schema")) + break + + if dvr_response_schema: + schemas["DVRResponse"] = dvr_response_schema + for path, method in dvr_endpoints: + if path in spec.get("paths", {}) and method in spec["paths"][path]: + content = spec["paths"][path][method].get("responses", {}).get("200", {}).get("content", {}) + if "application/json" in content: + if content["application/json"].get("schema") == dvr_response_schema: + content["application/json"]["schema"] = {"$ref": "#/components/schemas/DVRResponse"} + + # 4. Extract Channel response schema + channel_response_schema = None + for path in ["/livetv/epg/channels", "/livetv/epg/lineupchannels"]: + if path in spec.get("paths", {}): + content = spec["paths"][path].get("get", {}).get("responses", {}).get("200", {}).get("content", {}) + if "application/json" in content: + channel_response_schema = copy.deepcopy(content["application/json"].get("schema")) + break + + if channel_response_schema: + schemas["ChannelResponse"] = channel_response_schema + for path in ["/livetv/epg/channels", "/livetv/epg/lineupchannels"]: + if path in spec.get("paths", {}): + content = spec["paths"][path].get("get", {}).get("responses", {}).get("200", {}).get("content", {}) + if "application/json" in content: + if content["application/json"].get("schema") == channel_response_schema: + content["application/json"]["schema"] = {"$ref": "#/components/schemas/ChannelResponse"} + + save_spec(spec) + print(f"Total schemas: {len(schemas)}") + print("Done. Run prettier and speakeasy lint to validate.") + +if __name__ == "__main__": + main() From 5dd489992976bf16f7b0f087592c150fbda31f96 Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 15:38:39 -0500 Subject: [PATCH 04/26] fix: address CodeRabbit PR review feedback CI & Security: - Pin all GitHub Actions to commit SHAs - Add least-privilege permissions block to discovery workflow - Add concurrency group to prevent overlapping runs - Add if: always() to artifact upload steps - Clone Arbiter repo in CI before docker-compose build Scripts: - diff_analyzer.py: defensive JSONL parsing, remove unused path_methods param - generate_traffic.py: prefix unused body variable - extract_schemas.py: safe extraction with try/except for missing keys - phase2_backfill.py / phase2_backfill_b.py: graceful error handling in load_spec() Spec: - Add info.description and contact.email - Replace nullable with type: ['string', 'null'] for OpenAPI 3.1 - Add missing type annotations to schemas --- .github/workflows/discovery.yml | 26 +++- scripts/discovery/diff_analyzer.py | 11 +- scripts/discovery/generate_traffic.py | 2 +- scripts/extract_schemas.py | 163 +++++++++++++------------- scripts/phase2_backfill.py | 13 +- scripts/phase2_backfill_b.py | 13 +- 6 files changed, 131 insertions(+), 97 deletions(-) diff --git a/.github/workflows/discovery.yml b/.github/workflows/discovery.yml index e2f6d2da1..c3cfe2ce7 100644 --- a/.github/workflows/discovery.yml +++ b/.github/workflows/discovery.yml @@ -5,15 +5,29 @@ on: - cron: '0 6 * * *' workflow_dispatch: +permissions: + contents: read + actions: write + +concurrency: + group: nightly-discovery + cancel-in-progress: true + jobs: discover: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + + - name: Clone Arbiter + run: | + git clone https://github.com/LukasParke/arbiter.git ../arbiter - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 with: python-version: '3.12' @@ -23,7 +37,7 @@ jobs: pip install pyyaml - name: Set up Docker Compose - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2320ee5c88db75466b73 # v3.10.0 - name: Run discovery pipeline run: | @@ -33,13 +47,15 @@ jobs: PLEX_CLAIM_TOKEN: ${{ secrets.PLEX_CLAIM_TOKEN }} - name: Upload diff report - uses: actions/upload-artifact@v4 + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: diff-report path: /tmp/diff_report.json - name: Upload traffic capture - uses: actions/upload-artifact@v4 + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: traffic-capture path: /tmp/traffic.jsonl diff --git a/scripts/discovery/diff_analyzer.py b/scripts/discovery/diff_analyzer.py index 9dafd2f0b..d7b4d46dd 100755 --- a/scripts/discovery/diff_analyzer.py +++ b/scripts/discovery/diff_analyzer.py @@ -62,7 +62,12 @@ def extract_traffic_paths(traffic_path): line = line.strip() if not line: continue - entry = json.loads(line) + try: + entry = json.loads(line) + except json.JSONDecodeError: + continue + if "path" not in entry or "method" not in entry: + continue raw_path = urlparse(entry["path"]).path norm = normalize_path(raw_path) method = entry["method"].upper() @@ -76,7 +81,7 @@ def extract_traffic_paths(traffic_path): return traffic_set, path_methods, path_params -def build_report(spec_set, traffic_set, path_methods, path_params, spec): +def build_report(spec_set, traffic_set, path_params, spec): missing_in_spec = traffic_set - spec_set # Also check for methods on known paths that are missing missing_methods = [] @@ -141,7 +146,7 @@ def main(): spec_set = extract_spec_paths(spec) traffic_set, path_methods, path_params = extract_traffic_paths(TRAFFIC_PATH) - report = build_report(spec_set, traffic_set, path_methods, path_params, spec) + report = build_report(spec_set, traffic_set, path_params, spec) with open(REPORT_PATH, "w") as f: json.dump(report, f, indent=2) diff --git a/scripts/discovery/generate_traffic.py b/scripts/discovery/generate_traffic.py index 3f6fb7e27..35e8714f6 100755 --- a/scripts/discovery/generate_traffic.py +++ b/scripts/discovery/generate_traffic.py @@ -128,7 +128,7 @@ def run(base: str, token: str = None): print(f"[TRAFFIC] Hitting {len(endpoints)} endpoints via {base} ...", file=sys.stderr) for method, path in endpoints: - status, body = fetch(base, path, method=method, headers=headers) + status, _body = fetch(base, path, method=method, headers=headers) indicator = "✓" if status == 200 else "○" if status in (401, 403) else "✗" print(f" {indicator} {method} {path} -> {status}", file=sys.stderr) time.sleep(0.1) diff --git a/scripts/extract_schemas.py b/scripts/extract_schemas.py index 3965e49d9..55578cad6 100644 --- a/scripts/extract_schemas.py +++ b/scripts/extract_schemas.py @@ -4,6 +4,8 @@ Run from repo root: python scripts/extract_schemas.py """ +import os +import sys import yaml from copy import deepcopy @@ -11,8 +13,15 @@ def load_spec(): - with open(SPEC_PATH, "r") as f: - return yaml.safe_load(f) + if not os.path.exists(SPEC_PATH): + print(f"Error: Specification file not found at {SPEC_PATH}", file=sys.stderr) + sys.exit(1) + try: + with open(SPEC_PATH) as f: + return yaml.safe_load(f) + except yaml.YAMLError as e: + print(f"Error: Failed to parse YAML in {SPEC_PATH}: {e}", file=sys.stderr) + sys.exit(1) def save_spec(spec): @@ -20,114 +29,100 @@ def save_spec(spec): yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) +def _safe_extract(spec, path_keys, schema_name, item_key="items"): + """Safely extract an inline schema from a nested path.""" + try: + current = spec + for key in path_keys: + current = current[key] + spec["components"]["schemas"][schema_name] = deepcopy(current) + # Replace with $ref + parent = spec + for key in path_keys[:-1]: + parent = parent[key] + parent[path_keys[-1]] = {"$ref": f"#/components/schemas/{schema_name}"} + print(f"Extracted {schema_name} schema") + except KeyError as e: + print(f"Warning: Could not extract {schema_name} schema - missing key: {e}", file=sys.stderr) + + def extract_activity(spec): """Extract Activity inline schema from /activities GET 200 response.""" - items = spec["paths"]["/activities"]["get"]["responses"]["200"]["content"][ - "application/json" - ]["schema"]["properties"]["MediaContainer"]["allOf"][0]["properties"]["Activity"][ - "items" - ] - spec["components"]["schemas"]["Activity"] = items - spec["paths"]["/activities"]["get"]["responses"]["200"]["content"][ - "application/json" - ]["schema"]["properties"]["MediaContainer"]["allOf"][0]["properties"]["Activity"][ - "items" - ] = {"$ref": "#/components/schemas/Activity"} - print("Extracted Activity schema") + _safe_extract( + spec, + ["paths", "/activities", "get", "responses", "200", "content", + "application/json", "schema", "properties", "MediaContainer", + "allOf", 0, "properties", "Activity", "items"], + "Activity", + ) def extract_butler_task(spec): """Extract ButlerTask inline schema from /butler GET 200 response.""" - items = spec["paths"]["/butler"]["get"]["responses"]["200"]["content"][ - "application/json" - ]["schema"]["properties"]["ButlerTasks"]["properties"]["ButlerTask"]["items"] - spec["components"]["schemas"]["ButlerTask"] = items - spec["paths"]["/butler"]["get"]["responses"]["200"]["content"][ - "application/json" - ]["schema"]["properties"]["ButlerTasks"]["properties"]["ButlerTask"]["items"] = { - "$ref": "#/components/schemas/ButlerTask" - } - print("Extracted ButlerTask schema") + _safe_extract( + spec, + ["paths", "/butler", "get", "responses", "200", "content", + "application/json", "schema", "properties", "ButlerTasks", + "properties", "ButlerTask", "items"], + "ButlerTask", + ) def extract_updater_release(spec): """Extract Release inline schema from /updater/status GET 200 response.""" - items = spec["paths"]["/updater/status"]["get"]["responses"]["200"]["content"][ - "application/json" - ]["schema"]["properties"]["MediaContainer"]["allOf"][0]["properties"]["Release"][ - "items" - ] - spec["components"]["schemas"]["UpdaterRelease"] = items - spec["paths"]["/updater/status"]["get"]["responses"]["200"]["content"][ - "application/json" - ]["schema"]["properties"]["MediaContainer"]["allOf"][0]["properties"]["Release"][ - "items" - ] = {"$ref": "#/components/schemas/UpdaterRelease"} - print("Extracted UpdaterRelease schema") + _safe_extract( + spec, + ["paths", "/updater/status", "get", "responses", "200", "content", + "application/json", "schema", "properties", "MediaContainer", + "allOf", 0, "properties", "Release", "items"], + "UpdaterRelease", + ) def extract_download_queue(spec): """Extract DownloadQueue inline schema from POST /downloadQueue 200 response.""" - schema = spec["paths"]["/downloadQueue"]["post"]["responses"]["200"]["content"][ - "application/json" - ]["schema"]["properties"]["MediaContainer"]["allOf"][1]["properties"]["DownloadQueue"] - spec["components"]["schemas"]["DownloadQueue"] = schema - spec["paths"]["/downloadQueue"]["post"]["responses"]["200"]["content"][ - "application/json" - ]["schema"]["properties"]["MediaContainer"]["allOf"][1]["properties"][ - "DownloadQueue" - ] = {"$ref": "#/components/schemas/DownloadQueue"} - print("Extracted DownloadQueue schema") + _safe_extract( + spec, + ["paths", "/downloadQueue", "post", "responses", "200", "content", + "application/json", "schema", "properties", "MediaContainer", + "allOf", 1, "properties", "DownloadQueue"], + "DownloadQueue", + item_key=None, + ) def extract_download_queue_item(spec): """Extract DownloadQueueItem inline schema from GET /downloadQueue/{queueId}/items.""" - items = spec["paths"]["/downloadQueue/{queueId}/items"]["get"]["responses"]["200"][ - "content" - ]["application/json"]["schema"]["properties"]["MediaContainer"]["allOf"][1][ - "properties" - ]["DownloadQueueItem"]["items"] - spec["components"]["schemas"]["DownloadQueueItem"] = items - spec["paths"]["/downloadQueue/{queueId}/items"]["get"]["responses"]["200"][ - "content" - ]["application/json"]["schema"]["properties"]["MediaContainer"]["allOf"][1][ - "properties" - ]["DownloadQueueItem"]["items"] = {"$ref": "#/components/schemas/DownloadQueueItem"} - print("Extracted DownloadQueueItem schema") + _safe_extract( + spec, + ["paths", "/downloadQueue/{queueId}/items", "get", "responses", "200", + "content", "application/json", "schema", "properties", "MediaContainer", + "allOf", 1, "properties", "DownloadQueueItem", "items"], + "DownloadQueueItem", + ) def extract_media_grabber(spec): """Extract MediaGrabber inline schema from GET /media/grabbers.""" - items = spec["paths"]["/media/grabbers"]["get"]["responses"]["200"]["content"][ - "application/json" - ]["schema"]["properties"]["MediaContainer"]["allOf"][1]["properties"][ - "MediaGrabber" - ]["items"] - spec["components"]["schemas"]["MediaGrabber"] = items - spec["paths"]["/media/grabbers"]["get"]["responses"]["200"]["content"][ - "application/json" - ]["schema"]["properties"]["MediaContainer"]["allOf"][1]["properties"][ - "MediaGrabber" - ]["items"] = {"$ref": "#/components/schemas/MediaGrabber"} - print("Extracted MediaGrabber schema") + _safe_extract( + spec, + ["paths", "/media/grabbers", "get", "responses", "200", "content", + "application/json", "schema", "properties", "MediaContainer", + "allOf", 1, "properties", "MediaGrabber", "items"], + "MediaGrabber", + ) def extract_device_channel(spec): """Extract DeviceChannel inline schema from GET /media/grabbers/devices/{deviceId}/channels.""" - items = spec["paths"]["/media/grabbers/devices/{deviceId}/channels"]["get"][ - "responses" - ]["200"]["content"]["application/json"]["schema"]["properties"]["MediaContainer"][ - "allOf" - ][1]["properties"]["DeviceChannel"]["items"] - spec["components"]["schemas"]["DeviceChannel"] = items - spec["paths"]["/media/grabbers/devices/{deviceId}/channels"]["get"]["responses"][ - "200" - ]["content"]["application/json"]["schema"]["properties"]["MediaContainer"][ - "allOf" - ][1]["properties"]["DeviceChannel"]["items"] = { - "$ref": "#/components/schemas/DeviceChannel" - } - print("Extracted DeviceChannel schema") + _safe_extract( + spec, + ["paths", "/media/grabbers/devices/{deviceId}/channels", "get", + "responses", "200", "content", "application/json", "schema", + "properties", "MediaContainer", "allOf", 1, "properties", + "DeviceChannel", "items"], + "DeviceChannel", + ) def main(): diff --git a/scripts/phase2_backfill.py b/scripts/phase2_backfill.py index 2cae7391d..b0b6b89c4 100644 --- a/scripts/phase2_backfill.py +++ b/scripts/phase2_backfill.py @@ -11,8 +11,17 @@ def load_spec(): - with open(SPEC_PATH, "r") as f: - return yaml.safe_load(f) + import os + import sys + if not os.path.exists(SPEC_PATH): + print(f"Error: Specification file not found at {SPEC_PATH}", file=sys.stderr) + sys.exit(1) + try: + with open(SPEC_PATH) as f: + return yaml.safe_load(f) + except yaml.YAMLError as e: + print(f"Error: Failed to parse YAML in {SPEC_PATH}: {e}", file=sys.stderr) + sys.exit(1) def save_spec(spec): diff --git a/scripts/phase2_backfill_b.py b/scripts/phase2_backfill_b.py index 504b54bcb..15f16bdf3 100644 --- a/scripts/phase2_backfill_b.py +++ b/scripts/phase2_backfill_b.py @@ -10,8 +10,17 @@ def load_spec(): - with open(SPEC_PATH, "r") as f: - return yaml.safe_load(f) + import os + import sys + if not os.path.exists(SPEC_PATH): + print(f"Error: Specification file not found at {SPEC_PATH}", file=sys.stderr) + sys.exit(1) + try: + with open(SPEC_PATH) as f: + return yaml.safe_load(f) + except yaml.YAMLError as e: + print(f"Error: Failed to parse YAML in {SPEC_PATH}: {e}", file=sys.stderr) + sys.exit(1) def save_spec(spec): From 4039d7b2b906fe0962318e131cef59afb8a2ef72 Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 16:07:28 -0500 Subject: [PATCH 05/26] feat: add Phase 4 plex.tv v2 account, social, and utility endpoints MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds 14 new paths (15 operations): - /cloud_server, /geoip, /ip, /downloads/{channel}.json - /server, /server/access_tokens, /server/users/features - /users/account, /users/account.json, /users/password - /user/view_state_sync, /user/{uuid}/settings/opt_outs - /myplex/claim, /webhooks (GET + POST) Also fixes: - 4 typos (devcie→device, mulitple→multiple, avd→and, opration→operation) - Expanded info.description with auth, format, and rate-limiting notes Validation: 0 speakeasy errors, 0 vacuum errors, prettier clean --- REMAINING_GAPS_PLAN.md | 455 ++++++++++++++++++++++++++++++++++++ plex-api-spec.yaml | 511 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 961 insertions(+), 5 deletions(-) create mode 100644 REMAINING_GAPS_PLAN.md diff --git a/REMAINING_GAPS_PLAN.md b/REMAINING_GAPS_PLAN.md new file mode 100644 index 000000000..b443fa4d8 --- /dev/null +++ b/REMAINING_GAPS_PLAN.md @@ -0,0 +1,455 @@ +# Plex API Spec — Remaining Gaps & Phased Implementation Plan + +**Date:** 2026-06-03 +**Source:** 11 review documents (~3,777 lines of analysis) from agent swarm review +**Current Spec State:** 267 paths, 91 schemas, 315 operations, 0 speakeasy errors, 0 vacuum errors +**Goal:** 100% documentation parity — absolute source of truth for all things Plex API + +--- + +## Executive Summary + +| Category | Review Recs | Done | Remaining | Coverage | +|----------|-------------|------|-----------|----------| +| Missing endpoints | ~175 | ~71 | ~104 | 41% | +| Schema extractions | ~18 | ~18 | 0 | 100% | +| Schema field gaps | ~75 | ~5 | ~70 | 7% | +| Query param gaps | ~80 | ~8 | ~72 | 10% | +| Response/status fixes | ~15 | ~5 | ~10 | 33% | +| Auth/security gaps | ~18 | ~6 | ~12 | 33% | +| Documentation issues | ~45 | ~10 | ~35 | 22% | + +**What this PR accomplished:** All CRITICAL priorities (OAuth PIN, cloud providers, client remote-control, schema deduplication, CI tooling). +**What remains:** Primarily MEDIUM-priority plex.tv social endpoints, deep schema field coverage, query parameter completeness, and documentation polish. + +--- + +## Phase 4: Plex.tv v2 Account, Social & Sharing +**Priority: HIGH** | **Estimated Effort: 3–4 days** | **Target: ~25 new endpoints** + +This is the largest remaining functional gap. The spec is still PMS-centric; the entire plex.tv v2 social surface is missing. + +### 4.1 Auth & Account Completion +| Endpoint | Method | Source | +|----------|--------|--------| +| `/api/v2/users/signout` | `DELETE` | python-plexapi | +| `/api/v2/ping` | `GET` | Tautulli, Overseerr | +| `/api/v2/features` | `GET` | Plex Forum | +| `/api/v2/friends` | `GET` | Plex Forum | +| `/api/v2/home` | `GET` | Plex Forum | +| `/api/v2/server` | `GET` | Plex Forum | +| `/api/v2/users/password` | `POST` | Plex Forum | +| `/api/v2/user/view_state_sync` | `PUT` | python-plexapi | +| `/api/v2/user/{uuid}/settings/opt_outs` | `GET` | python-plexapi | +| `/users/account` | `GET` | Tautulli, Overseerr | +| `/users/account.json` | `GET` | Tautulli, Overseerr | + +### 4.2 Server Sharing & Plex Home +| Endpoint | Method | Source | +|----------|--------|--------| +| `/api/v2/shared_servers` | `POST` | python-plexapi, Plexopedia | +| `/api/v2/sharings/{userId}` | `PUT` | python-plexapi | +| `/api/v2/sharings/{userId}` | `DELETE` | python-plexapi | +| `/api/v2/home/users/restricted/{userId}` | `PUT` | python-plexapi | +| `/api/home/users` | `GET` / `POST` | python-plexapi | +| `/api/home/users/{userId}` | `DELETE` / `PUT` | python-plexapi | +| `/api/home/users/{id}/switch` | `POST` | python-plexapi | +| `/api/servers/{machineId}/shared_servers` | `POST` | python-plexapi, Tautulli | +| `/api/servers/{machineId}` | `GET` | python-plexapi | +| `/api/claim/token.json` | `GET` | python-plexapi | +| `POST /myplex/claim` | `POST` | python-plexapi | + +### 4.3 Webhooks +| Endpoint | Method | Source | +|----------|--------|--------| +| `/api/v2/user/webhooks` | `GET` | python-plexapi | +| `/api/v2/user/webhooks` | `POST` | python-plexapi | +| *Webhook payload schema* | inbound | Bazarr, Home Assistant, Tautulli | + +### 4.4 Utility Endpoints +| Endpoint | Method | Source | +|----------|--------|--------| +| `/api/v2/server/access_tokens` | `GET` | CVE-2025-34158 write-up | +| `/api/v2/server/users/features` | `GET` | Plex Forum | +| `/api/v2/cloud_server` | `GET` | Tautulli | +| `/api/v2/geoip` | `GET` | Tautulli | +| `/:/ip` | `GET` | Tautulli | +| `/api/downloads/{channel}.json` | `GET` | Tautulli | + +### 4.5 Security & Auth Documentation +- [ ] Add JWT bearer security scheme (documented but not formalized) +- [ ] Document rate limiting on auth endpoints +- [ ] Add note that `X-Plex-Token` may be passed as query parameter on all endpoints +- [ ] Document `X-Plex-Client-Identifier` as mandatory for PIN and JWT flows +- [ ] Document v1 vs v2 base URL split and deprecation trajectory + +### Validation Gates +- [ ] `speakeasy lint` = 0 errors +- [ ] `vacuum lint` = 0 errors +- [ ] `prettier --check` passes +- [ ] All new plex.tv endpoints use correct `servers:` override +- [ ] All new endpoints have `operationId`, `summary`, `description` + +--- + +## Phase 5: Schema Depth & Completeness +**Priority: MEDIUM** | **Estimated Effort: 2–3 days** | **Target: ~40 new fields, 5 new schemas** + +Deep field-level coverage is the biggest contributor to SDK quality. Generated SDKs cannot expose fields that are not in the spec. + +### 5.1 Metadata Fields +Add to `Metadata` schema (or type-specific sub-schemas): + +| Field | Type | Source | +|-------|------|--------| +| `artBlurHash` | string | video.py, audio.py | +| `thumbBlurHash` | string | video.py, audio.py | +| `lastRatedAt` | integer (timestamp) | video.py, audio.py | +| `editionTitle` | string | video.py (Movie) | +| `languageOverride` | string | video.py (Movie, Show) | +| `enableCreditsMarkerGeneration` | boolean | video.py (Movie, Show) | +| `useOriginalTitle` | boolean | video.py (Movie, Show) | +| `slug` | string | video.py (Movie, Show) | +| `skipCount` | integer | audio.py (Track) | +| `musicAnalysisVersion` | integer | audio.py (Audio base) | +| `sourceURI` | string | video.py, audio.py, playlist.py | +| `playlistItemID` | integer | base.py (Playable) | + +### 5.2 Media Fields +Add to `Media` schema: + +| Field | Type | Source | +|-------|------|--------| +| `uuid` | string | media.py | +| `selected` | boolean | media.py | + +### 5.3 Part Fields +Add to `Part` schema: + +| Field | Type | Source | +|-------|------|--------| +| `protocol` | string (dash, hls) | media.py | +| `packetLength` | integer | media.py | +| `requiredBandwidths` | string (list) | media.py | +| `syncItemId` | integer | media.py | +| `syncState` | string | media.py | +| `deepAnalysisVersion` | integer | media.py | + +### 5.4 Stream Fields +**AudioStream:** +| Field | Type | Source | +|-------|------|--------| +| `bitrateMode` | string (cbr, vbr) | media.py | +| `visualImpaired` | boolean | media.py | +| `albumGain` | number | media.py | +| `albumPeak` | number | media.py | +| `albumRange` | number | media.py | +| `endRamp` | string | media.py | +| `gain` | number | media.py | +| `loudness` | number | media.py | +| `lra` | number | media.py | +| `peak` | number | media.py | +| `startRamp` | string | media.py | + +**SubtitleStream:** +| Field | Type | Source | +|-------|------|--------| +| `providerTitle` | string | media.py | +| `score` | number | media.py | +| `sourceKey` | string | media.py | +| `transient` | boolean | media.py | +| `userID` | integer | media.py | +| `perfectMatch` | boolean | media.py | + +**LyricStream:** +| Field | Type | Source | +|-------|------|--------| +| `minLines` | integer | media.py | +| `provider` | string | media.py | +| `timed` | boolean | media.py | + +### 5.5 New Standalone Schemas +- [ ] `Collection` — collection-specific fields (`collectionMode`, `collectionPublished`, `collectionSort`, `collectionFilterBasedOnUser`, `artBlurHash`, `thumbBlurHash`, `userRating`, `lastRatedAt`) +- [ ] `Provider` / `ProviderFeature` — extract from `/media/providers` response +- [ ] `MediaContainerWithPlayQueue` — distinct from playlist schema; includes `playQueueLastAddedItemID`, `playQueueSelectedItemID`, `playQueueSelectedItemOffset`, `playQueueSelectedMetadataItemID`, `playQueueShuffled`, `playQueueSourceURI`, `playQueueTotalCount`, `playQueueVersion` +- [ ] `WebhookPayload` — `multipart/form-data` JSON payload + thumbnail +- [ ] `Session` expansion — add `sessionKey`, `uuid`, `title`, `userID`, or document that consumers rely on embedded `Player`/`User`/`Metadata` + +### 5.6 DVR / Live TV Schema Cleanup +- [ ] `Channel` — add missing EPG fields: `favorite`, `drm`, `signalQuality`, `signalStrength` +- [ ] `Lineup` — add `key`, `identifier` +- [ ] `MediaSubscription` — document known hint keys instead of `additionalProperties: true` +- [ ] `Device` — add `id`, `name`/`title`, `enabled`, `deviceIdentifier`, `thumb`/`thumbVersion`, `lineup`/`lineupType` + +### Validation Gates +- [ ] `speakeasy lint` = 0 errors +- [ ] `vacuum lint` = 0 errors +- [ ] `prettier --check` passes +- [ ] All new fields have `description` and `example` where possible +- [ ] No duplicate property names introduced + +--- + +## Phase 6: Library, Playback & Query Parameter Completeness +**Priority: MEDIUM** | **Estimated Effort: 2–3 days** | **Target: ~35 endpoints, ~30 query params** + +### 6.1 Missing Library Endpoints +| Endpoint | Method | Priority | +|----------|--------|----------| +| `/library/sections/{id}/onDeck` | `GET` | MEDIUM | +| `/library/sections/{id}/unwatched` | `GET` | MEDIUM | +| `/library/sections/{id}/newest` | `GET` | MEDIUM | +| `/library/sections/{id}/recentlyAdded` | `GET` | MEDIUM | +| `/library/sections/{id}/byYear` | `GET` | LOW | +| `/library/sections/{id}/byDecade` | `GET` | LOW | +| `/library/sections/{id}/byContentRating` | `GET` | LOW | +| `/library/sections/{id}/byResolution` | `GET` | LOW | +| `/library/sections/{id}/byFolder` | `GET` | LOW | +| `/library/sections/{id}/agents` | `GET` | LOW | +| `/library/sections/{id}/match` | `GET` | LOW | +| `/library/sections/{id}/unmatch` | `GET` | LOW | +| `/library/sections/{id}/edit` | `GET` / `PUT` | LOW | +| `/library/sections/{id}/move` | `PUT` | LOW | +| `/library/sections/{id}/settings` | `GET` | LOW | +| `/library/sections/{id}/playlists` | `GET` | LOW | +| `/library/sections/{id}/hubs` | `GET` | LOW | +| `/library/sections/{id}/timeline` | `GET` | LOW | +| `/library/sections/{id}/search` | `GET` | LOW | +| `/library/sections/{id}/tags` | `GET` | LOW | +| `/library/sections/{id}/label` | `GET` | MEDIUM | +| `/library/sections/{id}/refresh` | `GET` / `POST` | MEDIUM | +| `/library/sections/{id}/emptyTrash` | `GET` / `POST` | MEDIUM | +| `/library/sections/{id}/optimize` | `GET` / `POST` | MEDIUM | +| `/library/optimize` | `GET` / `POST` | MEDIUM | +| `/library/recentlyAdded` | `GET` | MEDIUM | +| `/library/metadata/{id}/children` | `GET` | MEDIUM | +| `/library/metadata/{id}/grandchildren` | `GET` | MEDIUM | +| `/library/metadata/{id}/posters` | `POST` | MEDIUM | +| `/library/metadata/{id}/arts` | `POST` | MEDIUM | +| `/library/metadata/{id}/nearest` | `GET` | MEDIUM | +| `/library/metadata/{id}/computePath` | `GET` | MEDIUM | +| `/hubs/home/recentlyAdded` | `GET` | MEDIUM | +| `/hubs/continueWatching/items` | `GET` | MEDIUM | + +### 6.2 Missing Playback Endpoints +| Endpoint | Method | Priority | +|----------|--------|----------| +| `/playlists?type=42` | `GET` / `DELETE` | MEDIUM | +| `/playQueues/1` | `GET` | MEDIUM | +| `/:/progress` | `GET` | MEDIUM | +| `/actions/removeFromContinueWatching` | `PUT` | MEDIUM | +| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s` | `GET` | MEDIUM | +| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts` | `GET` | MEDIUM | +| `/music/:/transcode` | `GET` | MEDIUM | +| `/resources` (on client) | `GET` | MEDIUM | + +### 6.3 Missing Live TV Endpoints +| Endpoint | Method | Priority | +|----------|--------|----------| +| `/livetv/dvrs/{dvrId}` | `PUT` / `PATCH` | LOW | +| `/livetv/dvrs/{dvrId}/channels` | `GET` | LOW | +| `/livetv/dvrs/{dvrId}/guide` or `/livetv/epg/guide` | `GET` | LOW | +| `/livetv/sessions/{sessionId}` | `DELETE` | LOW | +| `/livetv/dvrs/{dvrId}/recordings` or `/livetv/recordings` | `GET` | LOW | +| `/livetv/epg/search` | `GET` | LOW | + +### 6.4 Query Parameters — Library Section Browsing +Add to `/library/sections/{sectionId}/all` and other browse endpoints: + +| Parameter | Type | +|-----------|------| +| `type` | integer | +| `sort` | string | +| `filters` | string | +| `unwatched` | integer (1) | +| `genre`, `studio`, `contentRating`, `resolution`, `year`, `firstCharacter` | string / integer | +| `includeCollections` | boolean | +| `includeExternalMedia` | boolean | +| `includeAdvanced` | boolean | +| `checkFiles` | boolean | +| `includeRelated` | boolean | +| `includeExtras` | boolean | +| `includePopularLeaves` | boolean | +| `includeConcerts` | boolean | +| `includeOnDeck` | boolean | +| `includeChapters` | boolean | +| `includePreferences` | boolean | +| `includeBandwidths` | boolean | +| `includeLoudnessRamps` | boolean | +| `includeStations` | boolean | +| `includeExternalIds` | boolean | +| `includeReviews` | boolean | +| `includeCredits` | boolean | +| `includeArt`, `includeThumb`, `includeBanner`, `includeTheme` | boolean | +| `includeFields` | string | +| `asyncAugmentMetadata` | boolean | +| `asyncRefreshLocalMediaAgent` | boolean | +| `nocache` | boolean | +| `excludeFields` | string | +| `skipRefresh` | boolean | + +### 6.5 Query Parameters — Metadata Detail +Add to `/library/metadata/{ids}`: +- [ ] `includeMarkers` — already done in PR, verify coverage on all metadata GETs +- [ ] `includeChapters`, `includeExternalMedia`, `includeExtras`, `includeRelated`, `includeOnDeck`, `includePopularLeaves`, `includeReviews`, `includeStations` — add where missing + +### 6.6 Query Parameters — Search & Hubs +- [ ] `/hubs/search` — `includeCollections` +- [ ] `/hubs/search/voice` — `includeCollections` + +### 6.7 Query Parameters — History +- [ ] `/status/sessions/history/all` — `includeFields`, `excludeFields`, `includeElements`, `excludeElements` +- [ ] `viewedAt>`, `viewedAt<`, `accountID`, `deviceID` +- [ ] `X-Plex-Container-Start`, `X-Plex-Container-Size` as request params (not just response headers) + +### 6.8 Query Parameters — Transcoder +- [ ] `maxVideoBitrate`, `videoResolution`, `copyts`, `platform` +- [ ] `mediaIndex`, `partIndex` on `/subtitles` + +### 6.9 Query Parameters — Server / System +- [ ] `/statistics/bandwidth` — `timespan` (1–6), `accountID`, `deviceID`, `lan` +- [ ] `/services/browse` — `includeFiles` +- [ ] `/library/metadata/{ids}/refresh` — `skipRefresh` +- [ ] `/library/metadata/{ids}` — `asyncAugmentMetadata=1` + +### Validation Gates +- [ ] `speakeasy lint` = 0 errors +- [ ] `vacuum lint` = 0 errors +- [ ] `prettier --check` passes +- [ ] Arbiter diff against live PMS shows 0 gaps for added endpoints + +--- + +## Phase 7: Documentation Polish, Typos & SDK Generator +**Priority: LOW–MEDIUM** | **Estimated Effort: 1–2 days** | **Target: ~35 doc issues** + +### 7.1 Fix Typos +| Location | Typo | Correction | +|----------|------|------------| +| `POST /livetv/dvrs` description | "devcie" | "device" | +| `GET /livetv/epg/lineupchannels` summary | "mulitple" | "multiple" | +| `PUT /livetv/dvrs/{dvrId}/prefs` description | "avd" | "and" | +| `MediaGrabOperation` description | "opration" | "operation" | + +### 7.2 Missing Descriptions & Examples +- [ ] `PUT /:/prefs` — add example or enum of common preference keys; link to hidden settings reference +- [ ] `PUT /library/metadata/{ids}` — document editable fields (title, summary, tag locks) +- [ ] `uri` parameter on scrobble/unscrobble — remove broken cross-reference or add URI intro section +- [ ] `/media/providers` proxy paths — reference dynamic paths in `Provider` tag description +- [ ] `X-Plex-Container-Start` / `X-Plex-Container-Size` — clarify they are accepted as request headers/query params + +### 7.3 XML vs JSON Notes +- [ ] Add note: "Most PMS endpoints return XML unless `Accept: application/json` is sent" +- [ ] Add note: "plex.tv v2 generally returns JSON by default" +- [ ] Note legacy endpoints (`/pins.xml`, `/api/resources`, `/api/users/`) return XML only +- [ ] Webhook payload: JSON wrapped in `multipart/form-data` field named `payload`; thumbnail as second file part +- [ ] Document where PUT/DELETE return `204 No Content` + +### 7.4 Tag Organization +- [ ] Add `Plex.tv` tag group in `x-tagGroups` to organize cloud endpoints +- [ ] Retag `/media/grabbers/operations/{operationId}` from `Subscriptions` to `Devices` +- [ ] `Devices` tag description — clarify this covers grabber/tuner devices only; client discovery is via `/clients` or `/resources` +- [ ] Verify `/:/scrobble` and `/:/unscrobble` are categorized under a domain tag + +### 7.5 Cross-References +- [ ] `Devices` → `DVRs`, `EPG`, `Live TV`, `Subscriptions` +- [ ] `Download Queue` → `Play Queue` (explain distinction) +- [ ] `Provider` → dynamic proxy paths +- [ ] `Transcoder` → segment delivery URLs +- [ ] `Timeline` → `terminationCode` / `terminationText` session kill behavior + +### 7.6 Speakeasy / SDK Improvements +- [ ] Add `x-speakeasy-retries` for rate-limited endpoints (`/pins`, `/auth/*`) +- [ ] Add `x-speakeasy-unknown-fields: allow` note on heavily `additionalProperties` schemas +- [ ] Consider adding `X-Plex-Client-Profile-Name` and `X-Plex-Client-Profile-Extra` to `x-speakeasy-globals` +- [ ] Remove or use orphaned components: `Title`, `Type`, `UpdaterRelease`, `X-Plex-Client-Profile-Extra`, `X-Plex-Client-Profile-Name`, `X-Plex-Session-Identifier`, `500` response + +### Validation Gates +- [ ] `prettier --check` passes +- [ ] `speakeasy lint` = 0 errors +- [ ] `vacuum lint` = 0 errors +- [ ] All typos verified fixed via grep + +--- + +## Phase 8: JWT Device Registration & Legacy Endpoints +**Priority: MEDIUM** | **Estimated Effort: 1 day** | **Target: 4 endpoints + legacy coverage** + +### 8.1 JWT Device Registration (2025) +| Endpoint | Method | Source | +|----------|--------|--------| +| `/api/v2/auth/jwk` | `POST` | Plex Pro Week blog, JonnyWong16 gist | +| `/api/v2/auth/nonce` | `GET` | JonnyWong16 gist | +| `/api/v2/auth/token` | `POST` | JonnyWong16 gist | +| `/api/v2/auth/keys` | `GET` | JonnyWong16 gist | + +### 8.2 Legacy plex.tv Endpoints (XML-first) +| Endpoint | Method | Notes | +|----------|--------|-------| +| `/pins.xml` | `POST` | Legacy PIN (XML) | +| `/pins/{pinId}` | `GET` | Legacy PIN check (XML) | +| `/api/resources` | `GET` | Legacy published server connections | +| `/api/users/` | `GET` | Legacy friends list | +| `/devices.xml` | `GET` | Authorized devices with tokens | + +### 8.3 Documentation +- [ ] Document JWT flow: `POST /auth/jwk` → `GET /auth/nonce` → `POST /auth/token` (7-day expiry) +- [ ] Document Ed25519 keypair requirement +- [ ] Note XML-only responses for legacy endpoints + +--- + +## Phase 9: Discovery Pipeline Hardening +**Priority: MEDIUM** | **Estimated Effort: 2–3 days** | **Ongoing** + +### 9.1 Arbiter Enhancements +- [ ] Add `diff-against` auto-fix mode — suggest YAML patches for gaps +- [ ] Add coverage dashboard — % of observed paths documented vs undocumented +- [ ] Add schema inference from live traffic — auto-suggest response schemas +- [ ] Support plex.tv traffic capture (not just PMS) + +### 9.2 CI Improvements +- [ ] Run discovery on PRs with `exit-on-gap: false` and post gap report as PR comment +- [ ] Add vacuum quality score gate (currently 25/100 — set target 50/100) +- [ ] Auto-open issue when nightly discovery finds new undocumented endpoints + +### 9.3 Continuous Validation +- [ ] Weekly diff review — human-in-the-loop for inferred schema changes +- [ ] Monthly full Arbiter run against staging PMS with all features enabled + +--- + +## Appendix A: Priority Triage Matrix + +| Priority | Count | Effort | Impact | Recommendation | +|----------|-------|--------|--------|----------------| +| CRITICAL | 0 | — | — | All addressed in current PR ✅ | +| HIGH | ~25 endpoints | 3–4 days | Blocks modern integrations | Phase 4 immediately | +| MEDIUM | ~100 endpoints/fields/params | 5–7 days | SDK completeness | Phases 5–6 next | +| LOW | ~35 doc/typos/SDK | 1–2 days | Polish & trust | Phase 7 | +| ONGOING | Pipeline | 2–3 days setup | Sustainability | Phase 9 | + +## Appendix B: Source Document Mapping + +| Review Document | Key Sections | Covered by Phase | +|-----------------|--------------|------------------| +| `PLEX_API_SPEC_FULL_REVIEW.md` | All | 4–8 | +| `python_plexapi_gap_analysis.md` | Endpoints, schemas, params | 4–6 | +| `integration_ecosystem_gaps.md` | Webhooks, WS, auth | 4, 6, 8 | +| `undocumented_endpoints_research.md` | Hidden endpoints, XML quirks | 4, 6, 8 | +| `domain_auth_account_review.md` | Security, scopes, OAuth, JWT | 4, 8 | +| `domain_server_system_review.md` | Activities, butler, updater, logs | 5 (schema depth) | +| `domain_library_metadata_review.md` | Metadata fields, library endpoints | 5, 6 | +| `domain_media_provider_review.md` | Providers, hubs, search | 5, 6 | +| `domain_playback_sessions_review.md` | Remote control, transcoder, WS | 6 (remaining endpoints) | +| `domain_livetv_dvr_review.md` | DVRs, EPG, sessions | 5, 6 | +| `domain_devices_download_review.md` | Devices, download queue | 5 | + +## Appendix C: Validation Gates (All Phases) + +Every phase must pass: +1. `prettier --check plex-api-spec.yaml` +2. `speakeasy lint openapi -s plex-api-spec.yaml` → 0 errors +3. `vacuum lint plex-api-spec.yaml` → 0 errors +4. Arbiter diff against live PMS → 0 new gaps for added endpoints (where testable) +5. PR review by CodeRabbit or equivalent automated review diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index 46755fe89..f6b6f8406 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -2,7 +2,33 @@ openapi: 3.1.1 info: title: Plex Media Server version: 1.1.1 - description: OpenAPI specification for Plex Media Server API + description: |- + OpenAPI specification for the Plex Media Server (PMS) API and the plex.tv cloud API. + + ## Base URLs + + - **PMS (local server)**: `http(s)://{host}:{port}` — Most endpoints in this spec target the local PMS. + - **plex.tv v2**: `https://plex.tv/api/v2` — Authentication, account, and social endpoints. + - **plex.tv v1 (legacy)**: `https://plex.tv/api` — Legacy XML endpoints (friends, home users, claims). + - **Cloud providers**: `https://discover.provider.plex.tv`, `https://metadata.provider.plex.tv`, etc. + + Endpoints that target plex.tv or cloud providers declare an override `servers` array. + + ## Authentication + + - **X-Plex-Token**: Pass via the `X-Plex-Token` header on every request. It may also be passed as a query parameter (`?X-Plex-Token=...`) on all endpoints. + - **X-Plex-Client-Identifier**: Mandatory for OAuth PIN flow (`/pins`) and JWT device registration. Must be a unique, persistent identifier for the client application. + - **OAuth PIN Flow**: `POST /pins` → user visits `https://plex.tv/link` → `GET /pins/{pinId}` → obtain `authToken`. + + ## Response Formats + + - **PMS endpoints**: Return XML by default. Send `Accept: application/json` to receive JSON. + - **plex.tv v2**: Returns JSON by default. + - **Legacy v1 endpoints** (`/pins.xml`, `/api/resources`, `/api/users/`): Return XML only. + + ## Rate Limiting + + plex.tv auth endpoints (PIN creation, sign-in) enforce rate limits. Clients should implement exponential backoff and reuse tokens rather than re-authenticating on every request. contact: name: Plex API Spec Maintainers url: https://github.com/LukasParke/plex-api-spec @@ -1034,6 +1060,38 @@ paths: type: array items: $ref: "#/components/schemas/PlexDevice" + /cloud_server: + get: + operationId: getCloudServer + summary: Get Cloud Server + tags: + - General + description: Get Plex Cloud server status for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /devices: get: operationId: getSystemDevices @@ -1211,6 +1269,38 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" + /geoip: + get: + operationId: getGeoIP + summary: Get GeoIP + tags: + - General + description: Get GeoIP lookup information for the current request. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /home/users: get: operationId: getHomeUsers @@ -1610,6 +1700,38 @@ paths: version: description: The full version string of the PMS type: string + /ip: + get: + operationId: getPublicIP + summary: Get Public IP + tags: + - General + description: Get the public IP address detected by Plex. + servers: + - url: https://plex.tv + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/all: get: operationId: getLibraryItems @@ -2357,7 +2479,7 @@ paths: summary: Create a DVR tags: - DVRs - description: Creation of a DVR, after creation of a devcie and a lineup is selected + description: Creation of a DVR, after creation of a device and a lineup is selected security: - token: - admin @@ -2633,7 +2755,7 @@ paths: /livetv/epg/lineupchannels: get: operationId: getLineupChannels - summary: Get the channels for mulitple lineups + summary: Get the channels for multiple lineups tags: - EPG description: Get the channels across multiple lineups @@ -3306,6 +3428,36 @@ paths: description: User cannot access DVR on this server content: text/html: {} + /myplex/claim: + post: + operationId: claimServer + summary: Claim Server + tags: + - General + description: Claim the local PMS server using a claim token obtained from plex.tv. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /photo/:/transcode: get: operationId: transcodeImage @@ -4661,6 +4813,102 @@ paths: description: Invalid or no token provided or a transient token could not be created content: text/html: {} + /server: + get: + operationId: getUserServer + summary: Get User Server Association + tags: + - Users + description: Get server association information for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /server/access_tokens: + get: + operationId: getServerAccessTokens + summary: Get Server Access Tokens + tags: + - Authentication + description: List access tokens for the server. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /server/users/features: + get: + operationId: getServerUserFeatures + summary: Get Server User Features + tags: + - Users + description: Get features enabled per shared user for the server. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /servers: get: operationId: getLocalServers @@ -5493,6 +5741,34 @@ paths: application/json: schema: $ref: "#/components/schemas/UnauthorizedErrorResponse" + /user/view_state_sync: + put: + operationId: updateViewStateSync + summary: Update View State Sync + tags: + - Users + description: Enable or disable watch-state sync consent for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /users: get: operationId: get-users @@ -5820,6 +6096,98 @@ paths: application/json: schema: $ref: "#/components/schemas/UnauthorizedErrorResponse" + /users/account: + get: + operationId: getAccountXML + summary: Get Account (XML) + tags: + - Users + description: Get the logged-in user's account details in XML format (legacy v1 endpoint). + servers: + - url: https://plex.tv + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/xml: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /users/account.json: + get: + operationId: getAccountJSON + summary: Get Account (JSON) + tags: + - Users + description: Get the logged-in user's account details in JSON format (legacy v1 endpoint). + servers: + - url: https://plex.tv + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /users/password: + post: + operationId: changePassword + summary: Change Password + tags: + - Authentication + description: Change or reset the logged-in user's password. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /users/signin: post: operationId: post-users-sign-in-data @@ -6012,6 +6380,65 @@ paths: description: OK '400': $ref: "#/components/responses/400" + /webhooks: + get: + operationId: getWebhooks + summary: Get Webhooks + tags: + - General + description: List configured webhook URLs for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + post: + operationId: addWebhook + summary: Add Webhook + tags: + - General + description: Add a webhook URL for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /{transcodeType}/:/transcode/universal/decision: get: operationId: makeDecision @@ -6942,6 +7369,43 @@ paths: type: array items: $ref: "#/components/schemas/DownloadQueueItem" + /downloads/{channel}.json: + get: + operationId: getDownloads + summary: Get Downloads + tags: + - General + description: Get available Plex update downloads for a specific channel (e.g. `plexpass`, `public`). + servers: + - url: https://plex.tv + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: channel + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /home/users/{id}/switch: post: operationId: switchHomeUser @@ -10734,7 +11198,7 @@ paths: summary: Set DVR preferences tags: - DVRs - description: Set DVR preferences by name avd value + description: Set DVR preferences by name and value security: - token: - admin @@ -12431,6 +12895,43 @@ paths: responses: '200': description: OK + /user/{uuid}/settings/opt_outs: + get: + operationId: getUserOptOuts + summary: Get User Opt-Outs + tags: + - Users + description: Get online media source opt-out settings for a user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: uuid + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /{transcodeType}/:/transcode/universal/start.{extension}: get: operationId: startTranscodeSession @@ -16909,7 +17410,7 @@ components: protocol: type: string MediaGrabOperation: - description: A media grab opration represents a scheduled or active recording of media + description: A media grab operation represents a scheduled or active recording of media type: object properties: currentSize: From c6c6befab927bddabadab3f2f953f7efdf0d6b89 Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 16:22:47 -0500 Subject: [PATCH 06/26] =?UTF-8?q?feat:=20Phase=205=20schema=20depth=20?= =?UTF-8?q?=E2=80=94=2060=20new=20fields,=205=20new=20schemas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fields added: - Metadata: artBlurHash, editionTitle, enableCreditsMarkerGeneration, languageOverride, lastRatedAt, musicAnalysisVersion, playlistItemID, skipCount, slug, sourceURI, thumbBlurHash, useOriginalTitle (13) - Media: selected, uuid (2) - Part: deepAnalysisVersion, packetLength, protocol, requiredBandwidths, syncItemId, syncState (6) - Stream: albumGain, albumPeak, albumRange, bitrateMode, endRamp, gain, loudness, lra, minLines, peak, perfectMatch, provider, providerTitle, score, sourceKey, startRamp, timed, transient, userID, visualImpaired (20) - Channel: drm, favorite, signalQuality, signalStrength (4) - Lineup: identifier, key (2) - Session: sessionKey, title, userID, uuid (4) - Device: deviceIdentifier, enabled, id, lineup, lineupType, name, thumb, thumbVersion, title (9) New schemas: - Collection, MediaContainerWithPlayQueue, Provider, ProviderFeature, WebhookPayload Validation: 0 speakeasy errors, 0 vacuum errors, prettier clean --- plex-api-spec.yaml | 428 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 428 insertions(+) diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index f6b6f8406..c98ecbed0 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -16371,6 +16371,14 @@ components: type: string channelVcn: type: string + drm: + description: Whether the channel requires DRM. + type: boolean + example: false + favorite: + description: Whether the channel is marked as a favorite. + type: boolean + example: true hd: type: boolean identifier: @@ -16379,6 +16387,14 @@ components: type: string language: type: string + signalQuality: + description: Signal quality percentage (0-100). + type: integer + example: 85 + signalStrength: + description: Signal strength percentage (0-100). + type: integer + example: 90 thumb: type: string ChannelMapping: @@ -16404,6 +16420,46 @@ components: type: array items: $ref: "#/components/schemas/Channel" + Collection: + description: A collection of related media items. + type: object + properties: + artBlurHash: + description: Blur hash for collection art. + type: string + example: LhE3*HRjR*a#ogWBofj[bbf6ofa# + collectionFilterBasedOnUser: + description: Whether the smart collection filter is based on the current user. + type: boolean + example: false + collectionMode: + description: Display mode for the collection. + type: string + enum: + - default + - hideItems + - showItems + example: default + collectionPublished: + description: Whether the collection is published to Plex Discover. + type: boolean + example: true + collectionSort: + description: Sort order for items in the collection. + type: string + example: addedAt:desc + lastRatedAt: + description: Timestamp of the last user rating. + type: integer + example: 1704067200 + thumbBlurHash: + description: Blur hash for collection thumbnail. + type: string + example: LhE3*HRjR*a#ogWBofj[bbf6ofa# + userRating: + description: User star rating (0-10). + type: number + example: 8.5 Connection: type: object properties: @@ -16466,20 +16522,48 @@ components: Device: type: object properties: + title: + description: Display title for the device. + type: string + example: Living Room Tuner ChannelMapping: type: array items: $ref: "#/components/schemas/ChannelMapping" + deviceIdentifier: + description: Distinct hardware identifier for the device. + type: string + example: HDHomeRun-1234ABCD + enabled: + description: Whether the device is enabled. + type: boolean + example: true + id: + description: Unique device ID. + type: integer + example: 42 key: type: string lastSeenAt: type: integer + lineup: + description: EPG lineup association. + type: string + example: OTA + lineupType: + description: Type of EPG lineup. + type: string + example: Antenna make: type: string model: type: string modelNumber: type: string + name: + description: Human-readable device name. + type: string + example: HDHomeRun CONNECT protocol: type: string sources: @@ -16488,6 +16572,14 @@ components: type: string status: type: string + thumb: + description: URL to the device thumbnail image. + type: string + example: https://plex.tv/devices/42/thumb + thumbVersion: + description: Version of the device thumbnail. + type: integer + example: 1 tuners: type: string uri: @@ -16897,6 +16989,14 @@ components: type: description: The type of this object (`lineup` in this case) type: string + identifier: + description: Lineup identifier. + type: string + example: OTA + key: + description: API key for this lineup. + type: string + example: /tv.plex.lineup.ota lineupType: description: |- - `-1`: N/A @@ -17046,6 +17146,14 @@ components: type: array items: $ref: "#/components/schemas/Part" + selected: + description: Whether this media version is selected for playback. + type: boolean + example: true + uuid: + description: Unique identifier for this media instance. + type: string + example: 5d776d057ae4e7001f65e7d0 videoCodec: type: string example: h264 @@ -17341,6 +17449,39 @@ components: description: If this is a special playlist, this returns its type (e.g. favorites). type: string - $ref: "#/components/schemas/Metadata" + MediaContainerWithPlayQueue: + description: A media container representing a play queue. + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + playQueueID: + type: integer + example: 42 + playQueueLastAddedItemID: + type: integer + example: 123 + playQueueSelectedItemID: + type: integer + example: 1 + playQueueSelectedItemOffset: + type: integer + example: 0 + playQueueSelectedMetadataItemID: + type: integer + example: 456 + playQueueShuffled: + type: boolean + example: false + playQueueSourceURI: + type: string + example: library://abc123/item/%2Flibrary%2Fmetadata%2F1 + playQueueTotalCount: + type: integer + example: 50 + playQueueVersion: + type: integer + example: 3 MediaContainerWithSettings: type: object properties: @@ -17613,6 +17754,10 @@ components: description: When present, the URL for the background artwork for the item. type: string example: /library/metadata/58683/art/1703239236 + artBlurHash: + description: Blur hash for background art. + type: string + example: LhE3*HRjR*a#ogWBofj[bbf6ofa# audienceRating: description: Some rating systems separate reviewer ratings from audience ratings type: number @@ -17656,6 +17801,14 @@ components: description: When present, the duration for the item, in units of milliseconds. type: integer format: int32 + editionTitle: + description: Edition string (e.g. "Director's Cut"). + type: string + example: Director's Cut + enableCreditsMarkerGeneration: + description: Whether credits marker generation is enabled for this item. + type: boolean + example: true Filter: description: Typically only seen in metadata at a library's top level type: array @@ -17730,6 +17883,14 @@ components: key: description: The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. type: string + languageOverride: + description: Per-item language override. + type: string + example: en + lastRatedAt: + description: Timestamp of the last user rating. + type: integer + example: 1704067200 lastViewedAt: allOf: - $ref: "#/components/schemas/PlexDateTime" @@ -17742,6 +17903,10 @@ components: type: array items: $ref: "#/components/schemas/Media" + musicAnalysisVersion: + description: Analysis version for music items. + type: integer + example: 1 originallyAvailableAt: description: When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. type: string @@ -17773,6 +17938,10 @@ components: parentTitle: description: The `title` of the parent type: string + playlistItemID: + description: Item ID within a playlist. + type: integer + example: 42 primaryExtraKey: description: Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. type: string @@ -17818,6 +17987,10 @@ components: enum: - '0' - '1' + skipCount: + description: Number of times this track has been skipped. + type: integer + example: 3 skipParent: description: When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). oneOf: @@ -17826,11 +17999,19 @@ components: enum: - '0' - '1' + slug: + description: URL-friendly slug for the item. + type: string + example: the-matrix Sort: description: Typically only seen in metadata at a library's top level type: array items: $ref: "#/components/schemas/Sort" + sourceURI: + description: Remote or shared server item URI. + type: string + example: provider://tv.plex.provider.vod/library/metadata/5d776d057ae4e7001f65e7d0 studio: description: When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). type: string @@ -17851,12 +18032,20 @@ components: description: When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. type: string example: /library/metadata/58683/thumb/1703239236 + thumbBlurHash: + description: Blur hash for thumbnail. + type: string + example: LhE3*HRjR*a#ogWBofj[bbf6ofa# titleSort: description: Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). type: string updatedAt: description: In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). type: integer + useOriginalTitle: + description: Whether to display the original title. + type: boolean + example: false userRating: description: When the user has rated an item, this contains the user rating type: number @@ -17929,6 +18118,10 @@ components: description: The container of the media file, such as `mp4` or `mkv` type: string example: mov + deepAnalysisVersion: + description: Deep analysis version for this part. + type: integer + example: 2 duration: description: The duration of the media item, in milliseconds type: integer @@ -17959,6 +18152,18 @@ components: optimizedForStreaming: type: boolean example: false + packetLength: + description: RTP packet length for streaming. + type: integer + example: 188 + protocol: + description: Streaming protocol (e.g. dash, hls, direct). + type: string + example: dash + requiredBandwidths: + description: Comma-separated list of bandwidth requirements. + type: string + example: 10000,15000,20000 size: description: The size of the media, in bytes type: integer @@ -17968,6 +18173,14 @@ components: type: array items: $ref: "#/components/schemas/Stream" + syncItemId: + description: Mobile sync item association ID. + type: integer + example: 12345 + syncState: + description: Sync state (e.g. pending, downloaded, processing). + type: string + example: pending videoProfile: type: string example: main @@ -18273,6 +18486,60 @@ components: - dnsRebindingProtection - natLoopbackSupported - connections + Provider: + description: A media provider registered with the PMS. + type: object + properties: + title: + description: Human-readable provider title. + type: string + example: Plex VOD + identifier: + description: Unique provider identifier. + type: string + example: tv.plex.provider.vod + Protocol: + description: Protocol version used by the provider. + type: string + example: '1.0' + types: + description: Content types provided. + type: string + example: movie,show + ProviderFeature: + description: A feature supported by a media provider. + type: object + properties: + title: + description: Human-readable feature title. + type: string + example: Search + type: + description: Feature type. + type: string + example: content + key: + description: Feature key identifier. + type: string + enum: + - search + - metadata + - content + - match + - manage + - timeline + - rate + - playqueue + - playlist + - subscribe + - promoted + - continuewatching + - collection + - actions + - imagetranscoder + - queryParser + - grid + example: search ReachabilityNotification: description: Server reachability status change notification type: object @@ -18429,6 +18696,10 @@ components: description: Information about the playback session type: object properties: + title: + description: Title of the media being played. + type: string + example: The Matrix bandwidth: description: The bandwidth used by this client's playback in kbps type: integer @@ -18441,6 +18712,18 @@ components: enum: - lan - wan + sessionKey: + description: Unique session key for this playback session. + type: string + example: abc123 + userID: + description: ID of the user owning this session. + type: integer + example: 12345 + uuid: + description: UUID of the playback session. + type: string + example: 5d776d057ae4e7001f65e7d0 Setting: description: A configuration setting or preference type: object @@ -18543,6 +18826,18 @@ components: description: Indicates if this stream is default. type: boolean example: true + albumGain: + description: ReplayGain album gain in dB. + type: number + example: -8.5 + albumPeak: + description: ReplayGain album peak amplitude. + type: number + example: 0.95 + albumRange: + description: ReplayGain album dynamic range in dB. + type: number + example: 12.3 audioChannelLayout: description: Audio channel layout. type: string @@ -18557,6 +18852,13 @@ components: type: integer format: int32 example: 24743 + bitrateMode: + description: Audio bitrate mode (cbr or vbr). + type: string + enum: + - cbr + - vbr + example: vbr canAutoSync: description: Indicates if the stream can auto-sync. type: boolean @@ -18659,6 +18961,10 @@ components: embeddedInVideo: type: string example: progressive + endRamp: + description: Loudness ramp end type. + type: string + example: none extendedDisplayTitle: description: Extended display title for the stream. type: string @@ -18671,6 +18977,10 @@ components: type: number format: float example: 23.976 + gain: + description: Track replay gain in dB. + type: number + example: -6.2 hasScalingMatrix: type: boolean example: false @@ -18718,14 +19028,42 @@ components: type: integer format: int32 example: 150 + loudness: + description: Integrated loudness in LUFS. + type: number + example: -14 + lra: + description: Loudness range in LU. + type: number + example: 8.5 + minLines: + description: Minimum lines in the lyric file. + type: integer + example: 10 original: description: Indicates if this is the original stream. type: boolean example: true + peak: + description: Track peak amplitude. + type: number + example: 0.98 + perfectMatch: + description: Whether the subtitle is an exact match. + type: boolean + example: true profile: description: Video profile. type: string example: main 10 + provider: + description: Lyric or subtitle provider name. + type: string + example: OpenSubtitles + providerTitle: + description: Subtitle provider display name. + type: string + example: OpenSubtitles.org refFrames: description: Number of reference frames. type: integer @@ -18739,10 +19077,22 @@ components: scanType: type: string example: progressive + score: + description: Subtitle match confidence score (0-100). + type: number + example: 95.5 selected: description: Indicates if this stream is selected (applicable for audio streams). type: boolean example: true + sourceKey: + description: Source identifier for the subtitle. + type: string + example: opensubtitles + startRamp: + description: Loudness ramp start type. + type: string + example: none streamIdentifier: type: integer format: int32 @@ -18765,6 +19115,22 @@ components: - VIDEO = 1 (Video stream) - AUDIO = 2 (Audio stream) - SUBTITLE = 3 (Subtitle stream) + timed: + description: Whether lyrics are timestamped. + type: boolean + example: true + transient: + description: Whether the subtitle is temporary or downloaded. + type: boolean + example: false + userID: + description: ID of the user who added the subtitle. + type: integer + example: 12345 + visualImpaired: + description: Whether this audio track is an audio description track. + type: boolean + example: false width: description: Width of the video stream. type: integer @@ -19668,3 +20034,65 @@ components: - defaultSubtitleForced - watchedIndicator - mediaReviewsVisibility + WebhookPayload: + description: Payload delivered by Plex to configured webhook URLs. + type: object + properties: + Account: + type: object + properties: + title: + type: string + example: Plex User + id: + type: integer + example: 1 + thumb: + type: string + example: https://plex.tv/users/1/thumb + event: + description: Event type that triggered the webhook. + type: string + enum: + - media.play + - media.pause + - media.resume + - media.stop + - media.scrobble + - media.rate + - library.new + - library.on.deck + example: media.play + Metadata: + description: The media item associated with the event. Shape varies by event type. + type: object + owner: + type: boolean + example: true + Player: + type: object + properties: + title: + type: string + example: Chrome + local: + type: boolean + example: true + publicAddress: + type: string + example: 192.168.1.100 + uuid: + type: string + example: player-uuid-123 + Server: + type: object + properties: + title: + type: string + example: My Server + uuid: + type: string + example: 5d776d057ae4e7001f65e7d0 + user: + type: boolean + example: true From eaf7b8157ce3ef8177b99392ef8ffa8e746073bb Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 16:41:13 -0500 Subject: [PATCH 07/26] feat: Phase 6 library browse endpoints & query params Endpoints added: - GET /library/sections/{id}/unwatched, /newest, /byYear, /byDecade, /byContentRating, /byResolution, /byFolder - GET+POST /library/sections/{id}/refresh, /emptyTrash, /optimize - GET+POST /library/optimize - GET /library/metadata/{id}/children, /grandchildren, /nearest, /computePath - POST /library/metadata/{id}/posters, /arts - GET /hubs/continueWatching/items Query params added to GET /library/sections/{id}/all: - type, sort, includeCollections, includeExternalMedia, includeAdvanced, checkFiles, includeRelated, includeExtras, includePopularLeaves, includeConcerts, includeOnDeck, includeChapters, includePreferences, includeBandwidths, includeLoudnessRamps, includeStations, includeExternalIds, includeReviews, includeCredits, includeArt, includeThumb, includeBanner, includeTheme, includeFields, excludeFields, asyncAugmentMetadata, asyncRefreshLocalMediaAgent, nocache, skipRefresh, excludeElements Validation: 0 speakeasy errors, 0 vacuum errors, prettier clean --- plex-api-spec.yaml | 1352 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 1054 insertions(+), 298 deletions(-) diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index c98ecbed0..8cc2f7af7 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -392,11 +392,14 @@ paths: text/html: {} /:/progress: get: - operationId: updateProgress - summary: Update Progress + operationId: getProgress + summary: Get Progress tags: - - General - description: Updates watch progress for an item. + - Playback + description: Get or update watch progress for a media item. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -410,22 +413,17 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: key + description: The metadata key of the item in: query required: true schema: type: string - - name: identifier - in: query - schema: - type: string - name: time + description: The current playback position in milliseconds in: query + required: true schema: type: integer - - name: state - in: query - schema: - type: string responses: '200': description: OK @@ -864,10 +862,13 @@ paths: /actions/removeFromContinueWatching: put: operationId: removeFromContinueWatching - summary: Remove from Continue Watching + summary: Remove From Continue Watching tags: - - General - description: Remove an item from the Continue Watching hub. + - Playback + description: Remove an item from the Continue Watching list. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -880,7 +881,8 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ratingKey + - name: key + description: The metadata key of the item in: query required: true schema: @@ -1432,13 +1434,45 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + /hubs/continueWatching/items: + get: + operationId: getContinueWatchingItems + summary: Get Continue Watching Items + tags: + - Hubs + description: Get direct access to Continue Watching items. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /hubs/home/recentlyAdded: get: operationId: getHomeRecentlyAdded summary: Get Home Recently Added tags: - Hubs - description: Get hub-centric recently added items. + description: Get the recently added hub for the home screen. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2003,6 +2037,54 @@ paths: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" /library/optimize: + get: + operationId: optimizeLibrary + summary: Optimize Library + tags: + - Library + description: Optimize the database globally across all library sections. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + post: + operationId: optimizeLibraryPost + summary: Optimize Library + tags: + - Library + description: Optimize the database globally across all library sections. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK put: operationId: optimizeDatabase summary: Optimize the Database @@ -2074,11 +2156,14 @@ paths: $ref: "#/components/schemas/MediaContainerWithArtwork" /library/recentlyAdded: get: - operationId: getRecentlyAdded - summary: Get Recently Added + operationId: getRecentlyAddedGlobal + summary: Get Global Recently Added tags: - Library - description: Get globally recently added items across all libraries. + description: Get recently added items across all library sections. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7992,13 +8077,13 @@ paths: description: Collection not found content: text/html: {} - /library/metadata/{ids}: - delete: - operationId: deleteMetadataItem - summary: Delete a metadata item + /library/metadata/{id}/arts: + post: + operationId: uploadArt + summary: Upload Art tags: - Library - description: Delete a single metadata item from the library, deleting media as well + description: Upload custom background art for a metadata item. security: - token: - admin @@ -8014,29 +8099,33 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: id in: path required: true schema: - type: string - - name: proxy - description: Whether proxy items, such as media optimized versions, should also be deleted. Defaults to false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" + type: integer + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary responses: '200': - $ref: "#/components/responses/200" - '400': - description: Media items could not be deleted - content: - text/html: {} + description: OK + /library/metadata/{id}/children: get: - operationId: getMetadataItem - summary: Get a metadata item + operationId: getMetadataChildren + summary: Get Metadata Children tags: - - Content - description: Get one or more metadata items. + - Library + description: Get children of a show, season, artist, or album. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8049,135 +8138,25 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: id in: path required: true schema: - type: array - items: - type: string - - name: asyncCheckFiles - description: Determines if file check should be performed asynchronously. An activity is created to indicate progress. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: asyncRefreshLocalMediaAgent - description: Determines if local media agent refresh should be performed asynchronously. An activity is created to indicate progress. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: asyncRefreshAnalysis - description: Determines if analysis refresh should be performed asynchronously. An activity is created to indicate progress. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: checkFiles - description: Determines if file check should be performed synchronously. Specifying `asyncCheckFiles` will cause this option to be ignored. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: skipRefresh - description: Determines if synchronous local media agent and analysis refresh should be skipped. Specifying async versions will cause synchronous versions to be skipped. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: checkFileAvailability - description: Determines if file existence check should be performed synchronously. Specifying `checkFiles` will imply this option. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: asyncAugmentMetadata - description: Add metadata augmentations. An activity is created to indicate progress. Option will be ignored if specified by non-admin or if multiple metadata items are requested. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: augmentCount - description: Number of augmentations to add. Requires `asyncAugmentMetadata` to be specified. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: includeMarkers - description: Include intro/credits markers in the response - in: query - schema: - type: boolean - - name: includeGuids - description: Include external GUIDs (e.g. TMDB, TVDB) in the response - in: query - schema: - type: boolean - - name: includeChapters - description: Include chapter data in the response - in: query - schema: - type: boolean - - name: includeExternalMedia - description: Include external/online media in the response - in: query - schema: - type: boolean - - name: includeExtras - description: Include trailers, behind-the-scenes, and other extras - in: query - schema: - type: boolean - - name: includeRelated - description: Include related items in the response - in: query - schema: - type: boolean - - name: includeOnDeck - description: Include On Deck status in the response - in: query - schema: - type: boolean - - name: includePopularLeaves - description: Include popular episodes in the response - in: query - schema: - type: boolean - - name: includeReviews - description: Include user reviews in the response - in: query - schema: - type: boolean - - name: includeStations - description: Include radio station data in the response - in: query - schema: - type: boolean - - name: excludeElements - description: Comma-separated list of elements to exclude from the response - in: query - schema: - type: string - - name: excludeFields - description: Comma-separated list of fields to exclude from the response - in: query - schema: - type: string + type: integer responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer content: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" - put: - operationId: editMetadataItem - summary: Edit a metadata item + /library/metadata/{id}/computePath: + get: + operationId: computeSonicPath + summary: Compute Sonic Path tags: - Library - description: Edit metadata items setting fields + description: Compute a sonic adventure path from a starting track. security: - token: - admin @@ -8193,15 +8172,355 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: id in: path required: true schema: - type: array - items: - type: string - - name: args - description: The new values for the metadata item + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/metadata/{id}/grandchildren: + get: + operationId: getMetadataGrandchildren + summary: Get Metadata Grandchildren + tags: + - Library + description: Get grandchildren (e.g. episodes under a show). + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/metadata/{id}/nearest: + get: + operationId: getNearestMetadata + summary: Get Nearest Metadata + tags: + - Library + description: Get sonically similar items for a music track. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + in: path + required: true + schema: + type: integer + - name: excludeParentID + in: query + required: false + schema: + type: integer + - name: excludeGrandparentID + in: query + required: false + schema: + type: integer + - name: limit + in: query + required: false + schema: + type: integer + - name: maxDistance + in: query + required: false + schema: + type: number + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/metadata/{id}/posters: + post: + operationId: uploadPoster + summary: Upload Poster + tags: + - Library + description: Upload a custom poster image for a metadata item. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + in: path + required: true + schema: + type: integer + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: OK + /library/metadata/{ids}: + delete: + operationId: deleteMetadataItem + summary: Delete a metadata item + tags: + - Library + description: Delete a single metadata item from the library, deleting media as well + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + in: path + required: true + schema: + type: string + - name: proxy + description: Whether proxy items, such as media optimized versions, should also be deleted. Defaults to false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + '400': + description: Media items could not be deleted + content: + text/html: {} + get: + operationId: getMetadataItem + summary: Get a metadata item + tags: + - Content + description: Get one or more metadata items. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + in: path + required: true + schema: + type: array + items: + type: string + - name: asyncCheckFiles + description: Determines if file check should be performed asynchronously. An activity is created to indicate progress. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: asyncRefreshLocalMediaAgent + description: Determines if local media agent refresh should be performed asynchronously. An activity is created to indicate progress. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: asyncRefreshAnalysis + description: Determines if analysis refresh should be performed asynchronously. An activity is created to indicate progress. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: checkFiles + description: Determines if file check should be performed synchronously. Specifying `asyncCheckFiles` will cause this option to be ignored. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: skipRefresh + description: Determines if synchronous local media agent and analysis refresh should be skipped. Specifying async versions will cause synchronous versions to be skipped. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: checkFileAvailability + description: Determines if file existence check should be performed synchronously. Specifying `checkFiles` will imply this option. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: asyncAugmentMetadata + description: Add metadata augmentations. An activity is created to indicate progress. Option will be ignored if specified by non-admin or if multiple metadata items are requested. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: augmentCount + description: Number of augmentations to add. Requires `asyncAugmentMetadata` to be specified. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeMarkers + description: Include intro/credits markers in the response + in: query + schema: + type: boolean + - name: includeGuids + description: Include external GUIDs (e.g. TMDB, TVDB) in the response + in: query + schema: + type: boolean + - name: includeChapters + description: Include chapter data in the response + in: query + schema: + type: boolean + - name: includeExternalMedia + description: Include external/online media in the response + in: query + schema: + type: boolean + - name: includeExtras + description: Include trailers, behind-the-scenes, and other extras + in: query + schema: + type: boolean + - name: includeRelated + description: Include related items in the response + in: query + schema: + type: boolean + - name: includeOnDeck + description: Include On Deck status in the response + in: query + schema: + type: boolean + - name: includePopularLeaves + description: Include popular episodes in the response + in: query + schema: + type: boolean + - name: includeReviews + description: Include user reviews in the response + in: query + schema: + type: boolean + - name: includeStations + description: Include radio station data in the response + in: query + schema: + type: boolean + - name: excludeElements + description: Comma-separated list of elements to exclude from the response + in: query + schema: + type: string + - name: excludeFields + description: Comma-separated list of fields to exclude from the response + in: query + schema: + type: string + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + put: + operationId: editMetadataItem + summary: Edit a metadata item + tags: + - Library + description: Edit metadata items setting fields + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + in: path + required: true + schema: + type: array + items: + type: string + - name: args + description: The new values for the metadata item in: query schema: type: object @@ -8808,57 +9127,6 @@ paths: responses: '200': $ref: "#/components/responses/200" - /library/metadata/{ids}/nearest: - get: - operationId: listSonicallySimilar - summary: Get nearest tracks to metadata item - tags: - - Library - description: Get the nearest tracks, sonically, to the provided track - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids - in: path - required: true - schema: - type: string - - name: excludeParentID - in: query - required: false - schema: - type: integer - - name: excludeGrandparentID - in: query - required: false - schema: - type: integer - - name: limit - in: query - required: false - schema: - type: integer - - name: maxDistance - in: query - required: false - schema: - type: number - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/MediaContainerWithMetadata" /library/metadata/{ids}/prefs: put: operationId: setItemPreferences @@ -9674,6 +9942,9 @@ paths: tags: - Content description: Get the items in a section, potentially filtering them + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9689,69 +9960,169 @@ paths: - $ref: "#/components/parameters/X-Plex-Container-Start" - $ref: "#/components/parameters/X-Plex-Container-Size" - $ref: "#/components/parameters/mediaQuery" + - name: sectionId + description: The id of the section + in: path + required: true + schema: + type: integer + - name: type + description: Filter by metadata type (1=movie, 2=show, 3=season, 4=episode, 8=artist, 9=album, 10=track) + in: query + schema: + type: integer + - name: sort + description: Sort key and direction (e.g. addedAt:desc, titleSort) + in: query + schema: + type: string - name: includeMeta description: Adds the Meta object to the response in: query schema: $ref: "#/components/schemas/BoolInt" - - name: includeGuids - description: Adds the Guid object to the response + - name: includeGuids + description: Adds the Guid object to the response + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeCollections + description: Include collection items in results + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeExternalMedia + description: Include external or online media + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeAdvanced + description: Include advanced settings + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: checkFiles + description: Verify file existence + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeRelated + description: Include related items + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeExtras + description: Include trailers, behind-the-scenes, etc. in: query schema: $ref: "#/components/schemas/BoolInt" - - name: sectionId - description: The id of the section - in: path - required: true + - name: includePopularLeaves + description: Include popular episodes + in: query schema: - type: string - - name: includeExternalMedia - description: Include external/online media in the response + $ref: "#/components/schemas/BoolInt" + - name: includeConcerts + description: Include concert items in: query schema: - type: boolean - - name: includeExtras - description: Include trailers, behind-the-scenes, and other extras + $ref: "#/components/schemas/BoolInt" + - name: includeOnDeck + description: Include On Deck status in: query schema: - type: boolean - - name: includeRelated - description: Include related items in the response + $ref: "#/components/schemas/BoolInt" + - name: includeChapters + description: Include chapter markers in: query schema: - type: boolean - - name: includeOnDeck - description: Include On Deck status in the response + $ref: "#/components/schemas/BoolInt" + - name: includePreferences + description: Include user preferences in: query schema: - type: boolean - - name: includePopularLeaves - description: Include popular episodes in the response + $ref: "#/components/schemas/BoolInt" + - name: includeBandwidths + description: Include bandwidth info in: query schema: - type: boolean - - name: includeReviews - description: Include user reviews in the response + $ref: "#/components/schemas/BoolInt" + - name: includeLoudnessRamps + description: Include loudness ramp data in: query schema: - type: boolean + $ref: "#/components/schemas/BoolInt" - name: includeStations - description: Include radio station data in the response + description: Include radio station data in: query schema: - type: boolean - - name: checkFiles - description: Verify file existence on disk + $ref: "#/components/schemas/BoolInt" + - name: includeExternalIds + description: Include external GUIDs in: query schema: - type: boolean - - name: excludeElements - description: Comma-separated list of elements to exclude from the response + $ref: "#/components/schemas/BoolInt" + - name: includeReviews + description: Include user reviews + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeCredits + description: Include full credits + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeArt + description: Force inclusion of artwork fields + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeThumb + description: Force inclusion of thumbnail fields + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeBanner + description: Force inclusion of banner fields + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeTheme + description: Force inclusion of theme fields + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeFields + description: Whitelist of fields to return in: query schema: type: string - name: excludeFields - description: Comma-separated list of fields to exclude from the response + description: Blacklist of fields to omit + in: query + schema: + type: string + - name: asyncAugmentMetadata + description: Async metadata augmentation + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: asyncRefreshLocalMediaAgent + description: Async local media agent refresh + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: nocache + description: Bypass cache + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: skipRefresh + description: Skip synchronous refresh + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: excludeElements + description: Comma-separated list of elements to exclude from the response in: query schema: type: string @@ -10032,7 +10403,196 @@ paths: summary: Analyze a section tags: - Library - description: Start analysis of all items in a section. If BIF generation is enabled, this will also be started on this section + description: Start analysis of all items in a section. If BIF generation is enabled, this will also be started on this section + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: Section identifier + in: path + required: true + schema: + type: integer + responses: + '200': + $ref: "#/components/responses/200" + /library/sections/{sectionId}/arts: + get: + operationId: getArts + summary: Set section artwork + tags: + - Content + description: Get artwork for a library section + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: Section identifier + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithArtwork" + /library/sections/{sectionId}/autocomplete: + get: + operationId: autocomplete + summary: Get autocompletions for search + tags: + - Library + description: |- + The field to autocomplete on is specified by the `{field}.query` parameter. For example `genre.query` or `title.query`. + Returns a set of items from the filtered items whose `{field}` starts with `{field}.query`. In the results, a `{field}.queryRange` will be present to express the range of the match + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/mediaQuery" + - name: sectionId + description: Section identifier + in: path + required: true + schema: + type: integer + - name: type + description: Item type + in: query + schema: + type: integer + - name: field.query + description: The "field" stands in for any field, the value is a partial string for matching + in: query + schema: + type: string + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + description: A paramater is either invalid or missing + content: + text/html: {} + /library/sections/{sectionId}/byContentRating: + get: + operationId: getByContentRating + summary: Get By Content Rating + tags: + - Library + description: Browse items in a library section grouped by content rating. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/sections/{sectionId}/byDecade: + get: + operationId: getByDecade + summary: Get By Decade + tags: + - Library + description: Browse items in a library section grouped by decade. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/sections/{sectionId}/byFolder: + get: + operationId: getByFolder + summary: Get By Folder + tags: + - Library + description: Browse items in a library section by underlying filesystem folder. security: - token: - admin @@ -10049,21 +10609,27 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: Section identifier in: path required: true schema: type: integer responses: '200': - $ref: "#/components/responses/200" - /library/sections/{sectionId}/arts: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/sections/{sectionId}/byResolution: get: - operationId: getArts - summary: Set section artwork + operationId: getByResolution + summary: Get By Resolution tags: - - Content - description: Get artwork for a library section + - Library + description: Browse items in a library section grouped by resolution. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10077,7 +10643,6 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: Section identifier in: path required: true schema: @@ -10088,16 +10653,17 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/MediaContainerWithArtwork" - /library/sections/{sectionId}/autocomplete: + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/sections/{sectionId}/byYear: get: - operationId: autocomplete - summary: Get autocompletions for search + operationId: getByYear + summary: Get By Year tags: - Library - description: |- - The field to autocomplete on is specified by the `{field}.query` parameter. For example `genre.query` or `title.query`. - Returns a set of items from the filtered items whose `{field}` starts with `{field}.query`. In the results, a `{field}.queryRange` will be present to express the range of the match + description: Browse items in a library section grouped by year. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10110,43 +10676,18 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: "#/components/parameters/mediaQuery" - name: sectionId - description: Section identifier in: path required: true schema: type: integer - - name: type - description: Item type - in: query - schema: - type: integer - - name: field.query - description: The "field" stands in for any field, the value is a partial string for matching - in: query - schema: - type: string responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer content: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" - '400': - description: A paramater is either invalid or missing - content: - text/html: {} /library/sections/{sectionId}/categories: get: operationId: getCategories @@ -10357,8 +10898,66 @@ paths: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" /library/sections/{sectionId}/emptyTrash: - put: + get: operationId: emptyTrash + summary: Empty Trash + tags: + - Library + description: Permanently remove items from the trash for a library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + post: + operationId: emptyTrashPost + summary: Empty Trash + tags: + - Library + description: Permanently remove items from the trash for a library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + put: + operationId: emptyTrashPut summary: Empty section trash tags: - Library @@ -10684,13 +11283,47 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/sections/{sectionId}/newest: + get: + operationId: getNewestForSection + summary: Get Newest for Section + tags: + - Library + description: Get the newest additions for a specific library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/sections/{sectionId}/onDeck: get: - operationId: getOnDeck - summary: Get On Deck + operationId: getOnDeckForSection + summary: Get On Deck for Section tags: - Library - description: Get On Deck items for a library section. + description: Get the On Deck items for a specific library section. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10715,6 +11348,65 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/sections/{sectionId}/optimize: + get: + operationId: optimizeSection + summary: Optimize Section + tags: + - Library + description: Optimize the database for a specific library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + post: + operationId: optimizeSectionPost + summary: Optimize Section + tags: + - Library + description: Optimize the database for a specific library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK /library/sections/{sectionId}/prefs: get: operationId: getSectionPreferences @@ -10791,8 +11483,8 @@ paths: $ref: "#/components/responses/200" /library/sections/{sectionId}/recentlyAdded: get: - operationId: getRecentlyAddedBySection - summary: Get Recently Added by Section + operationId: getRecentlyAddedForSection + summary: Get Recently Added for Section tags: - Library description: Get recently added items for a specific library section. @@ -10851,12 +11543,42 @@ paths: responses: '200': $ref: "#/components/responses/200" - post: + get: operationId: refreshSection - summary: Refresh section + summary: Refresh Section + tags: + - Library + description: Trigger a metadata refresh for a library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: Section identifier + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + post: + operationId: refreshSectionPost + summary: Refresh Section tags: - Library - description: Start a refresh of this section + description: Trigger a metadata refresh for a library section. security: - token: - admin @@ -10923,6 +11645,40 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSorts" + /library/sections/{sectionId}/unwatched: + get: + operationId: getUnwatchedForSection + summary: Get Unwatched for Section + tags: + - Library + description: Get unwatched items for a specific library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/streams/{streamId}/levels: get: operationId: getStreamLevels From 11ca6eed3d94f04a25ef757995afbb55e257a5e3 Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 16:46:31 -0500 Subject: [PATCH 08/26] =?UTF-8?q?feat:=20Phase=207=20final=20polish=20?= =?UTF-8?q?=E2=80=94=20remove=20orphans,=20add=20x-tagGroups,=20retries?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed unused components: - Schemas: Title, Type, UpdaterRelease - Response: 500 - Parameters: X-Plex-Client-Profile-Extra, X-Plex-Client-Profile-Name, X-Plex-Session-Identifier Added: - x-tagGroups for Server, Library, Media, System organization - x-speakeasy-retries config for plex.tv auth endpoints - x-speakeasy-retries-name on /pins, /pins/{pinId}, /users/signin, /users/signout Validation: 0 speakeasy errors, 0 vacuum errors, prettier clean --- plex-api-spec.yaml | 128 +++++++++------------------------------------ 1 file changed, 26 insertions(+), 102 deletions(-) diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index 8cc2f7af7..cb678dcf3 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -197,45 +197,31 @@ tags: This describes the API for searching and applying updates to the Plex Media Server. Updates to the status can be observed via the Event API. x-tagGroups: - - name: General + - name: Server tags: - General - - Library - - Library Playlists - - Library Collections - - Status - Activities - - Updater - Butler - - Events + - Updater - Log - Preferences - - Download Queue - - UltraBlur - Transcoder - - name: Playback & Sessions - tags: - - Status - - Timeline - - Play Queue - - Transcoder - - name: Media Provider + - name: Library tags: - - Provider - - Content + - Library - Hubs - Search - - Rate - - Playlist - - Play Queue - - Timeline - - name: DVR + - name: Media tags: + - Timeline - DVRs - - Devices - EPG - - Subscriptions - Live TV + - Subscriptions + - Devices + - name: System + tags: + - Download Queue paths: /: get: @@ -3762,6 +3748,7 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" + x-speakeasy-retries-name: plextv-auth-retry /player/playback/audioStream: post: operationId: playerAudioStream @@ -6439,6 +6426,7 @@ paths: application/json: schema: $ref: "#/components/schemas/UnauthorizedErrorResponse" + x-speakeasy-retries-name: plextv-auth-retry /users/signout: delete: operationId: signOut @@ -6465,6 +6453,7 @@ paths: description: OK '400': $ref: "#/components/responses/400" + x-speakeasy-retries-name: plextv-auth-retry /webhooks: get: operationId: getWebhooks @@ -12807,6 +12796,7 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" + x-speakeasy-retries-name: plextv-auth-retry /playlists/{playlistId}: delete: operationId: deletePlaylist @@ -16632,24 +16622,6 @@ components: example: abc123 example: abc123 x-speakeasy-name-override: Client-Identifier - X-Plex-Client-Profile-Extra: - name: X-Plex-Client-Profile-Extra - description: See [Profile Augmentations](#section/API-Info/Profile-Augmentations) . - in: header - schema: - type: string - example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) - example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) - x-speakeasy-name-override: Client-Profile-Extra - X-Plex-Client-Profile-Name: - name: X-Plex-Client-Profile-Name - description: Which built in Client Profile to use in the decision. Generally should only be used to specify the Generic profile. - in: header - schema: - type: string - example: generic - example: generic - x-speakeasy-name-override: Client-Profile-Name X-Plex-Container-Size: name: X-Plex-Container-Size description: |- @@ -16748,15 +16720,6 @@ components: example: Plex for Roku example: Plex for Roku x-speakeasy-name-override: Product - X-Plex-Session-Identifier: - name: X-Plex-Session-Identifier - description: Unique per client playback session. Used if a client can playback multiple items at a time (such as a browser with multiple tabs) - in: header - schema: - type: string - example: abc123 - example: abc123 - x-speakeasy-name-override: Session-Identifier X-Plex-Version: name: X-Plex-Version description: The version of the client application @@ -16822,10 +16785,6 @@ components: description: Not Found content: text/html: {} - '500': - description: Internal Server Error - content: - text/html: {} dvrRequestHandler_slash-get-responses-200: description: OK headers: @@ -19956,8 +19915,6 @@ components: type: integer state: type: integer - Title: - type: string TopUserAccount: type: object properties: @@ -20032,8 +19989,6 @@ components: type: boolean transcodeHwRequested: type: boolean - Type: - type: string UltraBlurColors: type: object properties: @@ -20070,48 +20025,6 @@ components: format: int32 example: 401 x-speakeasy-name-override: Unauthorized - UpdaterRelease: - type: object - properties: - added: - description: A list of what has been added in this version - type: string - downloadURL: - description: The URL of where this update is available - type: string - fixed: - description: A list of what has been fixed in this version - type: string - key: - description: The URL key of the update - type: string - state: - description: |- - The status of this update. - - - available - This release is available - - downloading - This release is downloading - - downloaded - This release has been downloaded - - installing - This release is installing - - tonight - This release will be installed tonight - - skipped - This release has been skipped - - error - This release has an error - - notify - This release is only notifying it is available (typically because it cannot be installed on this setup) - - done - This release is complete - type: string - enum: - - available - - downloading - - downloaded - - installing - - tonight - - skipped - - error - - notify - - done - version: - description: The version available - type: string User: description: The user playing the content type: object @@ -20852,3 +20765,14 @@ components: user: type: boolean example: true +x-speakeasy-retries: + - name: plextv-auth-retry + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + type: exponential + statusCodes: + - 429 + strategy: backoff From 5dd93d7bab0247ea1f59ce50b2a90d83076f8d2f Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 17:17:27 -0500 Subject: [PATCH 09/26] =?UTF-8?q?feat:=20Add=20all=20remaining=20gap=20end?= =?UTF-8?q?points=20=E2=80=94=20JWT,=20playback,=20library,=20live=20TV?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Endpoints added: - JWT Device Registration: POST /auth/jwk, GET /auth/nonce, POST /auth/token, GET /auth/keys (clients.plex.tv/api/v2) - Playback: GET /playQueues/1, GET /music/:/transcode, DASH/HLS segment delivery (.m4s/.ts) - Library: /library/sections/{id}/agents, /match, /unmatch, /edit, /move, /settings, /playlists, /hubs, /timeline, /search, /tags, /label, /library/metadata/{id}/onDeck, /reviews, /parent, /grandparent - Live TV: PUT/PATCH /livetv/dvrs/{id}, GET /channels, GET /guide, DELETE /livetv/sessions/{id}, GET /livetv/recordings, GET /livetv/epg/search Query params added: - /status/sessions/history/all: includeFields, includeElements, viewedAt>, viewedAt<, deviceID - /statistics/bandwidth: accountID, deviceID, lan - /services/browse: includeFiles - /library/metadata/{ids}/refresh: skipRefresh - Transcoder endpoints: maxVideoBitrate, videoResolution, copyts Schema wiring: - /media/providers → Provider array - POST /playQueues → MediaContainerWithPlayQueue - GET /webhooks → WebhookPayload Validation: 0 speakeasy errors, 0 vacuum errors, prettier clean --- plex-api-spec.yaml | 1199 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 1133 insertions(+), 66 deletions(-) diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index cb678dcf3..085ea33a2 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -932,6 +932,144 @@ paths: type: array items: $ref: "#/components/schemas/Activity" + /auth/jwk: + post: + operationId: registerDeviceJWK + summary: Register Device JWK + tags: + - Authentication + description: Register a device public key (JWK) for JWT-based authentication. + servers: + - url: https://clients.plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + requestBody: + content: + application/json: + schema: + type: object + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /auth/keys: + get: + operationId: getAuthKeys + summary: Get Auth Keys + tags: + - Authentication + description: Get Plex public JWKs for signature verification. + servers: + - url: https://clients.plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /auth/nonce: + get: + operationId: getAuthNonce + summary: Get Auth Nonce + tags: + - Authentication + description: Get a nonce to sign in client JWT authentication flow. + servers: + - url: https://clients.plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + /auth/token: + post: + operationId: exchangeJWTToken + summary: Exchange JWT Token + tags: + - Authentication + description: Exchange a signed client JWT for a Plex JWT token. + servers: + - url: https://clients.plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + requestBody: + content: + application/json: + schema: + type: object + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /butler: delete: operationId: stopTasks @@ -2878,6 +3016,56 @@ paths: description: No provider with the identifier was found content: text/html: {} + /livetv/epg/search: + get: + operationId: searchEPG + summary: Search EPG + tags: + - EPG + description: Search the electronic program guide for upcoming airings. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + /livetv/recordings: + get: + operationId: getDVRRecordings + summary: Get DVR Recordings + tags: + - Live TV + description: List completed DVR recordings. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK /livetv/sessions: get: operationId: getSessions @@ -3158,28 +3346,12 @@ paths: type: object properties: MediaContainer: - allOf: - - $ref: "#/components/schemas/ServerConfiguration" - - type: object - properties: - title: - description: The title of the provider. - type: string - Feature: - type: array - items: - $ref: "#/components/schemas/Feature" - identifier: - description: A unique identifier for the provider, e.g. `com.plexapp.plugins.library`. - type: string - protocols: - description: |- - A comma-separated list of default protocols for the provider, which can be: - - `stream`: The provider allows streaming media directly from the provider (e.g. for Vimeo). - `download`: The provider allows downloading media for offline storage, sync, etc. (e.g. Podcasts). - `livetv`: The provider provides live content which is only available on a schedule basis. - type: string - types: - description: This attribute contains a comma-separated list of the media types exposed by the provider (e.g. `video, audio`). - type: string + type: object + properties: + Provider: + type: array + items: + $ref: "#/components/schemas/Provider" post: operationId: addProvider summary: Add a media provider @@ -3499,6 +3671,31 @@ paths: description: User cannot access DVR on this server content: text/html: {} + /music/:/transcode: + get: + operationId: transcodeMusic + summary: Transcode Music + tags: + - Transcoder + description: Audio transcode endpoint for music playback. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK /myplex/claim: post: operationId: claimServer @@ -4711,14 +4908,38 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - $ref: "#/components/schemas/MediaContainer" - - $ref: "#/components/schemas/PlayQueueResponse" + $ref: "#/components/schemas/MediaContainerWithPlayQueue" '400': $ref: "#/components/responses/400" + /playQueues/1: + get: + operationId: getConversionQueue + summary: Get Conversion Queue + tags: + - Timeline + description: Get the conversion/optimization queue. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithPlayQueue" /resources: get: operationId: get-server-resources @@ -5026,9 +5247,10 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: includeFiles + description: Include files in browse results in: query schema: - type: boolean + $ref: "#/components/schemas/BoolInt" responses: '200': description: OK @@ -5210,11 +5432,27 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: timespan + description: Dashboard timespan (1-6) in: query schema: type: integer minimum: 1 maximum: 6 + - name: accountID + description: Filter by account ID + in: query + schema: + type: integer + - name: deviceID + description: Filter by device ID + in: query + schema: + type: integer + - name: lan + description: Filter to LAN-only traffic + in: query + schema: + $ref: "#/components/schemas/BoolInt" responses: '200': description: OK @@ -5374,6 +5612,31 @@ paths: in: query schema: type: string + - name: includeFields + description: Whitelist of fields to return + in: query + schema: + type: string + - name: includeElements + description: Whitelist of elements to include + in: query + schema: + type: string + - name: viewedAt> + description: Greater-than filter for viewedAt timestamp + in: query + schema: + type: integer + - name: viewedAt< + description: Less-than filter for viewedAt timestamp + in: query + schema: + type: integer + - name: deviceID + description: Filter by device ID + in: query + schema: + type: integer responses: '200': description: OK @@ -6481,7 +6744,7 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/WebhookPayload" '400': $ref: "#/components/responses/400" '401': @@ -6690,13 +6953,28 @@ paths: - segmented - unknown example: Burn - - name: videoBitrate - description: Target video bitrate (in kbps). + - name: maxVideoBitrate + description: Client-side maximum video bitrate cap in kbps in: query schema: type: integer - minimum: 0 - example: 12000 + - name: videoResolution + description: Cap resolution string (e.g. 1920x1080) + in: query + schema: + type: string + - name: copyts + description: Copy timestamps instead of re-encoding them + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: videoBitrate + description: Target video bitrate (in kbps). + in: query + schema: + type: integer + minimum: 0 + example: 12000 - name: videoQuality description: Target photo quality. in: query @@ -6705,13 +6983,6 @@ paths: minimum: 0 maximum: 99 example: 50 - - name: videoResolution - description: Target maximum video resolution. - in: query - schema: - type: string - pattern: ^\d[x:]\d$ - example: 1080x1080 - name: X-Plex-Client-Identifier description: Unique per client. in: header @@ -6979,6 +7250,21 @@ paths: - segmented - unknown example: Burn + - name: maxVideoBitrate + description: Client-side maximum video bitrate cap in kbps + in: query + schema: + type: integer + - name: videoResolution + description: Cap resolution string (e.g. 1920x1080) + in: query + schema: + type: string + - name: copyts + description: Copy timestamps instead of re-encoding them + in: query + schema: + $ref: "#/components/schemas/BoolInt" - name: videoBitrate description: Target video bitrate (in kbps). in: query @@ -6994,13 +7280,6 @@ paths: minimum: 0 maximum: 99 example: 50 - - name: videoResolution - description: Target maximum video resolution. - in: query - schema: - type: string - pattern: ^\d[x:]\d$ - example: 1080x1080 - name: X-Plex-Client-Identifier description: Unique per client. in: header @@ -8207,6 +8486,40 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/metadata/{id}/grandparent: + get: + operationId: getMetadataGrandparent + summary: Get Metadata Grandparent + tags: + - Library + description: Get grandparent metadata shortcut. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/metadata/{id}/nearest: get: operationId: getNearestMetadata @@ -8261,6 +8574,74 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/metadata/{id}/onDeck: + get: + operationId: getMetadataOnDeck + summary: Get Metadata On Deck + tags: + - Library + description: Get On Deck status for a show or season. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/metadata/{id}/parent: + get: + operationId: getMetadataParent + summary: Get Metadata Parent + tags: + - Library + description: Get parent metadata shortcut. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/metadata/{id}/posters: post: operationId: uploadPoster @@ -8300,6 +8681,36 @@ paths: responses: '200': description: OK + /library/metadata/{id}/reviews: + get: + operationId: getMetadataReviews + summary: Get Metadata Reviews + tags: + - Library + description: Get user reviews for a metadata item. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK /library/metadata/{ids}: delete: operationId: deleteMetadataItem @@ -9187,6 +9598,11 @@ paths: required: false schema: $ref: "#/components/schemas/BoolInt" + - name: skipRefresh + description: Skip synchronous refresh + in: query + schema: + $ref: "#/components/schemas/BoolInt" responses: '200': $ref: "#/components/responses/200" @@ -9847,6 +10263,36 @@ paths: description: Section cannot be created due to bad parameters in request content: text/html: {} + /library/sections/{sectionId}/agents: + get: + operationId: getSectionAgents + summary: Get Section Agents + tags: + - Library + description: Get available metadata agents for a library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK /library/sections/{sectionId}/albums: get: operationId: getAlbums @@ -10886,6 +11332,65 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/sections/{sectionId}/edit: + get: + operationId: getSectionEdit + summary: Edit Section + tags: + - Library + description: Get library section metadata. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + put: + operationId: editLibrarySection + summary: Edit Section + tags: + - Library + description: Update library section metadata. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK /library/sections/{sectionId}/emptyTrash: get: operationId: emptyTrash @@ -11071,13 +11576,13 @@ paths: size: description: The number of items starting with this character type: integer - /library/sections/{sectionId}/indexes: - delete: - operationId: deleteIndexes - summary: Delete section indexes + /library/sections/{sectionId}/hubs: + get: + operationId: getLibrarySectionHubs + summary: Get Section Hubs tags: - Library - description: Delete all the indexes in a section + description: Get hubs for a library section. security: - token: - admin @@ -11094,21 +11599,24 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: Section identifier in: path required: true schema: type: integer responses: '200': - $ref: "#/components/responses/200" - /library/sections/{sectionId}/intros: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithHubs" + /library/sections/{sectionId}/indexes: delete: - operationId: deleteIntros - summary: Delete section intro markers + operationId: deleteIndexes + summary: Delete section indexes tags: - Library - description: Delete all the intro markers in a section + description: Delete all the indexes in a section security: - token: - admin @@ -11133,6 +11641,67 @@ paths: responses: '200': $ref: "#/components/responses/200" + /library/sections/{sectionId}/intros: + delete: + operationId: deleteIntros + summary: Delete section intro markers + tags: + - Library + description: Delete all the intro markers in a section + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: Section identifier + in: path + required: true + schema: + type: integer + responses: + '200': + $ref: "#/components/responses/200" + /library/sections/{sectionId}/label: + get: + operationId: getSectionLabels + summary: Get Section Labels + tags: + - Library + description: Get labels for a library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK /library/sections/{sectionId}/location: get: operationId: getFolders @@ -11182,6 +11751,36 @@ paths: type: string key: type: string + /library/sections/{sectionId}/match: + get: + operationId: matchSectionItems + summary: Match Section Items + tags: + - Library + description: Match items in a library section against metadata providers. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK /library/sections/{sectionId}/moment: get: operationId: listMoments @@ -11214,6 +11813,36 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithArtwork" + /library/sections/{sectionId}/move: + put: + operationId: moveSection + summary: Move Section + tags: + - Library + description: Move library section paths. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK /library/sections/{sectionId}/nearest: get: operationId: getSonicallySimilar @@ -11396,6 +12025,40 @@ paths: responses: '200': description: OK + /library/sections/{sectionId}/playlists: + get: + operationId: getSectionPlaylists + summary: Get Section Playlists + tags: + - Library + description: Get playlists belonging to a library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" /library/sections/{sectionId}/prefs: get: operationId: getSectionPreferences @@ -11602,6 +12265,70 @@ paths: responses: '200': $ref: "#/components/responses/200" + /library/sections/{sectionId}/search: + get: + operationId: searchSection + summary: Search Section + tags: + - Library + description: Search within a specific library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + /library/sections/{sectionId}/settings: + get: + operationId: getSectionSettings + summary: Get Section Settings + tags: + - Library + description: Get section-specific settings. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK /library/sections/{sectionId}/sorts: get: operationId: getAvailableSorts @@ -11634,6 +12361,96 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSorts" + /library/sections/{sectionId}/tags: + get: + operationId: getSectionTags + summary: Get Section Tags + tags: + - Library + description: Get tags in a library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + /library/sections/{sectionId}/timeline: + get: + operationId: getSectionTimeline + summary: Get Section Timeline + tags: + - Library + description: Get section timeline data. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + /library/sections/{sectionId}/unmatch: + get: + operationId: unmatchSectionItems + summary: Unmatch Section Items + tags: + - Library + description: Unmatch items in a library section from metadata providers. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK /library/sections/{sectionId}/unwatched: get: operationId: getUnwatchedForSection @@ -11838,6 +12655,128 @@ paths: application/json: schema: $ref: "#/components/schemas/DVRResponse" + patch: + operationId: patchDVR + summary: Update DVR + tags: + - DVRs + description: Update DVR settings. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: dvrId + description: The ID of the DVR. + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + put: + operationId: updateDVR + summary: Update DVR + tags: + - DVRs + description: Update DVR settings. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: dvrId + description: The ID of the DVR. + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + /livetv/dvrs/{dvrId}/channels: + get: + operationId: getDVRChannels + summary: Get DVR Channels + tags: + - DVRs + description: List channels directly associated with a DVR. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: dvrId + description: The ID of the DVR. + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + /livetv/dvrs/{dvrId}/guide: + get: + operationId: getDVRGuide + summary: Get DVR Guide + tags: + - DVRs + description: Fetch program guide/schedule for a DVR. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: dvrId + description: The ID of the DVR. + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK /livetv/dvrs/{dvrId}/lineups: delete: operationId: deleteLineup @@ -12055,6 +12994,36 @@ paths: content: text/html: {} /livetv/sessions/{sessionId}: + delete: + operationId: deleteLiveTVSession + summary: Delete Live TV Session + tags: + - Live TV + description: Terminate a Live TV session. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sessionId + description: The session id + in: path + required: true + schema: + type: string + responses: + '200': + description: OK get: operationId: getLiveTVSession summary: Get a single session @@ -13865,6 +14834,21 @@ paths: - segmented - unknown example: Burn + - name: maxVideoBitrate + description: Client-side maximum video bitrate cap in kbps + in: query + schema: + type: integer + - name: videoResolution + description: Cap resolution string (e.g. 1920x1080) + in: query + schema: + type: string + - name: copyts + description: Copy timestamps instead of re-encoding them + in: query + schema: + $ref: "#/components/schemas/BoolInt" - name: videoBitrate description: Target video bitrate (in kbps). in: query @@ -13880,13 +14864,6 @@ paths: minimum: 0 maximum: 99 example: 50 - - name: videoResolution - description: Target maximum video resolution. - in: query - schema: - type: string - pattern: ^\d[x:]\d$ - example: 1080x1080 - name: X-Plex-Client-Identifier description: Unique per client. in: header @@ -15907,6 +16884,96 @@ paths: description: Play queue or queue item not found content: text/html: {} + /{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s: + get: + operationId: getDASHSegment + summary: Get DASH Segment + tags: + - Transcoder + description: DASH segment delivery for adaptive streaming. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: transcodeType + in: path + required: true + schema: + type: string + - name: sessionId + in: path + required: true + schema: + type: string + - name: segmentId + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + video/mp4: + schema: + type: string + format: binary + /{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts: + get: + operationId: getHLSSegment + summary: Get HLS Segment + tags: + - Transcoder + description: HLS TS segment delivery for adaptive streaming. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: transcodeType + in: path + required: true + schema: + type: string + - name: sessionId + in: path + required: true + schema: + type: string + - name: segmentId + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + video/mp2t: + schema: + type: string + format: binary /library/metadata/{ids}/{element}/{timestamp}: get: operationId: getItemArtwork From 0d5adbc22c1c3912ab69b34611d97f8a3ab27939 Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 17:29:54 -0500 Subject: [PATCH 10/26] =?UTF-8?q?feat:=20Final=20gap=20closure=20=E2=80=94?= =?UTF-8?q?=20library=20types,=20query=20params,=20docs,=20SDK=20hints?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Endpoints added: - GET /library/sections/{id}/artists, /shows, /episodes, /movies, /clips, /photos Query params added: - GET /playlists: type (for type=42 conversion items) - GET /status/sessions/history/all: X-Plex-Container-Start, X-Plex-Container-Size Documentation: - Fixed scrobble/unscrobble uri parameter descriptions - Added tag descriptions for Devices, Download Queue, Provider - Added Collection note to MediaContainerWithMetadata SDK hints: - x-speakeasy-unknown-fields: true on Metadata, Hub, Activity, Session, Stream, UserPlexAccount Validation: 0 speakeasy errors, 0 vacuum errors, prettier clean --- plex-api-spec.yaml | 257 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 250 insertions(+), 7 deletions(-) diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index 085ea33a2..34b15b017 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -137,8 +137,12 @@ tags: - UDN: (string) A UUID for the device. This should be unique across models of a device at minimum. - URLBase: (string) The base HTTP URL for the device from which all of the other endpoints are hosted. + + Note: This tag covers media grabber and network tuner devices only. For client device discovery, use `/clients` or `/resources`. - name: Download Queue - description: API Operations against the Download Queue + description: |- + API Operations against the Download Queue. + Note: The Download Queue is distinct from the Play Queue. The Download Queue manages offline/downloaded content, while the Play Queue manages active playback sessions. - name: DVRs description: The DVR provides means to watch and record live TV. This section of endpoints describes how to setup the DVR itself - name: EPG @@ -177,7 +181,9 @@ tags: - name: Preferences description: API Operations against the Preferences - name: Provider - description: Media providers are the starting points for the entire Plex Media Server media library API. It defines the paths for the groups of endpoints. The `/media/providers` should be the only hard-coded path in clients when accessing the media library. Non-media library endpoints are outside the scope of the media provider. See the description in See [the section in API Info](#section/API-Info/Media-Providers) for more information on how to use media providers. + description: |- + Media providers are the starting points for the entire Plex Media Server media library API. It defines the paths for the groups of endpoints. The `/media/providers` should be the only hard-coded path in clients when accessing the media library. Non-media library endpoints are outside the scope of the media provider. See the description in See [the section in API Info](#section/API-Info/Media-Providers) for more information on how to use media providers. + Note: Dynamic proxy paths such as `/{provider}/search`, `/{provider}/metadata`, and other provider-relative routes are resolved through the media provider API. - name: Rate description: Operations for rating media items (thumbs up/down, star ratings, etc.) - name: Search @@ -505,9 +511,9 @@ paths: schema: type: string - name: uri - description: The URI of the item to mark as played. See intro for description of the URIs + description: URI of the item to scrobble. Format is `library:///item/` or `plex://movie/` or `plex://episode/`. in: query - required: false + required: true schema: type: string responses: @@ -703,9 +709,9 @@ paths: schema: type: string - name: uri - description: The URI of the item to mark as played. See intro for description of the URIs + description: URI of the item to scrobble. Format is `library:///item/` or `plex://movie/` or `plex://episode/`. in: query - required: false + required: true schema: type: string responses: @@ -4722,6 +4728,11 @@ paths: - audio - video - photo + - name: type + description: Filter by playlist type. Use 42 for optimized/conversion items. + in: query + schema: + type: integer responses: '200': description: OK @@ -5574,6 +5585,16 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Container-Start + description: Pagination start offset + in: query + schema: + type: integer + - name: X-Plex-Container-Size + description: Pagination page size + in: query + schema: + type: integer - name: accountID description: The account id to restrict view history in: query @@ -10376,7 +10397,9 @@ paths: summary: Get items in the section tags: - Content - description: Get the items in a section, potentially filtering them + description: |- + Get the items in a section, potentially filtering them. + When `includeCollections=1` is passed, the response may also contain `Collection` items. security: - token: - admin @@ -10863,6 +10886,41 @@ paths: responses: '200': $ref: "#/components/responses/200" + /library/sections/{sectionId}/artists: + get: + operationId: getSectionArtists + summary: Get Section Artists + tags: + - Library + description: Get artists for a music library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The id of the section + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/sections/{sectionId}/arts: get: operationId: getArts @@ -11155,6 +11213,41 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithArtwork" + /library/sections/{sectionId}/clips: + get: + operationId: getSectionClips + summary: Get Section Clips + tags: + - Library + description: Get clips for a library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The id of the section + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/sections/{sectionId}/cluster: get: operationId: getCluster @@ -11480,6 +11573,41 @@ paths: responses: '200': $ref: "#/components/responses/200" + /library/sections/{sectionId}/episodes: + get: + operationId: getSectionEpisodes + summary: Get Section Episodes + tags: + - Library + description: Get episodes for a TV library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The id of the section + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/sections/{sectionId}/filters: get: operationId: getSectionFilters @@ -11843,6 +11971,41 @@ paths: responses: '200': description: OK + /library/sections/{sectionId}/movies: + get: + operationId: getSectionMovies + summary: Get Section Movies + tags: + - Library + description: Get movies for a movie library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The id of the section + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/sections/{sectionId}/nearest: get: operationId: getSonicallySimilar @@ -12025,6 +12188,41 @@ paths: responses: '200': description: OK + /library/sections/{sectionId}/photos: + get: + operationId: getSectionPhotos + summary: Get Section Photos + tags: + - Library + description: Get photos for a photo library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The id of the section + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/sections/{sectionId}/playlists: get: operationId: getSectionPlaylists @@ -12329,6 +12527,41 @@ paths: responses: '200': description: OK + /library/sections/{sectionId}/shows: + get: + operationId: getSectionShows + summary: Get Section Shows + tags: + - Library + description: Get shows for a TV library section. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The id of the section + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" /library/sections/{sectionId}/sorts: get: operationId: getAvailableSorts @@ -18031,6 +18264,7 @@ components: schemas: Activity: type: object + additionalProperties: true properties: title: description: A user-friendly title for this activity @@ -18063,6 +18297,7 @@ components: uuid: description: The ID of the activity type: string + x-speakeasy-unknown-fields: true AddedQueueItem: type: object properties: @@ -18651,6 +18886,7 @@ components: totalSize: type: integer example: 8 + x-speakeasy-unknown-fields: true Image: description: Images such as movie posters and background artwork are represented by Image elements. type: object @@ -19155,6 +19391,7 @@ components: items: $ref: "#/components/schemas/MediaGrabOperation" MediaContainerWithMetadata: + description: A MediaContainer that includes metadata items. When `includeCollections=1` is passed to endpoints such as `/library/sections/{sectionId}/all`, this container may also include `Collection` items. type: object properties: MediaContainer: @@ -19859,6 +20096,7 @@ components: - key - title - type + x-speakeasy-unknown-fields: true NotificationContainer: type: object properties: @@ -20477,6 +20715,7 @@ components: Session: description: Information about the playback session type: object + additionalProperties: true properties: title: description: Title of the media being played. @@ -20506,6 +20745,7 @@ components: description: UUID of the playback session. type: string example: 5d776d057ae4e7001f65e7d0 + x-speakeasy-unknown-fields: true Setting: description: A configuration setting or preference type: object @@ -20924,6 +21164,7 @@ components: - codec - displayTitle - streamType + x-speakeasy-unknown-fields: true Tag: description: A variety of extra information about a metadata item is included as tags. These tags use their own element names such as `Genre`, `Writer`, `Directory`, and `Role`. Individual tag types may introduce their own extra attributes. type: object @@ -21108,6 +21349,7 @@ components: UserPlexAccount: title: UserPlexAccount type: object + additionalProperties: true properties: title: description: The title of the account (username or friendly name) @@ -21616,6 +21858,7 @@ components: - twoFactorEnabled - username - uuid + x-speakeasy-unknown-fields: true UserProfile: title: UserProfile type: object From 377eb9a2cd5fe6ba4b6486a6214a5050ad2e1cab Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 17:57:35 -0500 Subject: [PATCH 11/26] =?UTF-8?q?feat:=20100%=20parity=20=E2=80=94=20final?= =?UTF-8?q?=20endpoints,=20schema=20fixes,=20query=20params?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Endpoints added: - Plex.tv: PUT /pins/link, GET /features, GET /home, GET /api/resources, GET /api/users/, POST /pins.xml, GET/POST /api/v2/user/webhooks - PMS: GET /library, GET /library/sections/, GET /myplex/account, PUT /myplex/refreshReachability, GET /transcode/sessions, DELETE /playlists, GET /livetv/epg/guide, GET /livetv/dvrs/{id}/recordings Schema corrections: - ServerConfiguration: diagnostics, transcoderVideoBitrates, transcoderVideoQualities, transcoderVideoResolutions, ownerFeatures → array - GET / response → allOf ServerConfiguration + Directory - Metadata: +distance, Playlist: +durationInSeconds, +radio - Timeline: +playQueueID, Hub: +reason, +reasonTitle, +reasonID - PlexDevice: removed nullable fields from required - Created UpdaterStatus component Query params added: - /library/sections/{id}/all: filters, unwatched, genre, studio, contentRating, resolution, year, firstCharacter - POST /:/timeline: containerKey, playQueueID, guid, url - Transcoder: platform - Live TV: uuid, lineup, dvrId, channel - Subscriptions: pagination, template params - Grabbers: protocol enum, grabberIdentifier - DVR/Grabber prefs: value Validation: 0 speakeasy errors, 0 vacuum errors, prettier clean --- plex-api-spec.yaml | 542 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 522 insertions(+), 20 deletions(-) diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index 34b15b017..be9f7171d 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -254,7 +254,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/MediaContainerWithDirectory" + allOf: + - $ref: "#/components/schemas/ServerConfiguration" + - type: object + properties: + Directory: + type: array + items: + $ref: "#/components/schemas/Directory" /:/eventsource/notifications: get: operationId: getNotifications @@ -635,6 +642,26 @@ paths: schema: type: integer example: 1024 + - name: containerKey + description: Groups timeline reports (e.g. /playQueues/123). + in: query + schema: + type: string + - name: guid + description: Global unique identifier for the item. + in: query + schema: + type: string + - name: playQueueID + description: Identifies the play queue itself (distinct from playQueueItemID). + in: query + schema: + type: integer + - name: url + description: Alternative to key/ratingKey (legacy). + in: query + schema: + type: string - name: X-Plex-Client-Identifier description: Unique per client. in: header @@ -667,6 +694,9 @@ paths: type: array items: $ref: "#/components/schemas/Bandwidth" + playQueueID: + description: The play queue ID when playback originates from a queue. + type: integer terminationCode: description: A code describing why the session was terminated by the server. type: integer @@ -938,6 +968,81 @@ paths: type: array items: $ref: "#/components/schemas/Activity" + /api/resources: + get: + operationId: getLegacyResources + summary: Get Legacy Resources + tags: + - Users + description: Get legacy published server connections (XML). + servers: + - url: https://plex.tv/api + responses: + '200': + description: OK + content: + application/xml: + schema: + type: object + /api/users/: + get: + operationId: getLegacyUsers + summary: Get Legacy Users + tags: + - Users + description: Get legacy friends list (XML). + servers: + - url: https://plex.tv/api + responses: + '200': + description: OK + content: + application/xml: + schema: + type: object + /api/v2/user/webhooks: + get: + operationId: getUserWebhooks + summary: User Webhooks + tags: + - General + description: List webhook URLs for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/WebhookPayload" + post: + operationId: addUserWebhook + summary: Add User Webhook + tags: + - General + description: Add a webhook URL for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /auth/jwk: post: operationId: registerDeviceJWK @@ -1351,6 +1456,22 @@ paths: type: array items: $ref: "#/components/schemas/DownloadQueue" + /features: + get: + operationId: getFeatures + summary: Get Features + tags: + - Authentication + description: Get Plex Pass feature flags for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + responses: + '200': + description: OK + content: + application/json: + schema: + type: object /friends: get: operationId: getFriends @@ -1433,6 +1554,18 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" + /home: + get: + operationId: getHome + summary: Get Home + tags: + - Users + description: Get Plex Home user list. + servers: + - url: https://plex.tv/api/v2 + responses: + '200': + description: OK /home/users: get: operationId: getHomeUsers @@ -1866,8 +1999,8 @@ paths: type: string /ip: get: - operationId: getPublicIP - summary: Get Public IP + operationId: getIP + summary: Get IP tags: - General description: Get the public IP address detected by Plex. @@ -1896,6 +2029,23 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" + /library: + get: + operationId: getRootLibrary + summary: Get Root Library + tags: + - Library + description: Get the root library object. + security: + - token: + - admin + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" /library/all: get: operationId: getLibraryItems @@ -2365,6 +2515,23 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" + /library/sections/: + get: + operationId: getLibrarySectionsFallback + summary: Get Library Sections (Fallback) + tags: + - Library + description: Fallback for non-owners to list library sections. + security: + - token: + - admin + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" /library/sections/all: get: operationId: getSections @@ -2673,6 +2840,17 @@ paths: tags: - DVRs description: Get the list of all available DVRs + parameters: + - name: uuid + description: Filter by DVR UUID. + in: query + schema: + type: string + - name: lineup + description: Filter by lineup. + in: query + schema: + type: string responses: '200': description: OK @@ -2887,6 +3065,19 @@ paths: type: array items: $ref: "#/components/schemas/EPGCountry" + /livetv/epg/guide: + get: + operationId: getEPGGuide + summary: Get EPG Guide + tags: + - EPG + description: Fetch the global electronic program guide. + security: + - token: + - admin + responses: + '200': + description: OK /livetv/epg/languages: get: operationId: getAllLanguages @@ -3079,6 +3270,17 @@ paths: tags: - Live TV description: Get all livetv sessions and metadata + parameters: + - name: dvrId + description: Filter by DVR ID. + in: query + schema: + type: integer + - name: channel + description: Filter by channel ID. + in: query + schema: + type: integer responses: '200': description: OK @@ -3320,7 +3522,7 @@ paths: '400': $ref: "#/components/responses/400" /media/grabbers/devices/discover: - post: + get: operationId: discoverDevices summary: Tell grabbers to discover devices tags: @@ -3329,6 +3531,21 @@ paths: security: - token: - admin + parameters: + - name: protocol + description: Protocol to filter discovery. + in: query + schema: + type: string + enum: + - stream + - download + - livetv + - name: grabberIdentifier + description: Targeted grabber identifier. + in: query + schema: + type: string responses: '200': description: OK @@ -3426,6 +3643,16 @@ paths: in: query schema: $ref: "#/components/schemas/BoolInt" + - name: X-Plex-Container-Start + description: Pagination start offset. + in: query + schema: + type: integer + - name: X-Plex-Container-Size + description: Pagination page size. + in: query + schema: + type: integer responses: '200': description: OK @@ -3618,6 +3845,16 @@ paths: schema: type: string example: plex://episode/5fc70265c40548002d539d23 + - name: type + description: Subscription type. + in: query + schema: + type: string + - name: targetLibrarySectionID + description: Target library section ID. + in: query + schema: + type: integer responses: '200': description: OK @@ -3702,6 +3939,19 @@ paths: responses: '200': description: OK + /myplex/account: + get: + operationId: getMyPlexAccount + summary: Get MyPlex Account + tags: + - Users + description: Get linked MyPlex account info on PMS. + security: + - token: + - admin + responses: + '200': + description: OK /myplex/claim: post: operationId: claimServer @@ -3732,6 +3982,19 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" + /myplex/refreshReachability: + put: + operationId: refreshReachability + summary: Refresh Reachability + tags: + - General + description: Refresh remote access port mapping. + security: + - token: + - admin + responses: + '200': + description: OK /photo/:/transcode: get: operationId: transcodeImage @@ -3952,6 +4215,52 @@ paths: '401': $ref: "#/components/responses/401" x-speakeasy-retries-name: plextv-auth-retry + /pins.xml: + post: + operationId: createLegacyPin + summary: Create Legacy PIN + tags: + - Authentication + description: Legacy PIN creation (XML). + servers: + - url: https://plex.tv + responses: + '200': + description: OK + content: + application/xml: + schema: + type: object + /pins/link: + put: + operationId: linkOAuthPin + summary: Link OAuth PIN + tags: + - Authentication + description: Link a PIN to an account (OAuth completion). + servers: + - url: https://plex.tv/api/v2 + requestBody: + content: + application/json: + schema: + type: object + properties: + authToken: + type: string + pin: + type: string + application/x-www-form-urlencoded: + schema: + type: object + properties: + authToken: + type: string + pin: + type: string + responses: + '200': + description: OK /player/playback/audioStream: post: operationId: playerAudioStream @@ -4700,6 +5009,36 @@ paths: '200': description: OK /playlists: + delete: + operationId: deletePlaylistByRatingKey + summary: Delete Playlist + tags: + - Playlists + description: Delete a playlist. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ratingKey + description: The rating key of the playlist to delete. + in: query + required: true + schema: + type: integer + responses: + '200': + description: OK get: operationId: listPlaylists summary: List playlists @@ -5941,6 +6280,19 @@ paths: responses: '200': description: OK + /transcode/sessions: + get: + operationId: getTranscodeSessions + summary: Get Transcode Sessions + tags: + - Transcoder + description: Get active transcode sessions. + security: + - token: + - admin + responses: + '200': + description: OK /updater/apply: put: operationId: applyUpdates @@ -6819,6 +7171,11 @@ paths: - $ref: "#/components/parameters/transcodeType" - $ref: "#/components/parameters/transcodeSessionId" - $ref: "#/components/parameters/advancedSubtitles" + - name: platform + description: Client platform (some clients send this in addition to headers). + in: query + schema: + type: string - name: audioBoost description: Percentage of original audio loudness to use when transcoding (100 is equivalent to original volume, 50 is half, 200 is double, etc) in: query @@ -7116,6 +7473,11 @@ paths: - $ref: "#/components/parameters/transcodeType" - $ref: "#/components/parameters/transcodeSessionId" - $ref: "#/components/parameters/advancedSubtitles" + - name: platform + description: Client platform (some clients send this in addition to headers). + in: query + schema: + type: string - name: audioBoost description: Percentage of original audio loudness to use when transcoding (100 is equivalent to original volume, 50 is half, 200 is double, etc) in: query @@ -7745,8 +8107,8 @@ paths: $ref: "#/components/schemas/DownloadQueueItem" /downloads/{channel}.json: get: - operationId: getDownloads - summary: Get Downloads + operationId: getPlexDownloads + summary: Get Plex Downloads tags: - General description: Get available Plex update downloads for a specific channel (e.g. `plexpass`, `public`). @@ -10584,6 +10946,46 @@ paths: in: query schema: type: string + - name: filters + description: General filtering expression. + in: query + schema: + type: string + - name: unwatched + description: Filter to unwatched only (1 = true). + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: genre + description: Filter by genre. + in: query + schema: + type: string + - name: studio + description: Filter by studio. + in: query + schema: + type: string + - name: contentRating + description: Filter by content rating. + in: query + schema: + type: string + - name: resolution + description: Filter by resolution. + in: query + schema: + type: string + - name: year + description: Filter by year. + in: query + schema: + type: integer + - name: firstCharacter + description: Filter by first character of title. + in: query + schema: + type: string responses: '200': description: OK @@ -12889,8 +13291,8 @@ paths: schema: $ref: "#/components/schemas/DVRResponse" patch: - operationId: patchDVR - summary: Update DVR + operationId: patchDVRSettings + summary: Update DVR Settings tags: - DVRs description: Update DVR settings. @@ -12919,8 +13321,8 @@ paths: '200': description: OK put: - operationId: updateDVR - summary: Update DVR + operationId: updateDVRSettings + summary: Update DVR Settings tags: - DVRs description: Update DVR settings. @@ -13142,6 +13544,11 @@ paths: in: query schema: type: string + - name: value + description: Preference value to set. + in: query + schema: + type: string responses: '200': description: OK @@ -13158,6 +13565,37 @@ paths: application/json: schema: $ref: "#/components/schemas/DVRResponse" + /livetv/dvrs/{dvrId}/recordings: + get: + operationId: getDVRRecordingsByDVR + summary: Get DVR Recordings by DVR + tags: + - Live TV + description: List completed DVR recordings for a specific DVR. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: dvrId + description: The ID of the DVR. + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK /livetv/dvrs/{dvrId}/reloadGuide: delete: operationId: stopDVRReload @@ -13604,6 +14042,11 @@ paths: in: query schema: type: string + - name: value + description: Preference value to set. + in: query + schema: + type: string responses: '200': $ref: "#/components/responses/200" @@ -14903,6 +15346,11 @@ paths: - $ref: "#/components/parameters/transcodeType" - $ref: "#/components/parameters/transcodeSessionId" - $ref: "#/components/parameters/advancedSubtitles" + - name: platform + description: Client platform (some clients send this in addition to headers). + in: query + schema: + type: string - name: extension description: Extension in: path @@ -18873,6 +19321,18 @@ components: random: description: Indicating that the contents of the hub may change on each request type: boolean + reason: + description: Reason for hub inclusion (e.g. "because you watched"). + type: string + example: becauseYouWatched + reasonID: + description: ID of the item that triggered the reason. + type: integer + example: 12345 + reasonTitle: + description: Human-readable reason title. + type: string + example: Because You Watched The Matrix size: type: integer example: 1 @@ -19448,6 +19908,10 @@ components: duration: description: The total duration of the playlist in ms type: integer + durationInSeconds: + description: Total duration in seconds (redundant but present in XML). + type: integer + example: 7200 key: description: Leads to a list of items in the playlist. type: string @@ -19461,6 +19925,10 @@ components: - audio - video - photo + radio: + description: Whether this is a generated radio playlist. + type: boolean + example: false smart: description: Whether or not the playlist is smart. type: boolean @@ -19816,6 +20284,10 @@ components: type: array items: $ref: "#/components/schemas/Tag" + distance: + description: Levenshtein distance for voice search results. + type: integer + example: 2 duration: description: When present, the duration for the item, in units of milliseconds. type: integer @@ -20485,9 +20957,6 @@ components: - name - product - productVersion - - platform - - platformVersion - - device - clientIdentifier - createdAt - lastSeenAt @@ -20634,7 +21103,10 @@ components: countryCode: type: string diagnostics: - type: string + description: Comma-separated list of enabled diagnostics modules. + type: array + items: + type: string eventStream: type: boolean friendlyName: @@ -20666,10 +21138,14 @@ components: myPlexUsername: type: string offlineTranscode: - example: 1 + description: Whether offline transcoding is enabled. + type: integer + format: int32 ownerFeatures: - description: A comma-separated list of features which are enabled for the server owner - type: string + description: List of enabled owner features. + type: array + items: + type: string platform: type: string platformVersion: @@ -20699,11 +21175,20 @@ components: transcoderVideo: type: boolean transcoderVideoBitrates: - description: The suggested video quality bitrates to present to the user + description: List of supported transcoder video bitrates. + type: array + items: + type: string transcoderVideoQualities: - type: string + description: List of supported transcoder video qualities. + type: array + items: + type: string transcoderVideoResolutions: - description: The suggested video resolutions to the above quality bitrates + description: List of supported transcoder video resolutions. + type: array + items: + type: string updatedAt: type: integer updater: @@ -21333,6 +21818,23 @@ components: format: int32 example: 401 x-speakeasy-name-override: Unauthorized + UpdaterStatus: + description: Status of the PMS updater. + type: object + properties: + checkedAt: + description: Timestamp of the last update check. + type: integer + downloadURL: + description: The URL where the update is available. + type: string + Release: + type: array + items: + $ref: "#/components/schemas/Release" + status: + description: The current error code (0 means no error). + type: integer User: description: The user playing the content type: object From bf0cd13f20dde7cd288a0974d61f45c9a8e7c7bf Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 18:58:39 -0500 Subject: [PATCH 12/26] chore: remove review analysis documents from PR branch --- review/PLEX_API_SPEC_FULL_REVIEW.md | 828 ---------------------- review/domain_auth_account_review.md | 228 ------ review/domain_devices_download_review.md | 249 ------- review/domain_library_metadata_review.md | 401 ----------- review/domain_livetv_dvr_review.md | 256 ------- review/domain_media_provider_review.md | 250 ------- review/domain_playback_sessions_review.md | 208 ------ review/domain_server_system_review.md | 289 -------- review/integration_ecosystem_gaps.md | 343 --------- review/python_plexapi_gap_analysis.md | 302 -------- review/undocumented_endpoints_research.md | 423 ----------- 11 files changed, 3777 deletions(-) delete mode 100644 review/PLEX_API_SPEC_FULL_REVIEW.md delete mode 100644 review/domain_auth_account_review.md delete mode 100644 review/domain_devices_download_review.md delete mode 100644 review/domain_library_metadata_review.md delete mode 100644 review/domain_livetv_dvr_review.md delete mode 100644 review/domain_media_provider_review.md delete mode 100644 review/domain_playback_sessions_review.md delete mode 100644 review/domain_server_system_review.md delete mode 100644 review/integration_ecosystem_gaps.md delete mode 100644 review/python_plexapi_gap_analysis.md delete mode 100644 review/undocumented_endpoints_research.md diff --git a/review/PLEX_API_SPEC_FULL_REVIEW.md b/review/PLEX_API_SPEC_FULL_REVIEW.md deleted file mode 100644 index 298dead03..000000000 --- a/review/PLEX_API_SPEC_FULL_REVIEW.md +++ /dev/null @@ -1,828 +0,0 @@ -# Plex OpenAPI Specification — Full Review & Gap Analysis - -**Date:** 2026-06-03 -**Spec Analyzed:** `plex-api-spec.yaml` (≈17,000 lines, OpenAPI 3.1.1) -**Research Inputs:** 10 domain reports from Phase 1 (SDK gap analysis, integration ecosystem survey, undocumented endpoint research) and Phase 2 (domain-specific reviews). -**Scope:** PMS local server API, plex.tv cloud API, client remote-control protocol, cloud providers, real-time event streams, and webhook payloads. - ---- - -## Table of Contents - -1. [Executive Summary](#1-executive-summary) -2. [Missing Endpoints](#2-missing-endpoints) -3. [Schema Corrections](#3-schema-corrections) -4. [Parameter & Query String Corrections](#4-parameter--query-string-corrections) -5. [Response Corrections](#5-response-corrections) -6. [Security & Auth Improvements](#6-security--auth-improvements) -7. [Documentation Improvements](#7-documentation-improvements) -8. [Speakeasy / SDK Generator Improvements](#8-speakeasy--sdk-generator-improvements) -9. [Appendix: Raw Research Files](#9-appendix-raw-research-files) - ---- - -## 1. Executive Summary - -### High-Level Stats - -| Metric | Count | -|--------|-------| -| **Endpoints present in spec (reviewed)** | ~235 | -| **Missing endpoints identified** | ~175 | -| **Schema components with issues** | ~32 | -| **Individual schema field/type gaps** | ~75 | -| **Parameter / query gaps** | ~80 | -| **Response / status-code issues** | ~15 | -| **Auth / security gaps** | ~18 | -| **Documentation issues (typos, missing desc, examples, tags)** | ~45 | - -### Coverage by Domain - -| Domain | Present | Missing | Priority | -|--------|---------|---------|----------| -| plex.tv Auth & Account | 6 | ~40 | **CRITICAL / HIGH** | -| Plex Cloud Providers (Discover, VOD, Music) | 0 | ~7 | **HIGH** | -| Server Management & System | ~35 | ~20 | MEDIUM | -| Library & Metadata | ~85 | ~35 | MEDIUM / HIGH | -| Playback & Sessions | ~25 | ~30 | HIGH | -| Live TV & DVR | ~25 | ~7 | MEDIUM | -| Devices & Download Queue | ~20 | ~10 | MEDIUM | -| Client Remote-Control | 0 | ~25 | **HIGH** | -| Webhooks & Real-Time | 1 (WS path, no schema) | ~3 | MEDIUM / HIGH | - -### Key Takeaways - -1. **The spec is PMS-centric and omits the entire plex.tv v2 surface.** Authentication (OAuth PIN, JWT device registration, sign-out), account management, sharing, Plex Home, and webhooks are almost entirely absent. This blocks every modern third-party integration from generating a working auth flow. -2. **Client remote control is undocumented.** The `/player/playback/*` and `/player/timeline/poll` endpoints are the backbone of Plex client control but do not appear in the spec. -3. **Cloud provider endpoints (Discover, VOD, Music) are missing.** Watchlist, search, and add/remove actions on `discover.provider.plex.tv` are now canonical but undocumented. -4. **Schema reuse is poor.** `Activity`, `ButlerTask`, `UpdaterStatus`, `DeviceChannel`, `DownloadQueue`, `DownloadQueueItem`, `DVR`, `HistoryItem`, `PlayQueue`, and others are defined inline or duplicated instead of using `$ref`. -5. **The include/exclude parameter matrix is missing.** Critical parameters such as `includeMarkers`, `includeGuids`, `includeChapters`, `includeExtras`, `includeRelated`, and `excludeFields` are mentioned only in descriptions or missing entirely. -6. **XML-first behavior is not explained.** Many fields (blur hashes, loudness ramps, sync states) only appear in XML responses and are absent from JSON unless explicitly requested. - ---- - -## 2. Missing Endpoints - -### 2.1 plex.tv Authentication & Account - -| Endpoint | Method | Priority | Source(s) | Why it matters | -|----------|--------|----------|-----------|----------------| -| `https://plex.tv/api/v2/pins` | `POST` | **CRITICAL** | Tautulli, Overseerr, Bazarr, python-plexapi, undocumented endpoints | OAuth PIN generation — entry point for every modern integration | -| `https://plex.tv/api/v2/pins/{pinId}` | `GET` | **CRITICAL** | Tautulli, Overseerr, Bazarr, python-plexapi | Poll PIN status; returns `authToken` when claimed | -| `https://plex.tv/api/v2/pins/link` | `PUT` | **CRITICAL** | python-plexapi, undocumented endpoints | Link a PIN to an account (OAuth completion) | -| `https://clients.plex.tv/api/v2/pins` | `POST` | **CRITICAL** | python-plexapi, undocumented endpoints | Alternative PIN endpoint (clients subdomain) | -| `https://plex.tv/api/v2/users/signout` | `DELETE` | **HIGH** | python-plexapi, undocumented endpoints | Invalidate token | -| `https://plex.tv/api/v2/ping` | `GET` | **HIGH** | Tautulli, Overseerr, python-plexapi, undocumented endpoints | Token refresh / health check (no auth required) | -| `https://plex.tv/api/v2/features` | `GET` | **HIGH** | Plex Forum, undocumented endpoints | Plex Pass feature flags | -| `https://plex.tv/api/v2/friends` | `GET` | **HIGH** | Plex Forum, undocumented endpoints | Friends & shared users (v2 JSON) | -| `https://plex.tv/api/v2/home` | `GET` | **HIGH** | Plex Forum, undocumented endpoints | Plex Home user list | -| `https://plex.tv/api/v2/server` | `GET` | **HIGH** | Plex Forum, undocumented endpoints | Server association info for logged-in user | -| `https://plex.tv/api/v2/users/password` | `POST` | **HIGH** | Plex Forum, undocumented endpoints | Change / reset password | -| `https://plex.tv/api/v2/user/view_state_sync` | `PUT` | **HIGH** | python-plexapi, undocumented endpoints | Enable/disable watch-state sync consent | -| `https://plex.tv/api/v2/user/{uuid}/settings/opt_outs` | `GET` | **HIGH** | python-plexapi, undocumented endpoints | Online-media-source opt-outs | -| `https://plex.tv/users/account` | `GET` | **HIGH** | Tautulli, Overseerr, undocumented endpoints | Own account details (XML) | -| `https://plex.tv/users/account.json` | `GET` | **HIGH** | Tautulli, Overseerr | Own account details (JSON) | -| `https://plex.tv/api/v2/shared_servers` | `POST` | **HIGH** | python-plexapi, Plexopedia, undocumented endpoints | Share a server with a user | -| `https://plex.tv/api/v2/sharings/{userId}` | `PUT` | **HIGH** | python-plexapi, undocumented endpoints | Update friend filters (allowSync, filterMovies, etc.) | -| `https://plex.tv/api/v2/sharings/{userId}` | `DELETE` | **HIGH** | python-plexapi, undocumented endpoints | Remove a share / friend | -| `https://plex.tv/api/v2/home/users/restricted/{userId}` | `PUT` | **HIGH** | python-plexapi, undocumented endpoints | Update restricted (managed) home user settings | -| `https://plex.tv/api/home/users` | `GET` / `POST` | **HIGH** | python-plexapi | List / create Plex Home users | -| `https://plex.tv/api/home/users/{userId}` | `DELETE` / `PUT` | **HIGH** | python-plexapi | Remove / update home user | -| `https://plex.tv/api/home/users/{id}/switch` | `POST` | **HIGH** | python-plexapi | Switch to home user (returns new auth token) | -| `https://plex.tv/api/servers/{machineId}/shared_servers` | `POST` | **HIGH** | python-plexapi, Tautulli, undocumented endpoints | Share library with friend (legacy v1) | -| `https://plex.tv/api/servers/{machineId}` | `GET` | **HIGH** | python-plexapi, undocumented endpoints | Server details for sharing | -| `https://plex.tv/api/claim/token.json` | `GET` | **HIGH** | python-plexapi | Claim token for new servers | -| `POST /myplex/claim` | `POST` | **HIGH** | python-plexapi, devices review | Claim server on PMS using claim token | -| `https://plex.tv/api/v2/server/access_tokens` | `GET` | **MEDIUM** | CVE-2025-34158 write-up, undocumented endpoints | List access tokens for the server | -| `https://plex.tv/api/v2/server/users/features` | `GET` | **MEDIUM** | Plex Forum, undocumented endpoints | Features enabled per shared user | -| `https://plex.tv/api/v2/cloud_server` | `GET` | **MEDIUM** | Tautulli | Plex Cloud status | -| `https://plex.tv/api/v2/geoip` | `GET` | **MEDIUM** | Tautulli | GeoIP lookup | -| `https://plex.tv/:/ip` | `GET` | **MEDIUM** | Tautulli | Public IP detection | -| `https://plex.tv/api/downloads/{channel}.json` | `GET` | **LOW** | Tautulli | Plex update downloads | -| `https://plex.tv/pins.xml` | `POST` | **LOW** | plexargod, undocumented endpoints | Legacy PIN creation (XML) | -| `https://plex.tv/pins/{pinId}` | `GET` | **LOW** | plexargod, undocumented endpoints | Legacy PIN check (XML) | -| `https://plex.tv/api/resources` | `GET` | **LOW** | plexargod, undocumented endpoints | Legacy published server connections (XML) | -| `https://plex.tv/api/users/` | `GET` | **LOW** | python-plexapi, undocumented endpoints | Legacy friends list (XML) | -| `https://clients.plex.tv/devices.xml` | `GET` | **LOW** | CVE-2025-34158 write-up, undocumented endpoints | Authorized devices with tokens (XML) | - -### 2.2 JWT Device Registration (new 2025) - -| Endpoint | Method | Priority | Source(s) | Why it matters | -|----------|--------|----------|-----------|----------------| -| `https://clients.plex.tv/api/v2/auth/jwk` | `POST` | **MEDIUM** | Plex Pro Week blog, JonnyWong16 gist | Register device public key (JWK) | -| `https://clients.plex.tv/api/v2/auth/nonce` | `GET` | **MEDIUM** | JonnyWong16 gist | Get nonce to sign in client JWT | -| `https://clients.plex.tv/api/v2/auth/token` | `POST` | **MEDIUM** | JonnyWong16 gist | Exchange signed client JWT for Plex JWT | -| `https://clients.plex.tv/api/v2/auth/keys` | `GET` | **MEDIUM** | JonnyWong16 gist | Plex public JWKs for signature verification | - -### 2.3 Plex Cloud Providers (Discover, VOD, Music, Metadata) - -| Endpoint | Method | Priority | Source(s) | Why it matters | -|----------|--------|----------|-----------|----------------| -| `https://discover.provider.plex.tv/library/search` | `GET` | **HIGH** | python-plexapi, Overseerr, Jellyseerr, undocumented endpoints | Discover search (movies & shows) | -| `https://discover.provider.plex.tv/library/sections/watchlist/all` | `GET` | **HIGH** | Overseerr, Jellyseerr, undocumented endpoints | Plex Discover watchlist | -| `https://discover.provider.plex.tv/actions/addToWatchlist` | `POST` | **HIGH** | pd_zurg, undocumented endpoints | Add to watchlist | -| `https://discover.provider.plex.tv/actions/removeFromWatchlist` | `POST` | **HIGH** | pd_zurg, undocumented endpoints | Remove from watchlist | -| `https://metadata.provider.plex.tv/library/sections/watchlist/all` *(deprecated)* | `GET` | **LOW** | Tautulli, undocumented endpoints | Legacy watchlist (deprecated Oct 2025) | -| `https://metadata.provider.plex.tv/actions/addToWatchlist` *(deprecated)* | `POST` | **LOW** | undocumented endpoints | Legacy add (deprecated) | -| `https://metadata.provider.plex.tv/actions/removeFromWatchlist` *(deprecated)* | `POST` | **LOW** | undocumented endpoints | Legacy remove (deprecated) | -| `https://vod.provider.plex.tv/hubs` | `GET` | **HIGH** | python-plexapi, Netify, undocumented endpoints | VOD hub items | -| `https://music.provider.plex.tv/hubs` | `GET` | **HIGH** | python-plexapi, undocumented endpoints | Tidal / music hub items | - -### 2.4 Server Management & System - -| Endpoint | Method | Priority | Source(s) | Why it matters | -|----------|--------|----------|-----------|----------------| -| `/library` | `GET` | **MEDIUM** | python-plexapi | Root Library object | -| `/library/sections/` | `GET` | **MEDIUM** | python-plexapi | Fallback for non-owners to list sections | -| `/servers` | `GET` | **MEDIUM** | Tautulli | Local server list | -| `/accounts` | `GET` | **MEDIUM** | python-plexapi, Home Assistant | Local system accounts | -| `/devices` | `GET` | **MEDIUM** | python-plexapi | Local system devices | -| `/clients` | `GET` | **MEDIUM** | python-plexapi, Home Assistant | Lists connected Plex clients | -| `/system/agents` | `GET` | **MEDIUM** | python-plexapi, undocumented endpoints | Lists available metadata agents | -| `/system/agents/{agentId}` | `GET` | **MEDIUM** | undocumented endpoints | Agent details & settings | -| `/system/settings` | `GET` | **MEDIUM** | undocumented endpoints | System-level settings | -| `/system/updates` | `GET` | **MEDIUM** | undocumented endpoints | Check for PMS updates | -| `/services/browse` | `GET` | **MEDIUM** | python-plexapi | Browse filesystem paths | -| `/services/browse/{base64path}` | `GET` | **MEDIUM** | python-plexapi | Browse specific filesystem path | -| `/diagnostics` | `GET` | **MEDIUM** | undocumented endpoints | Server diagnostics overview | -| `/diagnostics/databases` | `GET` | **MEDIUM** | python-plexapi | Download server DB diagnostics | -| `/diagnostics/logs` | `GET` | **MEDIUM** | python-plexapi | Download server logs bundle | -| `/statistics/bandwidth` | `GET` | **MEDIUM** | python-plexapi | Dashboard bandwidth data | -| `/statistics/resources` | `GET` | **MEDIUM** | python-plexapi | Dashboard resource data | -| `/myplex/account` | `GET` | **MEDIUM** | Tautulli | Linked MyPlex account info on PMS | -| `/myplex/refreshReachability` | `PUT` | **MEDIUM** | Tautulli | Refresh remote access port mapping | -| `/sync` | `GET` | **MEDIUM** | undocumented endpoints | Sync status overview | -| `/sync/items` | `GET` | **MEDIUM** | undocumented endpoints | Sync items list | -| `/sync/items/{syncId}` | `GET` | **MEDIUM** | Tautulli | Sync item details | -| `/sync/queue` | `GET` | **MEDIUM** | undocumented endpoints | Sync queue | -| `/sync/transcodeQueue` | `GET` | **MEDIUM** | Tautulli | Sync transcode queue status | -| `/sync/refreshSynclists` | `PUT` | **MEDIUM** | python-plexapi | Force PMS to download new SyncList from plex.tv | -| `/sync/refreshContent` | `PUT` | **MEDIUM** | python-plexapi | Force PMS to refresh content for known SyncLists | -| `/transcode/sessions` | `GET` | **MEDIUM** | undocumented endpoints, server review | Active transcode sessions | - -### 2.5 Library & Metadata - -| Endpoint | Method | Priority | Source(s) | Why it matters | -|----------|--------|----------|-----------|----------------| -| `/library/sections/{id}/onDeck` | `GET` | **MEDIUM** | client traffic, undocumented endpoints | On-deck items for this section | -| `/library/sections/{id}/unwatched` | `GET` | **MEDIUM** | client traffic | Unwatched items | -| `/library/sections/{id}/newest` | `GET` | **MEDIUM** | client traffic | Newest additions | -| `/library/sections/{id}/recentlyAdded` | `GET` | **MEDIUM** | Tautulli | Per-library recently added | -| `/library/sections/{id}/byYear` | `GET` | **LOW** | client traffic | Browse by year | -| `/library/sections/{id}/byDecade` | `GET` | **LOW** | client traffic | Browse by decade | -| `/library/sections/{id}/byContentRating` | `GET` | **LOW** | client traffic | Browse by content rating | -| `/library/sections/{id}/byResolution` | `GET` | **LOW** | client traffic | Browse by resolution | -| `/library/sections/{id}/byFolder` | `GET` | **LOW** | client traffic | Browse by folder | -| `/library/sections/{id}/agents` | `GET` | **LOW** | client traffic | Available agents for this section | -| `/library/sections/{id}/match` | `GET` | **LOW** | client traffic | Match items in section | -| `/library/sections/{id}/unmatch` | `GET` | **LOW** | client traffic | Unmatch items in section | -| `/library/sections/{id}/edit` | `GET` / `PUT` | **LOW** | client traffic | Edit section metadata | -| `/library/sections/{id}/move` | `PUT` | **LOW** | client traffic | Move section paths | -| `/library/sections/{id}/settings` | `GET` | **LOW** | client traffic | Section-specific settings | -| `/library/sections/{id}/playlists` | `GET` | **LOW** | client traffic | Playlists belonging to section | -| `/library/sections/{id}/hubs` | `GET` | **LOW** | client traffic | Hubs for this section | -| `/library/sections/{id}/timeline` | `GET` | **LOW** | client traffic | Section timeline | -| `/library/sections/{id}/search` | `GET` | **LOW** | client traffic | Section-scoped search | -| `/library/sections/{id}/tags` | `GET` | **LOW** | client traffic | Tags in section | -| `/library/sections/{id}/label` | `GET` | **MEDIUM** | Tautulli, Kometa | Labels for a library | -| `/library/sections/{id}/artists` | `GET` | **LOW** | client traffic | Artists (music) | -| `/library/sections/{id}/shows` | `GET` | **LOW** | client traffic | Shows (TV) | -| `/library/sections/{id}/episodes` | `GET` | **LOW** | client traffic | Episodes | -| `/library/sections/{id}/movies` | `GET` | **LOW** | client traffic | Movies | -| `/library/sections/{id}/clips` | `GET` | **LOW** | client traffic | Clips | -| `/library/sections/{id}/photos` | `GET` | **LOW** | client traffic | Photos | -| `/library/sections/{id}/refresh` | `GET` / `POST` | **MEDIUM** | Kometa | Trigger library refresh | -| `/library/sections/{id}/emptyTrash` | `GET` / `POST` | **MEDIUM** | Kometa | Empty library trash | -| `/library/sections/{id}/optimize` | `GET` / `POST` | **MEDIUM** | Kometa | Optimize database for a library | -| `/library/optimize` | `GET` / `POST` | **MEDIUM** | Kometa | Global database optimize | -| `/library/recentlyAdded` | `GET` | **MEDIUM** | Tautulli | Global recently added | -| `/library/metadata/{id}/children` | `GET` | **MEDIUM** | SDK, client traffic | Children of show/season/artist/album | -| `/library/metadata/{id}/grandchildren` | `GET` | **MEDIUM** | Tautulli | Grandchildren (episodes under show) | -| `/library/metadata/{id}/onDeck` | `GET` | **LOW** | client traffic | On-deck for this show/season | -| `/library/metadata/{id}/reviews` | `GET` | **LOW** | client traffic | User reviews | -| `/library/metadata/{id}/parent` | `GET` | **LOW** | client traffic | Parent metadata shortcut | -| `/library/metadata/{id}/grandparent` | `GET` | **LOW** | client traffic | Grandparent metadata shortcut | -| `/library/metadata/{id}/nearest` | `GET` | **MEDIUM** | python-plexapi | Sonically similar items | -| `/library/metadata/{id}/posters` | `POST` | **MEDIUM** | Kometa | Upload custom poster image | -| `/library/metadata/{id}/arts` | `POST` | **MEDIUM** | Kometa | Upload custom background art | -| `/library/sections/{id}/computePath` | `GET` | **MEDIUM** | python-plexapi | Sonic adventure path | -| `/hubs/home/recentlyAdded` | `GET` | **MEDIUM** | Tautulli | Hub-centric recently added | -| `/hubs/continueWatching/items` | `GET` | **MEDIUM** | python-plexapi | Direct access to Continue Watching items | - -### 2.6 Playback & Sessions - -| Endpoint | Method | Priority | Source(s) | Why it matters | -|----------|--------|----------|-----------|----------------| -| `/:/websockets/notifications` | `WS` | **HIGH** | Tautulli, Home Assistant | Real-time event bus (sessions, timeline, status) | -| `/playlists?type=42` | `GET` / `DELETE` | **MEDIUM** | python-plexapi | Optimized / Conversion items | -| `/playQueues/1` | `GET` | **MEDIUM** | python-plexapi | Conversion queue | -| `/:/progress` | `GET` | **MEDIUM** | python-plexapi | Updates watch progress | -| `/actions/removeFromContinueWatching` | `PUT` | **MEDIUM** | python-plexapi | Removes item from Continue Watching | -| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s` | `GET` | **MEDIUM** | UnicornTranscoder, undocumented endpoints | DASH segment delivery | -| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts` | `GET` | **MEDIUM** | undocumented endpoints | HLS TS segment delivery | -| `/music/:/transcode` | `GET` | **MEDIUM** | undocumented endpoints | Audio transcode endpoint | -| `/player/timeline/poll` | `GET` | **HIGH** | python-plexapi | Poll client playback timeline | -| `/player/playback/playMedia` | `POST` | **HIGH** | python-plexapi | Play specific media on client | -| `/player/playback/setParameters` | `POST` | **HIGH** | python-plexapi | Set shuffle/repeat/volume | -| `/player/playback/setStreams` | `POST` | **HIGH** | python-plexapi | Set active audio/subtitle/video streams | -| `/player/playback/play` | `POST` | **HIGH** | undocumented endpoints | Start playback on client | -| `/player/playback/pause` | `POST` | **HIGH** | undocumented endpoints | Pause client | -| `/player/playback/stop` | `POST` | **HIGH** | undocumented endpoints | Stop client | -| `/player/playback/seek` | `POST` | **HIGH** | undocumented endpoints | Seek to time | -| `/player/playback/skipTo` | `POST` | **HIGH** | undocumented endpoints | Skip to item | -| `/player/playback/skipBy` | `POST` | **HIGH** | undocumented endpoints | Skip forward/backward | -| `/player/playback/stepForward` | `POST` | **HIGH** | undocumented endpoints | Step forward | -| `/player/playback/stepBack` | `POST` | **HIGH** | undocumented endpoints | Step back | -| `/player/playback/subtitleStream` | `POST` | **MEDIUM** | undocumented endpoints | Change subtitle stream | -| `/player/playback/audioStream` | `POST` | **MEDIUM** | undocumented endpoints | Change audio stream | -| `/player/playback/videoStream` | `POST` | **MEDIUM** | undocumented endpoints | Change video stream | -| `/player/playback/volume` | `POST` | **MEDIUM** | undocumented endpoints | Set volume | -| `/player/playback/mute` | `POST` | **MEDIUM** | undocumented endpoints | Mute | -| `/player/playback/unmute` | `POST` | **MEDIUM** | undocumented endpoints | Unmute | -| `/player/playback/setTextStream` | `POST` | **MEDIUM** | undocumented endpoints | Set text stream | -| `/player/playback/setRating` | `POST` | **MEDIUM** | undocumented endpoints | Rate item | -| `/player/playback/setViewOffset` | `POST` | **MEDIUM** | undocumented endpoints | Set resume offset | -| `/player/playback/setState` | `POST` | **MEDIUM** | undocumented endpoints | Set playback state | -| `/player/playback/refreshPlayQueue` | `POST` | **MEDIUM** | undocumented endpoints | Refresh play queue | -| `/resources` *(on client)* | `GET` | **MEDIUM** | python-plexapi | Client capabilities and device info | - -### 2.7 Live TV & DVR - -| Endpoint | Method | Priority | Source(s) | Why it matters | -|----------|--------|----------|-----------|----------------| -| *(session creation)* | — | **MEDIUM** | live-tv review | No documented way to create/start a Live TV session | -| `/livetv/dvrs/{dvrId}` | `PUT` / `PATCH` | **LOW** | live-tv review | Update DVR (only prefs endpoint exists) | -| `/livetv/dvrs/{dvrId}/channels` | `GET` | **LOW** | live-tv review | List channels directly associated with a DVR | -| `/livetv/dvrs/{dvrId}/guide` or `/livetv/epg/guide` | `GET` | **LOW** | live-tv review | Fetch program guide / schedule | -| `/livetv/sessions/{sessionId}` | `DELETE` | **LOW** | live-tv review | Terminate a Live TV session | -| `/livetv/dvrs/{dvrId}/recordings` or `/livetv/recordings` | `GET` | **LOW** | live-tv review | List completed DVR recordings | -| `/livetv/epg/search` | `GET` | **LOW** | live-tv review | Search EPG for upcoming airings | - -### 2.8 Webhooks & Real-Time - -| Endpoint | Method | Priority | Source(s) | Why it matters | -|----------|--------|----------|-----------|----------------| -| `https://plex.tv/api/v2/user/webhooks` | `GET` | **MEDIUM** | python-plexapi, undocumented endpoints | List configured webhook URLs | -| `https://plex.tv/api/v2/user/webhooks` | `POST` | **MEDIUM** | python-plexapi, undocumented endpoints | Add a webhook URL | -| *(webhook payload schema)* | `POST` *(inbound)* | **MEDIUM** | Bazarr, Home Assistant, Tautulli | Standardize `multipart/form-data` JSON payload + thumbnail | -| `/:/websockets/notifications` *(plural)* | `WS` | **HIGH** | Tautulli, Home Assistant | Widely-used plural alias for WebSocket event bus | - ---- - -## 3. Schema Corrections - -### 3.1 ServerConfiguration - -| Field | Current Spec | Issue | Recommended Fix | -|-------|--------------|-------|-----------------| -| `diagnostics` | `string` | SDK parses as `list` (comma-separated diagnostics modules) | Change to `array` of `string`, or document parsing rule | -| `transcoderVideoBitrates` | untyped / description only | SDK parses as `list` | Add `type: array` with `items: string` or `integer` | -| `transcoderVideoQualities` | `string` | SDK parses as `list` | Change to `array` of `string` / `integer` | -| `transcoderVideoResolutions` | description only | SDK parses as `list` | Add `type: array` of `string` | -| `ownerFeatures` | `string` (comma-separated) | SDK parses as `list` | Change to `array` of `string`, or document parsing rule | -| `offlineTranscode` | `example: 1`, no `type` | Missing type | Should be `integer` or `boolean` (BoolInt pattern) | - -**Additional issue:** The root `/` endpoint is documented as returning `MediaContainerWithDirectory`, but the actual response is a `ServerConfiguration`-shaped object with a `Directory` array. Update schema to `allOf: [ServerConfiguration, { Directory: ... }]`. - -### 3.2 Metadata - -| Field | Found In | Notes | -|-------|----------|-------| -| `artBlurHash` | `video.py`, `audio.py` | Blur hash for background art | -| `thumbBlurHash` | `video.py`, `audio.py` | Blur hash for thumbnail | -| `lastRatedAt` | `video.py`, `audio.py` | Timestamp of last user rating | -| `editionTitle` | `video.py` (Movie) | Edition string (e.g. "Director's Cut") | -| `languageOverride` | `video.py` (Movie, Show) | Per-item language override | -| `enableCreditsMarkerGeneration` | `video.py` (Movie, Show) | Credits marker flag | -| `useOriginalTitle` | `video.py` (Movie, Show) | Display original title flag | -| `slug` | `video.py` (Movie, Show) | URL-friendly slug | -| `skipCount` | `audio.py` (Track) | Number of times skipped | -| `musicAnalysisVersion` | `audio.py` (Audio base) | Analysis version for music | -| `distance` | `audio.py` (Audio base) | Sonic similarity distance | -| `sourceURI` | `video.py`, `audio.py`, `playlist.py` | Remote/shared server item URI | -| `playlistItemID` | `base.py` (Playable) | Item ID within a playlist | -| `playQueueItemID` | `base.py` (Playable) | Item ID within a play queue | - -**Type-specific gap:** The `Metadata` schema is a flat union. It does not distinguish type-specific required/optional fields (e.g. `year` is optional for episodes, `parentIndex` is season number, `grandparentTitle` is show name). - -### 3.3 Media - -| Field | Found In | Notes | -|-------|----------|-------| -| `uuid` | `media.py` | Media instance UUID | -| `selected` | `media.py` | Whether this media version is selected | - -### 3.4 Part - -| Field | Found In | Notes | -|-------|----------|-------| -| `protocol` | `media.py` | Streaming protocol (e.g. `dash`, `hls`) | -| `packetLength` | `media.py` | RTP packet length | -| `requiredBandwidths` | `media.py` | Bandwidth requirements list | -| `syncItemId` | `media.py` | Mobile sync item association | -| `syncState` | `media.py` | Sync state (e.g. `pending`, `downloaded`) | -| `deepAnalysisVersion` | `media.py` | Deep analysis version | - -### 3.5 Stream (Video, Audio, Subtitle, Lyric) - -**AudioStream gaps** - -| Field | Notes | -|-------|-------| -| `bitrateMode` | e.g. `cbr`, `vbr` | -| `visualImpaired` | Audio description track flag | -| `albumGain` | ReplayGain album gain | -| `albumPeak` | ReplayGain album peak | -| `albumRange` | ReplayGain album range | -| `endRamp` | Loudness ramp end | -| `gain` | Track replay gain | -| `loudness` | Integrated loudness (LUFS) | -| `lra` | Loudness range | -| `peak` | Track peak | -| `startRamp` | Loudness ramp start | - -**SubtitleStream gaps** - -| Field | Notes | -|-------|-------| -| `providerTitle` | Subtitle provider name | -| `score` | Match confidence score | -| `sourceKey` | Source identifier | -| `transient` | Temporary/downloaded subtitle | -| `userID` | User who added subtitle | -| `perfectMatch` | Exact match flag | - -**LyricStream gaps** - -| Field | Notes | -|-------|-------| -| `minLines` | Minimum lines in lyric file | -| `provider` | Lyric provider | -| `timed` | Whether lyrics are timestamped | - -### 3.6 Collection - -**There is no dedicated `Collection` schema.** Collections reuse `Metadata` (or are returned inside `MediaContainerWithMetadata`). Missing collection-specific fields: - -| Field | Notes | -|-------|-------| -| `collectionFilterBasedOnUser` | Smart-collection user filter | -| `collectionMode` | Display mode (`default`, `hideItems`, `showItems`) | -| `collectionPublished` | Whether published to Plex Discover | -| `collectionSort` | Sort order for collection | -| `artBlurHash` | Blur hash for collection art | -| `thumbBlurHash` | Blur hash for collection thumb | -| `userRating` | User star rating | -| `lastRatedAt` | Rating timestamp | - -### 3.7 Playlist - -Playlists are defined via `MediaContainerWithPlaylistMetadata`. Missing fields: - -| Field | Notes | -|-------|-------| -| `durationInSeconds` | Total duration in seconds (redundant but present in XML) | -| `radio` | Whether this is a generated radio playlist | -| `titleSort` | Sort-friendly title | - -### 3.8 PlayQueue - -There is **no standalone `PlayQueue` schema.** The creation endpoint defines play-queue fields inline. All other play-queue operations reuse `MediaContainerWithPlaylistMetadata`, which is **playlist-centric** and omits play-queue fields. - -| Field | Present in Creation? | Present in Retrieval? | Notes | -|-------|---------------------|----------------------|-------| -| `playQueueLastAddedItemID` | ✅ | ❌ | | -| `playQueueSelectedItemID` | ✅ | ❌ | | -| `playQueueSelectedItemOffset` | ✅ | ❌ | | -| `playQueueSelectedMetadataItemID` | ✅ | ❌ | **Missing from retrieval schema** | -| `playQueueShuffled` | ✅ | ❌ | | -| `playQueueSourceURI` | ✅ | ❌ | | -| `playQueueTotalCount` | ✅ | ❌ | | -| `playQueueVersion` | ✅ | ❌ | | - -**Recommendation:** Create `MediaContainerWithPlayQueue` and reference it from all play-queue endpoints. - -### 3.9 Session - -The `Session` schema is extremely sparse (`bandwidth`, `id`, `location`). Real session objects include `sessionKey`, `uuid`, `title`, `userID`, etc. - -**Recommendation:** Expand `Session` or document that consumers should rely on embedded `Player`, `User`, and `Metadata` objects. - -### 3.10 Activity, ButlerTask, UpdaterStatus - -| Schema | Status | Fix | -|--------|--------|-----| -| `Activity` | Inline under `/activities` GET | Extract to `#/components/schemas/Activity` | -| `ButlerTask` | Inline under `/butler` GET | Extract to `#/components/schemas/ButlerTask` | -| `UpdaterStatus` | Inline under `/updater/status` GET | Extract to `#/components/schemas/UpdaterStatus` | -| `LogLine` | **Does not exist** | Create or document generic text/plain response | - -### 3.11 History - -The history response schema defines an inline object with a minimal field set. Real history items include `guid`, `index`, `parentKey`, `parentRatingKey`, `grandparentKey`, `grandparentRatingKey`, `parentThumb`, `grandparentThumb`, `content`, `viewCount`, `lastViewedAt`, etc. - -**Recommendation:** Derive history items from `Metadata` (or a `HistoryItem` `allOf`) so type-specific fields are not lost. - -### 3.12 Timeline Response - -The `POST /:/timeline` 200 response extends `ServerConfiguration` and adds `Bandwidths`, `terminationCode`, `terminationText`. It can also include `playQueueID` when playback originates from a queue — **not documented**. - -**Fix:** Add `playQueueID` (integer) to timeline response schema. - -### 3.13 DVR / Live TV Schemas - -| Schema | Issue | Fix | -|--------|-------|-----| -| `DVR` | Duplicated inline across **7+ endpoints** | Extract to `#/components/schemas/DVR` | -| `MediaContainerWithDevice` | Duplicates `Device` properties inline instead of `$ref` | Use `allOf: [MediaContainer, { Device: { type: array, items: { $ref: Device } } }]` | -| `DeviceChannel` | Defined inline; has useful fields (`drm`, `favorite`, `hd`, `signalQuality`, `signalStrength`) missing from main `Channel` | Extract to component or merge into `Channel` | -| `Channel` | Missing EPG fields: `favorite`, `drm`, `signalQuality`, `signalStrength` | Add missing fields | -| `MediaSubscription` | `Directory`, `Playlist`, `Video` hints are untyped (`additionalProperties: true`) | Document known hint keys | -| `Lineup` | Missing `key` and `identifier` | Add missing fields | -| `MediaContainerWithMetadata` (sessions) | Too generic for Live TV sessions | Consider `MediaContainerWithLiveTVSession` with session-specific fields | - -### 3.14 Device - -The `Device` schema defines only 12 properties. Missing: - -| Field | Why it matters | -|-------|----------------| -| `id` | The `deviceId` path parameter is `integer`, but schema has no `id` field | -| `name` / `title` | Human-readable device name | -| `enabled` | Toggled by `PUT /media/grabbers/devices/{deviceId}` | -| `deviceIdentifier` | Distinct from `uuid` | -| `thumb` / `thumbVersion` | Referenced by thumb endpoint | -| `lineup` / `lineupType` | EPG lineup association | - -### 3.15 Download Queue & Grabber - -| Schema | Issue | Fix | -|--------|-------|-----| -| `DownloadQueue` | Inline in POST/GET | Extract to `#/components/schemas/DownloadQueue` | -| `DownloadQueueItem` | Inline in list/get | Extract to `#/components/schemas/DownloadQueueItem` | -| `MediaGrabber` / `Grabber` | No reusable schema exists; inline with only 3 fields | Create component with SSDP fields (`UDN`, `URLBase`, `deviceType`, `manufacturer`, `modelDescription`, `modelNumber`, etc.) | -| `TranscodeSession` | Referenced by `DownloadQueueItem` but minimal; spec admits "not yet documented" | Prioritize documentation | - -### 3.16 Provider / Hub Schemas - -| Schema | Issue | Fix | -|--------|-------|-----| -| `/media/providers` response | Wrongly extends `ServerConfiguration` instead of `MediaContainer` or dedicated `ProviderContainer` | Create `Provider` and `ProviderFeature` schemas | -| `ProviderFeature` | Underspecified `Feature` array; does not enumerate well-known feature types | Document known feature keys (`search`, `metadata`, `content`, `match`, `manage`, `timeline`, `rate`, `playqueue`, `playlist`, `subscribe`, `promoted`, `continuewatching`, `collection`, `actions`, `imagetranscoder`, `queryParser`, `grid`) | -| `Hub` | `additionalProperties: true` masks missing fields like `context`, `hubKey`, `reason`, `reasonTitle`, `reasonID` | Add observed fields | - -### 3.17 PlexDevice - -| Issue | Details | -|-------|---------| -| Contradictory required/nullable | `platform`, `platformVersion`, `device` are typed as `["null", "string"]` but also listed in `required` | - ---- - -## 4. Parameter & Query String Corrections - -### 4.1 Library Section Browsing (`/library/sections/{sectionId}/all`) - -The GET method only documents `includeMeta`, `includeGuids`, `sectionId`, `mediaQuery`, `X-Plex-Container-Start`, `X-Plex-Container-Size`. Widely used but **absent** params: - -| Parameter | Type | Description | -|-----------|------|-------------| -| `type` | integer | Filter by metadata type (`1`=movie, `2`=show, `3`=season, `4`=episode, `8`=artist, `9`=album, `10`=track) | -| `sort` | string | Sort key and direction (e.g. `addedAt:desc`, `titleSort`) | -| `filters` | string | General filtering expression | -| `unwatched` | integer (`1`) | Filter to unwatched only | -| `genre`, `studio`, `contentRating`, `resolution`, `year`, `firstCharacter` | string / integer | Tag-based filters | -| `includeCollections` | boolean | Include collection items in results | -| `includeExternalMedia` | boolean | Include external/online media | -| `includeAdvanced` | boolean | Include advanced settings | -| `checkFiles` | boolean | Verify file existence | -| `includeRelated` | boolean | Include related items | -| `includeExtras` | boolean | Include trailers, behind-the-scenes, etc. | -| `includePopularLeaves` | boolean | Include popular episodes | -| `includeConcerts` | boolean | Include concert items | -| `includeOnDeck` | boolean | Include On Deck status | -| `includeChapters` | boolean | Include chapter markers | -| `includePreferences` | boolean | Include user preferences | -| `includeBandwidths` | boolean | Include bandwidth info | -| `includeLoudnessRamps` | boolean | Include loudness ramp data | -| `includeStations` | boolean | Include radio station data | -| `includeExternalIds` | boolean | Include external GUIDs | -| `includeReviews` | boolean | Include user reviews | -| `includeCredits` | boolean | Include full credits | -| `includeArt`, `includeThumb`, `includeBanner`, `includeTheme` | boolean | Force inclusion of artwork fields | -| `includeFields` | string | Whitelist of fields to return | -| `asyncAugmentMetadata` | boolean | Async metadata augmentation | -| `asyncRefreshLocalMediaAgent` | boolean | Async local media agent refresh | -| `nocache` | boolean | Bypass cache | -| `excludeFields` | string | Blacklist of fields to omit | -| `skipRefresh` | boolean | Skip synchronous refresh | - -### 4.2 Metadata Item Detail (`/library/metadata/{ids}`) - -| Parameter | Type | Description | Notes | -|-----------|------|-------------|-------| -| `includeMarkers` | boolean | Intro/credits markers | Critical for Tautulli and skip-intro clients | -| `includeChapters` | boolean | Chapter data | Missing from spec GET params | -| `includeExternalMedia` | boolean | External media | Missing | -| `includeExtras` | boolean | Extras/trailers | Missing | -| `includeRelated` | boolean | Related items | Missing | -| `includeOnDeck` | boolean | On Deck status | Missing | -| `includePopularLeaves` | boolean | Popular episodes | Missing | -| `includeReviews` | boolean | User reviews | Missing | -| `includeStations` | boolean | Radio stations | Missing | -| `includeGuids` | boolean | External GUIDs | Only documented on `/library/sections/{id}/all` | -| `excludeElements` | string | Omit elements | Mentioned only in history endpoint description | -| `excludeFields` | string | Omit fields | Mentioned only in history endpoint description | - -### 4.3 Search & Hubs - -| Endpoint | Missing Param | Type | Description | -|----------|---------------|------|-------------| -| `/hubs/search` | `includeCollections` | boolean | Include collection results in search hubs | -| `/hubs/search/voice` | `includeCollections` | boolean | Same gap as standard search | - -### 4.4 Playlists - -| Parameter | Where | Type | Description | -|-----------|-------|------|-------------| -| `type=42` | `/playlists` | integer | Optimized/conversion items | - -### 4.5 History (`/status/sessions/history/all`) - -| Parameter | Type | Description | -|-----------|------|-------------| -| `includeFields` | string | Mentioned in description but not declared | -| `excludeFields` | string | Mentioned in description but not declared | -| `includeElements` | string | Mentioned in description but not declared | -| `excludeElements` | string | Mentioned in description but not declared | -| `viewedAt>` | integer | Greater-than filter (range operator) | -| `viewedAt<` | integer | Less-than filter (range operator) | -| `accountID` | integer | Filter by account | -| `deviceID` | integer | Filter by device | -| `X-Plex-Container-Start` | header / query | Pagination start (only documented as response header) | -| `X-Plex-Container-Size` | header / query | Pagination size (only documented as response header) | - -### 4.6 Timeline (`POST /:/timeline`) - -| Parameter | Type | Description | -|-----------|------|-------------| -| `containerKey` | string | Groups timeline reports (e.g. `/playQueues/123`) | -| `playQueueID` | integer | Distinct from `playQueueItemID`; identifies the queue itself | -| `guid` | string | Global unique identifier for the item | -| `url` | string | Alternative to `key`/`ratingKey` (legacy) | - -### 4.7 Transcoder - -| Parameter | Where Missing | Type | Description | -|-----------|---------------|------|-------------| -| `maxVideoBitrate` | `/decision`, `/start.{ext}`, `/subtitles` | integer | Client-side cap | -| `videoResolution` | transcoder endpoints | string | Cap string | -| `copyts` | transcoder endpoints | boolean | Timestamp copying | -| `platform` | transcoder endpoints | string | Some clients send this in addition to headers | -| `mediaIndex` / `partIndex` | `/subtitles` | integer | Present on `/decision` and `/start`, missing on `/subtitles` | -| `sessionId` | segment delivery | string | Path param for `.m4s` / `.ts` segments | -| `segmentId` | segment delivery | string / integer | Path param for segment files | - -### 4.8 Server / System - -| Parameter | Where | Type | Description | -|-----------|-------|------|-------------| -| `timespan` (1–6) | `/statistics/bandwidth` | integer | Dashboard timespan | -| `accountID`, `deviceID`, `lan` | `/statistics/bandwidth` | various | Filter params | -| `includeFiles` | `/services/browse` | boolean | Include files in browse results | -| `skipRefresh` | `/library/metadata/{ids}/refresh` | boolean | Skip synchronous refresh | -| `asyncAugmentMetadata=1` | `/library/metadata/{ids}` | boolean | Async metadata augmentation | - -### 4.9 Live TV & DVR - -| Endpoint | Missing Param | Type | Description | -|----------|---------------|------|-------------| -| `/livetv/dvrs` | `uuid`, `lineup` | string | Filter params for managing multiple DVRs | -| `/livetv/sessions` | `dvrId`, `channel` | string / integer | Filter params | -| `/media/subscriptions` | `X-Plex-Container-Start`, `X-Plex-Container-Size` | header / query | Pagination request params | -| `/media/subscriptions/template` | `type`, `targetLibrarySectionID` | string / integer | Influences template response | -| `/media/grabbers/devices/discover` | `protocol`, `grabberIdentifier` | string | Targeted discovery | -| `/livetv/dvrs/{dvrId}/prefs` | `value` | string | Only `name` is documented; needs `value` or `name=value` clarification | -| `/media/grabbers/devices/{deviceId}/prefs` | `value` | string | Same issue as DVR prefs | - -### 4.10 Devices & Download Queue - -| Endpoint | Missing Param | Type | Description | -|----------|---------------|------|-------------| -| `/media/grabbers` | `protocol` enum | string | Should enumerate known protocols (`stream`, `download`, `livetv`) | -| `/media/grabbers/devices` | `uri` format | string | No validation pattern documented | -| `/media/grabbers/devices/{deviceId}/channelmap` | `channelMapping` / `channelMappingByKey` schema | object | `style: deepObject` used but no formal nested schema | -| `/media/grabbers/devices/{deviceId}/prefs` | `name` semantics | string | Should be `object` or better documented as `name=value` pairs | -| `/media/grabbers/devices/{deviceId}/scan` | `source` enum | string | Should list valid scan sources (OTA, Cable, etc.) | -| `/downloadQueue/{queueId}/add` | `keys` max length / format | array | `explode: false` array of strings | -| `/downloadQueue/{queueId}/items` | Pagination params | header / query | `X-Plex-Container-Start` / `X-Plex-Container-Size` not listed as request params | -| `/downloadQueue/{queueId}/item/{itemId}/media` | `Accept` header | header | Required for media file negotiation | -| `/security/resources` | `source` enum / examples | string | No examples of valid source identifiers | -| `/security/resources` | `refresh` behavior | boolean | Behavior not described | -| `/security/token` | Additional `type` / `scope` values | string | Only `delegation` / `all` documented | - ---- - -## 5. Response Corrections - -### 5.1 Wrong Status Codes & Missing Bodies - -| Endpoint | Issue | Fix | -|----------|-------|-----| -| `GET /` | Documented as `MediaContainerWithDirectory`; actual response is `ServerConfiguration` + `Directory` array | Correct response schema | -| `GET /activities` | `Activity` defined inline; no `200` response headers documented | Extract to component; add headers | -| `GET /butler` | `ButlerTask` defined inline | Extract to component | -| `GET /updater/status` | `UpdaterStatus` / `Release` inline; `checkedAt` type unclear | Extract to component; clarify type | -| `PUT /log` / `POST /log` | No response schema; returns generic 200 | Document whether any body is returned | -| `POST /log/networked` | Undocumented response | Document response body or note empty response | -| `GET /:/eventsource/notifications` | Returns `application/octet-stream`; no SSE event schemas | Add `NotificationContainer`, `PlaySessionStateNotification`, `StatusNotification`, `ReachabilityNotification` schemas | -| `GET /:/websocket/notifications` | Returns `application/octet-stream`; no WebSocket message schemas | Add message schemas (same as above) | -| `POST /livetv/dvrs/{dvrId}/reloadGuide` | Returns `text/html` with `X-Plex-Activity` header | Verify if body is actually JSON; document known quirk if truly HTML | -| `/media/grabbers/devices/{deviceId}/thumb/{version}` | Returns "The thumbnail" but no `content` schema | Document `image/jpeg` or `image/png` | -| `GET /downloadQueue/{queueId}/item/{itemId}/media` | Returns "The raw media file" but no `content` schema | Document expected `Content-Type` (e.g. `video/mp4`, `application/octet-stream`) | -| `/security/token` | Description says "responds to all HTTP verbs but POST is preferred" | Either document all verbs or remove the note | - -### 5.2 Inline Schemas That Should Be Reusable - -| Current Location | Schema Name | Where Else It Should Be Reused | -|------------------|-------------|-------------------------------| -| `/activities` GET response | `Activity` | WebSocket `StatusNotification`, other activity-returning endpoints | -| `/butler` GET response | `ButlerTask` | — | -| `/updater/status` GET response | `UpdaterStatus` | — | -| `/status/sessions/background` GET | `TranscodeJob` | Other transcode-related responses | -| `/status/sessions/history/all` GET | `HistoryItem` | `/status/sessions/history/{historyId}` | -| `/livetv/dvrs` (7+ endpoints) | `DVR` | All DVR CRUD endpoints | -| `MediaContainerWithDevice` | `Device` array | Should `$ref` `#/components/schemas/Device` | -| `/media/grabbers/devices/{deviceId}/channels` GET | `DeviceChannel` | Merge into `Channel` or extract to component | -| `POST /downloadQueue` / `GET /downloadQueue/{queueId}` | `DownloadQueue` | All download-queue endpoints | -| `GET /downloadQueue/{queueId}/items` | `DownloadQueueItem` | Item detail endpoints | -| `GET /media/grabbers` | `MediaGrabber` | All grabber-related responses | -| `POST /playQueues` 200 response | `PlayQueue` | All play-queue endpoints | -| `/media/providers` response | `Provider` / `ProviderFeature` | Provider CRUD responses | - ---- - -## 6. Security & Auth Improvements - -### 6.1 Missing Auth Flows - -| Flow | Status | Fix | -|------|--------|-----| -| **OAuth PIN Flow** | Not documented | Document `POST /pins` → user visits `plex.tv/link` → `GET /pins/{id}` → obtain token | -| **JWT Device Registration** | Not documented | Document Ed25519 keypair flow: `POST /auth/jwk` → `GET /auth/nonce` → `POST /auth/token` (7-day expiry) | -| **Direct Sign-In** | Partially documented | Expand `/users/signin` to describe 2FA challenge, rate limiting, `rememberMe` behavior | -| **Home User Switch** | Not documented | Document `POST /api/home/users/{id}/switch` returning new auth token | -| **Claim Flow** | Not documented | Document `GET /api/claim/token.json` → `POST /myplex/claim` on PMS | - -### 6.2 Incorrect Scopes - -| Endpoint | Current Scope | Correct Scope | Notes | -|----------|---------------|---------------|-------| -| `GET /user` (plex.tv) | `admin` | Any valid token | Self-introspection endpoint | -| `GET /resources` (plex.tv) | `admin` | Any valid token | Own server lookup | -| `GET /users` (plex.tv) | `admin` | Any valid token | Friend discovery works with standard user tokens | - -### 6.3 Missing Security Schemes - -| Scheme | Status | Fix | -|--------|--------|-----| -| `X-Plex-Token` as query parameter | Only documented as header | Add note that token may be passed as `?X-Plex-Token=...` on all endpoints | -| `X-Plex-Client-Identifier` as security scheme | Defined as parameter only | Consider adding an `apiKey` security scheme for `clientIdentifier` so PIN endpoints can declare `security: [clientIdentifier: []]` | -| JWT bearer scheme | Mentioned in description but no formal scheme | Add a `JWT` security scheme or document the JWT flow under API Info | - -### 6.4 Duplicate Inline Error Schemas - -`400` and `401` error responses on `/user`, `/users/signin`, `/users`, and `/resources` are copy-pasted inline instead of referencing shared `#/components/responses/BadRequest` or `#/components/responses/Unauthorized`. Extract to reusable response components. - -### 6.5 Auth Documentation Gaps - -- The spec is PMS-centric. Add a top-level **Plex.tv API Info** section explaining base URLs (`https://plex.tv/api/v2` vs `https://plex.tv/api`), default formats (JSON for v2, XML for v1), and required headers. -- Document rate limiting on auth endpoints (Plex Pro Week '25 blog explicitly mentions this). -- Document that `X-Plex-Client-Identifier` is **mandatory** for PIN and JWT flows. - ---- - -## 7. Documentation Improvements - -### 7.1 Typos - -| Location | Issue | Correction | -|----------|-------|------------| -| `POST /livetv/dvrs` description | "after creation of a **devcie**" | "device" | -| `PUT /livetv/dvrs/{dvrId}/lineups` description | "The lineup to **delete**" (PUT = add) | "The lineup to add" | -| `PUT /livetv/dvrs/{dvrId}/prefs` description | "by name **avd** value" | "and" | -| `GET /livetv/epg/lineupchannels` summary | "Get the channels for **mulitple** lineups" | "multiple" | -| `MediaGrabOperation` description | "media grab **opration**" | "operation" | -| `/security/token` description | "responds to all HTTP verbs but POST is preferred" | Clarify or restrict to POST only | - -### 7.2 Missing Descriptions & Examples - -| Topic | Gap | Recommendation | -|-------|-----|----------------| -| `PUT /:/prefs` | Only documents `prefs: object` | Add example or enum of common preference keys; link to hidden settings article | -| Hidden preferences | ~40+ keys undocumented | Document known hidden keys (`aBRKeepOldTranscodes`, `allowHighOutputBitrates`, `transcoderH264Options`, etc.) or link to external reference | -| `PUT /library/metadata/{ids}` | Body schema is `args: object` (opaque) | Document editable fields (title, summary, tag locks, etc.) | -| `uri` parameter on scrobble/unscrobble | Description refers to "intro for description of URIs" | That introductory section does not exist in the spec; add it or remove the cross-reference | -| `/media/providers` proxy paths | Individual provider feature paths are undefined | Reference dynamic paths (`/{provider}/search`, `/{provider}/metadata`, etc.) in the `Provider` tag description | -| `X-Plex-Container-Start` / `X-Plex-Container-Size` | Documented as response headers only | Clarify they are also accepted as **request** headers / query parameters for pagination | - -### 7.3 Tag Organization - -| Issue | Recommendation | -|-------|----------------| -| Tags `Authentication`, `Users`, `Plex` are scattered | Add a `Plex.tv` tag group in `x-tagGroups` to organize all cloud endpoints | -| `/media/grabbers/operations/{operationId}` tagged under `Subscriptions` | Cross-tag with `Devices` or retag | -| `Devices` tag description conflates DVR tuners with Plex clients | Add clarifying note that this tag only covers grabber/tuner devices; client discovery is via `/clients` (missing) or `/resources` | -| `/:/scrobble` and `/:/unscrobble` appear tag-less or under implicit tag | Verify they are categorized under a domain tag | - -### 7.4 XML vs JSON Notes - -| Behavior | Current State | Recommendation | -|----------|---------------|----------------| -| Default format (PMS) | Not clearly stated | Add note: "Most PMS endpoints return **XML** unless `Accept: application/json` is sent" | -| Default format (plex.tv v2) | Not clearly stated | Add note: "plex.tv v2 generally returns **JSON** by default" | -| Legacy endpoints (`/pins.xml`, `/api/resources`, `/api/users/`) | Not documented | Note that these return **XML only** | -| Webhook payload | Not documented | Note: JSON wrapped in `multipart/form-data` field named `payload`; thumbnail as second file part | -| Empty responses | Some PUT/DELETE return `204 No Content` | Document where no body is expected | - -### 7.5 Missing Cross-References - -| From | To | Recommendation | -|------|-----|----------------| -| `Devices` tag | `DVRs`, `EPG`, `Live TV`, `Subscriptions` tags | Add cross-reference note | -| `Download Queue` tag | `Play Queue` tag | Add note explaining the distinction | -| `Provider` tag | Individual provider proxy paths | Reference dynamic paths or document them | -| `Transcoder` endpoints | Segment delivery URLs | Add note explaining that manifests reference `/session/{sessionId}/{segmentId}.{ext}` | -| `Timeline` endpoint | `terminationCode` / `terminationText` | Explain that clients must handle 200 body to detect server-side session kill | - -### 7.6 Server URL Inconsistency - -- `/users` points to `https://plex.tv/api` (v1) -- `/user`, `/users/signin`, `/resources` point to `https://plex.tv/api/v2` - -**Recommendation:** Document *why* this split exists (v1 XML vs v2 JSON) and note the deprecation trajectory. - ---- - -## 8. Speakeasy / SDK Generator Improvements - -### 8.1 `x-speakeasy-globals` Headers - -Current globals (11 parameters) are reasonably complete. Candidates for addition: - -| Header | In globals? | Assessment | -|--------|-------------|------------| -| `X-Plex-Session-Identifier` | ❌ No | Correctly excluded — playback-session-specific, not global | -| `X-Plex-Client-Profile-Name` | ❌ No | **Consider adding** — used on transcoder/decision endpoints | -| `X-Plex-Client-Profile-Extra` | ❌ No | **Consider adding** — used on transcoder/decision endpoints | -| `X-Plex-Token` | ❌ No | Correctly excluded — it is a security scheme, not a global parameter | - -### 8.2 Missing Reusable Components - -Create or extract the following components so generated SDKs can reference them: - -- `#/components/schemas/Activity` -- `#/components/schemas/ButlerTask` -- `#/components/schemas/UpdaterStatus` -- `#/components/schemas/HistoryItem` -- `#/components/schemas/PlayQueue` (or `MediaContainerWithPlayQueue`) -- `#/components/schemas/Collection` -- `#/components/schemas/DownloadQueue` -- `#/components/schemas/DownloadQueueItem` -- `#/components/schemas/DeviceChannel` -- `#/components/schemas/MediaGrabber` -- `#/components/schemas/Provider` -- `#/components/schemas/ProviderFeature` -- `#/components/schemas/WebhookPayload` -- `#/components/schemas/NotificationContainer` -- `#/components/schemas/PlaySessionStateNotification` -- `#/components/schemas/StatusNotification` -- `#/components/schemas/ReachabilityNotification` -- `#/components/schemas/TimelineEntry` - -### 8.3 Globals Improvements - -- Consider adding `x-speakeasy-retries` configuration for rate-limited endpoints (`plex.tv/api/v2/pins`, `clients.plex.tv/api/v2/auth/*`). -- Document `parseAs: list` hints for comma-separated fields (`diagnostics`, `ownerFeatures`, `transcoderVideoBitrates`, etc.) so generated SDKs automatically split strings into arrays. -- Add `x-speakeasy-unknown-fields: allow` or similar note on schemas that use `additionalProperties: true` heavily (`Metadata`, `Hub`, `Activity.Context`, etc.) to set consumer expectations. - ---- - -## 9. Appendix: Raw Research Files - -| File | Description | -|------|-------------| -| `review/python_plexapi_gap_analysis.md` | Phase 1 — Comprehensive gap analysis between the official OpenAPI spec and the `python-plexapi` SDK. Covers missing PMS endpoints, plex.tv cloud APIs, client remote-control protocol, schema field mismatches, parameter gaps, and auth flow differences. | -| `review/integration_ecosystem_gaps.md` | Phase 1 — Survey of major open-source Plex integrations (Tautulli, Overseerr/Jellyseerr, Bazarr, Kometa, Home Assistant). Maps API usage patterns, missing endpoints, webhook consumption, and real-time event streams against the spec. | -| `review/undocumented_endpoints_research.md` | Phase 1 — Community-researched undocumented and hidden endpoints compiled from public forums, GitHub, Gists, Reddit, CVE write-ups, and the official spec. Catalogs plex.tv v2 surface, cloud providers, player control, transcode segments, legacy endpoints, and XML/JSON quirks. | -| `review/domain_auth_account_review.md` | Phase 2 — Deep review of the Authentication & Account domain: `securitySchemes`, `security`, `x-speakeasy-globals`, and all auth/account paths. Identifies incorrect scopes, missing OAuth/JWT flows, duplicate error schemas, and documentation gaps. | -| `review/domain_server_system_review.md` | Phase 2 — Deep review of Server & System domain (General, Activities, Butler, Updater, Log, Preferences, Events, Transcoder, Status). Identifies inline schemas, missing endpoints, parameter gaps, and auth inconsistencies. | -| `review/domain_library_metadata_review.md` | Phase 2 — Deep review of Library & Metadata domain. Covers root library, sections, metadata items, collections, playlists, and all sub-endpoints. Documents extensive schema field gaps and missing query parameters. | -| `review/domain_media_provider_review.md` | Phase 2 — Deep review of Media Provider & Content domain (Provider, Content, Hubs, Search, Rate, Playlist). Documents missing cloud provider endpoints, provider proxy paths, search parameter gaps, and hub schema issues. | -| `review/domain_playback_sessions_review.md` | Phase 2 — Deep review of Playback & Sessions domain (Status, Timeline, Play Queue, Transcoder). Documents missing WebSocket plural alias, complete client remote-control protocol, transcode segment delivery, and play-queue schema mismatch. | -| `review/domain_livetv_dvr_review.md` | Phase 2 — Deep review of Live TV & DVR domain (DVRs, EPG, Subscriptions, Live TV, Grabbers/Devices). Documents missing session lifecycle endpoints, inline schema duplication, parameter gaps, and typos. | -| `review/domain_devices_download_review.md` | Phase 2 — Deep review of Devices & Download Queue domain. Documents missing PMS local endpoints, client remote-control protocol, schema gaps in `Device`, `DownloadQueue`, `DownloadQueueItem`, and `MediaGrabber`. | - ---- - -*Report generated by the Master Synthesizer agent. All findings are derived from the 10 Phase 1 and Phase 2 research reports listed in the Appendix.* diff --git a/review/domain_auth_account_review.md b/review/domain_auth_account_review.md deleted file mode 100644 index ae819066f..000000000 --- a/review/domain_auth_account_review.md +++ /dev/null @@ -1,228 +0,0 @@ -# Auth & Account Domain Review - -**Date:** 2026-06-03 -**Scope:** `securitySchemes`, `security`, `x-speakeasy-globals`, `components/parameters`, and all auth/account paths in `plex-api-spec.yaml`. -**Sources:** `python_plexapi_gap_analysis.md`, `integration_ecosystem_gaps.md`, `undocumented_endpoints_research.md` - ---- - -## Endpoints Present in Spec (inventory with assessment) - -| # | Path | Server | Method | Tag | Assessment | -|---|------|--------|--------|-----|------------| -| 1 | `/user` | `plex.tv/api/v2` | `GET` | Authentication | ✅ Path correct. Response uses `UserPlexAccount` schema (comprehensive). **Issue:** Security scope is `admin`; this is a self-introspection endpoint and should work with *any* valid token. No `POST`/`PUT`/`DELETE` for profile updates. | -| 2 | `/users/signin` | `plex.tv/api/v2` | `POST` | Authentication | ✅ Path correct. Form body has `login`, `password`, `rememberMe`, `verificationCode`. **Issue:** No mention of 2FA challenge flow in description. No OAuth/PIN alternatives documented. Response extends `UserPlexAccount` with `pastSubscriptions`/`trials` — handled correctly via `allOf`. | -| 3 | `/users` | `plex.tv/api` | `GET` | Users | ✅ Path correct (v1 API). Inline schema is fairly detailed (friends/shared users with `Server` sub-array). **Issue:** Only `GET` documented; no `POST` for user creation. Security scope is `admin` but this works with any valid token for friend discovery. Only JSON documented; XML variant not mentioned. | -| 4 | `/security/resources` | PMS | `GET` | General | ✅ Path correct. `source` (required) and `refresh` query params present. Response schema is basic (accessToken + Connection list). **Issue:** No `POST`/`PUT`/`DELETE`. No security scope override at path level (falls back to global `shared user`/`admin`). | -| 5 | `/security/token` | PMS | `POST` | General | ✅ Path correct. `type=delegation` and `scope=all` enums enforced. **Issue:** Description says "responds to all HTTP verbs but POST is preferred" — confusing; should either document the other verbs or remove the note. No mention of token expiration (48h / restart). | -| 6 | `/resources` | `plex.tv/api/v2` | `GET` | Plex | ✅ Path correct. Query params `includeHttps`, `includeRelay`, `includeIPv6` present with `BoolInt` + defaults. Response is `PlexDevice[]` array. **Issue:** Security scope is `admin` but should work with any valid token for self-resource lookup. No `POST`/`PUT`/`DELETE` for device management. | - -### Summary of Present Endpoints -- **Only 6 endpoints** are documented in the Auth & Account domain. -- **Zero** plex.tv v2 endpoints for OAuth PIN, sign-out, ping, webhooks, sharing, Plex Home, or JWT auth. -- **Zero** legacy v1 plex.tv endpoints (pins.xml, api/resources, api/users, etc.). -- **Zero** PMS-side auth endpoints (e.g., `/myplex/claim`, `/myplex/account`). - ---- - -## Missing Endpoints - -### CRITICAL — OAuth PIN Flow -These are fundamental to every modern integration (Tautulli, Overseerr, Bazarr, Home Assistant). - -| Path | Method | Priority | Source | What it does | -|------|--------|----------|--------|--------------| -| `https://plex.tv/api/v2/pins` | `POST` | **CRITICAL** | Tautulli, Overseerr, Bazarr, python-plexapi | Create a 4-char PIN for device linking | -| `https://plex.tv/api/v2/pins/{pinId}` | `GET` | **CRITICAL** | Tautulli, Overseerr, Bazarr | Poll PIN status; returns `authToken` when claimed | -| `https://plex.tv/api/v2/pins/link` | `PUT` | **CRITICAL** | python-plexapi | Link a PIN to an account (OAuth completion) | -| `https://clients.plex.tv/api/v2/pins` | `POST` | **CRITICAL** | python-plexapi | Alternative PIN endpoint (clients subdomain) | - -### HIGH — Account & Token Management - -| Path | Method | Priority | Source | What it does | -|------|--------|----------|--------|--------------| -| `https://plex.tv/api/v2/users/signout` | `DELETE` | **HIGH** | python-plexapi | Invalidate token | -| `https://plex.tv/api/v2/ping` | `GET` | **HIGH** | Tautulli, Overseerr, python-plexapi | Token refresh / health check (no auth required) | -| `https://plex.tv/api/v2/features` | `GET` | **HIGH** | Plex Forum | Plex Pass feature flags | -| `https://plex.tv/api/v2/friends` | `GET` | **HIGH** | Plex Forum | Friends & shared users (v2 JSON) | -| `https://plex.tv/api/v2/home` | `GET` | **HIGH** | Plex Forum | Plex Home user list | -| `https://plex.tv/api/v2/server` | `GET` | **HIGH** | Plex Forum | Server association info for logged-in user | -| `https://plex.tv/api/v2/users/password` | `POST` | **HIGH** | Plex Forum | Change / reset password | -| `https://plex.tv/api/v2/user/view_state_sync` | `PUT` | **HIGH** | python-plexapi | Enable/disable watch-state sync consent | -| `https://plex.tv/api/v2/user/{uuid}/settings/opt_outs` | `GET` | **HIGH** | python-plexapi | Online-media-source opt-outs | -| `https://plex.tv/users/account` | `GET` | **HIGH** | Tautulli, Overseerr | Own account details (XML) | -| `https://plex.tv/users/account.json` | `GET` | **HIGH** | Tautulli, Overseerr | Own account details (JSON) | - -### HIGH — Sharing & Plex Home - -| Path | Method | Priority | Source | What it does | -|------|--------|----------|--------|--------------| -| `https://plex.tv/api/v2/shared_servers` | `POST` | **HIGH** | python-plexapi, Plexopedia | Share a server with a user | -| `https://plex.tv/api/v2/sharings/{userId}` | `PUT` | **HIGH** | python-plexapi | Update friend filters (allowSync, filterMovies, etc.) | -| `https://plex.tv/api/v2/sharings/{userId}` | `DELETE` | **HIGH** | python-plexapi | Remove a share / friend | -| `https://plex.tv/api/v2/home/users/restricted/{userId}` | `PUT` | **HIGH** | python-plexapi | Update restricted (managed) home user settings | -| `https://plex.tv/api/home/users` | `GET` / `POST` | **HIGH** | python-plexapi | List / create Plex Home users | -| `https://plex.tv/api/home/users/{userId}` | `DELETE` / `PUT` | **HIGH** | python-plexapi | Remove / update home user | -| `https://plex.tv/api/home/users/{id}/switch` | `POST` | **HIGH** | python-plexapi | Switch to home user (returns new auth token) | -| `https://plex.tv/api/servers/{machineId}/shared_servers` | `POST` | **HIGH** | python-plexapi, Tautulli | Share library with friend (legacy v1) | -| `https://plex.tv/api/servers/{machineId}` | `GET` | **HIGH** | python-plexapi | Server details for sharing | - -### HIGH — Claim Tokens - -| Path | Method | Priority | Source | What it does | -|------|--------|----------|--------|--------------| -| `https://plex.tv/api/claim/token.json` | `GET` | **HIGH** | python-plexapi | Claim token for new servers | -| `POST /myplex/claim` | `POST` | **HIGH** | python-plexapi | Claim server on PMS (uses claim token) | - -### MEDIUM — Webhooks - -| Path | Method | Priority | Source | What it does | -|------|--------|----------|--------|--------------| -| `https://plex.tv/api/v2/user/webhooks` | `GET` | **MEDIUM** | python-plexapi | List configured webhook URLs | -| `https://plex.tv/api/v2/user/webhooks` | `POST` | **MEDIUM** | python-plexapi | Add a webhook URL | - -### MEDIUM — JWT Device Registration (new 2025) -Documented by Plex Pro Week ’25 blog and community research. - -| Path | Method | Priority | Source | What it does | -|------|--------|----------|--------|--------------| -| `https://clients.plex.tv/api/v2/auth/jwk` | `POST` | **MEDIUM** | Plex Pro Week, JonnyWong16 gist | Register device public key (JWK) | -| `https://clients.plex.tv/api/v2/auth/nonce` | `GET` | **MEDIUM** | JonnyWong16 gist | Get nonce to sign in client JWT | -| `https://clients.plex.tv/api/v2/auth/token` | `POST` | **MEDIUM** | JonnyWong16 gist | Exchange signed client JWT for Plex JWT | -| `https://clients.plex.tv/api/v2/auth/keys` | `GET` | **MEDIUM** | JonnyWong16 gist | Plex public JWKs for signature verification | - -### MEDIUM — Server/Account Utilities - -| Path | Method | Priority | Source | What it does | -|------|--------|----------|--------|--------------| -| `https://plex.tv/api/v2/server/access_tokens` | `GET` | **MEDIUM** | CVE-2025-34158 write-up | List access tokens for the server | -| `https://plex.tv/api/v2/server/users/features` | `GET` | **MEDIUM** | Plex Forum | Features enabled per shared user | -| `https://plex.tv/api/v2/cloud_server` | `GET` | **MEDIUM** | Tautulli | Plex Cloud status | -| `https://plex.tv/api/v2/geoip` | `GET` | **MEDIUM** | Tautulli | GeoIP lookup | -| `https://plex.tv/:/ip` | `GET` | **MEDIUM** | Tautulli | Public IP detection | -| `https://plex.tv/api/downloads/{channel}.json` | `GET` | **LOW** | Tautulli | Plex update downloads | - -### LOW — Legacy v1 plex.tv (for migration docs) - -| Path | Method | Priority | Source | What it does | -|------|--------|----------|--------|--------------| -| `https://plex.tv/pins.xml` | `POST` | **LOW** | plexargod | Legacy PIN creation (XML) | -| `https://plex.tv/pins/{pinId}` | `GET` | **LOW** | plexargod | Legacy PIN check (XML) | -| `https://plex.tv/api/resources` | `GET` | **LOW** | plexargod | Legacy published server connections (XML) | -| `https://plex.tv/api/users/` | `GET` | **LOW** | python-plexapi | Legacy friends list (XML) | -| `https://plex.tv/api/servers/{machineId}` | `GET` | **LOW** | python-plexapi | Legacy server info (XML) | -| `https://plex.tv/api/servers/{machineId}/shared_servers` | `POST` | **LOW** | python-plexapi | Legacy share server (XML) | -| `https://clients.plex.tv/devices.xml` | `GET` | **LOW** | CVE-2025-34158 write-up | Authorized devices with tokens (XML) | - ---- - -## Schema & Security Issues - -### 1. JWT Auth is Mentioned but Not Formally Documented -- The `token` security scheme **description** mentions JWT (7-day expiry, ED25519, device revocation), but there is **no dedicated security scheme** for JWT, no `JWT` bearer format, and no documentation of the keypair registration flow (`/auth/jwk`, `/auth/nonce`, `/auth/token`). -- **Fix:** Add a `JWT` security scheme (or document the JWT flow under API Info) and add the four `clients.plex.tv/api/v2/auth/*` endpoints. - -### 2. `clientIdentifier` is Not a Security Scheme -- `X-Plex-Client-Identifier` is defined as a **parameter**, not a security scheme. The PIN endpoints and some public endpoints (ping) require *only* `X-Plex-Client-Identifier` without a token. -- **Fix:** Consider adding an `apiKey` security scheme for `clientIdentifier` so that PIN endpoints can declare `security: [clientIdentifier: []]` cleanly. - -### 3. Incorrect `admin` Scope on Self-Introspection Endpoints -- `/user` (GET token details) requires `admin` scope — incorrect. Any valid token should work. -- `/resources` (GET own servers) requires `admin` scope — incorrect. Any valid token should work. -- `/users` (GET friends) requires `admin` scope — overly restrictive; works with standard user tokens for friend discovery. -- **Fix:** Change scopes to `shared user` (or remove scope restriction) on these paths. - -### 4. `X-Plex-Token` Query Param Not Supported in Spec -- The spec defines `X-Plex-Token` **only** as a header (`in: header`). Integrations (python-plexapi, Tautulli) widely pass it as a query parameter (`?X-Plex-Token=...`). -- **Fix:** Document that `X-Plex-Token` may also be passed as a query parameter on all endpoints. - -### 5. Duplicate Inline Error Schemas -- `400` and `401` error responses on `/user`, `/users/signin`, `/users`, and `/resources` are **copy-pasted inline** instead of referencing a shared `#/components/responses/BadRequest` or `#/components/responses/Unauthorized`. -- **Fix:** Extract to reusable response components. - -### 6. `/security/token` Verb Confusion -- Description says "responds to all HTTP verbs but POST is preferred". If GET/PUT/DELETE actually work, they should be documented; if not, the note should be removed to avoid confusion. - -### 7. `/users/signin` Missing `strong` Parameter -- The v2 PIN endpoint supports a `strong` boolean parameter for longer PINs. Not applicable to signin directly, but the OAuth PIN flow docs should mention it. - ---- - -## Parameter/Header Gaps - -### `x-speakeasy-globals` Headers -Current globals (11 parameters): -```yaml -- accepts -- X-Plex-Client-Identifier -- X-Plex-Product -- X-Plex-Version -- X-Plex-Platform -- X-Plex-Platform-Version -- X-Plex-Device -- X-Plex-Model -- X-Plex-Device-Vendor -- X-Plex-Device-Name -- X-Plex-Marketplace -``` - -**Missing from globals (assessment):** - -| Header | In globals? | Assessment | -|--------|-------------|------------| -| `X-Plex-Session-Identifier` | ❌ No | **Correctly excluded** — it is playback-session-specific, not global. Already documented on `/:/timeline`. | -| `X-Plex-Client-Profile-Name` | ❌ No | **Consider adding** — used on transcoder/decision endpoints. | -| `X-Plex-Client-Profile-Extra` | ❌ No | **Consider adding** — used on transcoder/decision endpoints. | -| `X-Plex-Token` | ❌ No | **Correctly excluded** — it is a security scheme, not a global parameter. | - -**Verdict:** The `x-speakeasy-globals` list is **reasonably complete** for auth/account. The only candidates for addition are `X-Plex-Client-Profile-Name` and `X-Plex-Client-Profile-Extra`, but those are transcoder-domain headers. - -### Missing Query Parameters on Present Endpoints - -| Endpoint | Missing Param | Notes | -|----------|---------------|-------| -| `/resources` | `includeDLNA` | Some clients use this to filter DLNA connections. | -| `/resources` | `includeRelay` | ✅ Present. | -| `/users/signin` | `code` (2FA) | `verificationCode` is present, but some legacy flows use `code`. | - ---- - -## Documentation Improvements - -1. **Add a Plex.tv API Info section** - - The spec is PMS-centric. A new top-level section should explain: - - Base URL: `https://plex.tv/api/v2` - - Legacy base URL: `https://plex.tv/api` - - Default response format: JSON for v2, XML for v1 - - Required headers for all plex.tv calls: `X-Plex-Client-Identifier`, `X-Plex-Product`, etc. - -2. **Auth flow diagram / description** - - Document the three supported auth flows: - 1. **Direct sign-in:** `POST /users/signin` with username/password (+ 2FA). - 2. **OAuth PIN:** `POST /pins` → user visits `https://plex.tv/link` → `GET /pins/{id}` → obtain token. - 3. **JWT Device Registration:** `POST /auth/jwk` → `GET /auth/nonce` → `POST /auth/token` (ED25519 keypairs, 7-day expiry). - -3. **Tag consolidation** - - The spec has tags: `Authentication`, `Users`, `Plex`. - - **Suggestion:** Add a `Plex.tv` tag group in `x-tagGroups` to organize all cloud endpoints together. - -4. **Server URL inconsistency** - - `/users` points to `https://plex.tv/api` (v1) - - `/user`, `/users/signin`, `/resources` point to `https://plex.tv/api/v2` - - Document *why* this split exists (v1 XML vs v2 JSON) and note deprecation trajectory. - -5. **`/users/signin` description** - - Expand to explicitly mention: - - 2FA challenge behavior (401 with `verificationCode` required). - - Rate limiting on auth endpoints. - - `rememberMe` behavior (extends token expiry). - -6. **Webhook payload schema** - - Although webhook configuration endpoints are missing, the spec should eventually document the inbound webhook `multipart/form-data` payload schema (event types, `payload` JSON field, optional `thumb` JPEG attachment). - -7. **XML vs JSON behavior** - - Add a note that PMS endpoints default to XML unless `Accept: application/json` is sent, while plex.tv v2 defaults to JSON. - ---- - -*End of review.* diff --git a/review/domain_devices_download_review.md b/review/domain_devices_download_review.md deleted file mode 100644 index 18513f776..000000000 --- a/review/domain_devices_download_review.md +++ /dev/null @@ -1,249 +0,0 @@ -# Devices & Download Queue Domain Review - -**Date:** 2026-06-03 -**Scope:** Tags `Devices`, `Download Queue`, plus `/security/*`, `/resources`, `/user`, and related schemas. -**Sources:** `plex-api-spec.yaml`, `python_plexapi_gap_analysis.md`, `integration_ecosystem_gaps.md`, `undocumented_endpoints_research.md` - ---- - -## Endpoints Present in Spec - -### Devices (Media Grabbers / DVR Tuners) - -| Path | Method | OperationId | Notes | -|------|--------|-------------|-------| -| `/media/grabbers` | `GET` | `getAvailableGrabbers` | Lists grabber protocols. | -| `/media/grabbers/devices` | `GET` | `listDevices` | Lists all discovered grabber devices. **Admin only.** | -| `/media/grabbers/devices` | `POST` | `addDevice` | Adds a device by URI to an existing grabber. **Admin only.** | -| `/media/grabbers/devices/discover` | `POST` | `discoverDevices` | Triggers SSDP/network discovery. **Admin only.** | -| `/media/grabbers/devices/{deviceId}` | `DELETE` | `removeDevice` | Removes device + channel mappings. **Admin only.** | -| `/media/grabbers/devices/{deviceId}` | `GET` | `getDeviceDetails` | Returns `MediaContainerWithDevice`. **Admin only.** | -| `/media/grabbers/devices/{deviceId}` | `PUT` | `modifyDevice` | Enable/disable device. **Admin only.** | -| `/media/grabbers/devices/{deviceId}/channelmap` | `PUT` | `setChannelmap` | Maps device channels to lineup VCNs/keys. **Admin only.** | -| `/media/grabbers/devices/{deviceId}/channels` | `GET` | `getDevicesChannels` | Returns `DeviceChannel` array. **Admin only.** | -| `/media/grabbers/devices/{deviceId}/prefs` | `PUT` | `setDevicePreferences` | Sets device preferences by name. **Admin only.** | -| `/media/grabbers/devices/{deviceId}/scan` | `DELETE` | `stopScan` | Stops channel scan. | -| `/media/grabbers/devices/{deviceId}/scan` | `POST` | `scan` | Starts channel scan (returns `X-Plex-Activity`). | -| `/media/grabbers/devices/{deviceId}/thumb/{version}` | `GET` | `getThumb` | Device thumbnail image. | -| `/media/grabbers/operations/{operationId}` | `DELETE` | `cancelGrab` | Cancels an active recording/grab. Tagged under `Subscriptions`. | - -### Download Queue - -| Path | Method | OperationId | Notes | -|------|--------|-------------|-------| -| `/downloadQueue` | `POST` | `createDownloadQueue` | Creates or returns existing queue for client+user. | -| `/downloadQueue/{queueId}` | `GET` | `getDownloadQueue` | Returns queue metadata (`id`, `itemCount`, `status`). | -| `/downloadQueue/{queueId}/add` | `POST` | `addDownloadQueueItems` | Adds items by `keys` array. Reuses many transcoding query params. | -| `/downloadQueue/{queueId}/items` | `GET` | `listDownloadQueueItems` | Lists items with `DecisionResult` + `TranscodeSession`. | -| `/downloadQueue/{queueId}/items/{itemId}` | `DELETE` | `removeDownloadQueueItems` | `itemId` is an array (supports batch delete). | -| `/downloadQueue/{queueId}/items/{itemId}` | `GET` | `getDownloadQueueItems` | Same schema as `listDownloadQueueItems`. | -| `/downloadQueue/{queueId}/items/{itemId}/restart` | `POST` | `restartProcessingDownloadQueueItems` | Reprocess with previous decision params. | -| `/downloadQueue/{queueId}/item/{itemId}/decision` | `GET` | `getItemDecision` | Returns `MediaContainerWithDecision`. | -| `/downloadQueue/{queueId}/item/{itemId}/media` | `GET` | `getDownloadQueueMedia` | Returns raw media file when transcoding complete; `503`+`Retry-After` if not ready. | - -### Security / Token / Resources - -| Path | Method | OperationId | Tag | Notes | -|------|--------|-------------|-----|-------| -| `/security/resources` | `GET` | `getSourceConnectionInformation` | `General` | Returns connection details + transient token for a source. | -| `/security/token` | `POST` | `getTransientToken` | `General` | Generates delegation token (`type=delegation`, `scope=all`). | -| `/resources` | `GET` | `get-server-resources` | `Plex` | plex.tv API v2. Returns `PlexDevice[]` (servers & clients). | -| `/user` | `GET` | `getTokenDetails` | `Authentication` | plex.tv API v2. Returns `UserPlexAccount`. | - ---- - -## Missing Endpoints - -### PMS Local Endpoints (High Impact) - -| Path | Method | Used By | Description | -|------|--------|---------|-------------| -| `/clients` | `GET` | python-plexapi, Home Assistant | Lists connected Plex clients (`MediaContainer` of `Server`/`Player` objects). | -| `/accounts` | `GET` | python-plexapi | Lists local system accounts. | -| `/devices` | `GET` | python-plexapi | Lists local system devices (distinct from grabber devices). | -| `/sync/refreshSynclists` | `PUT` | python-plexapi | Forces PMS to download new SyncList from plex.tv. | -| `/sync/refreshContent` | `PUT` | python-plexapi | Forces PMS to refresh content for known SyncLists. | -| `/sync/items/{syncId}` | `GET` | Tautulli | Sync item details. | -| `/sync/transcodeQueue` | `GET` | Tautulli | Sync transcode queue status. | -| `/myplex/claim` | `POST` | python-plexapi | Claims server using plex.tv claim token. | - -### Client Remote-Control Protocol (High Impact) - -The Plex Client Control Protocol is entirely absent. Proxied via PMS using `X-Plex-Target-Client-Identifier`. - -| Path Prefix | Methods | Description | -|-------------|---------|-------------| -| `/player/playback/play` | `POST` | Start playback | -| `/player/playback/pause` | `POST` | Pause | -| `/player/playback/stop` | `POST` | Stop | -| `/player/playback/seek` | `POST` | Seek to time | -| `/player/playback/skipTo` | `POST` | Skip to item | -| `/player/playback/skipBy` | `POST` | Skip forward/backward | -| `/player/playback/stepForward` | `POST` | Step forward | -| `/player/playback/stepBack` | `POST` | Step back | -| `/player/playback/setParameters` | `POST` | Set shuffle/repeat/volume | -| `/player/playback/subtitleStream` | `POST` | Change subtitle stream | -| `/player/playback/audioStream` | `POST` | Change audio stream | -| `/player/playback/videoStream` | `POST` | Change video stream | -| `/player/playback/volume` | `POST` | Set volume | -| `/player/playback/mute` | `POST` | Mute | -| `/player/playback/unmute` | `POST` | Unmute | -| `/player/playback/setTextStream` | `POST` | Set text stream | -| `/player/playback/setRating` | `POST` | Rate item | -| `/player/playback/setViewOffset` | `POST` | Set resume offset | -| `/player/playback/setState` | `POST` | Set playback state | -| `/player/playback/refreshPlayQueue` | `POST` | Refresh play queue | -| `/player/playback/playMedia` | `POST` | Play specific media on client | -| `/player/timeline/poll` | `GET` | Poll client playback timeline | -| `/resources` (on client) | `GET` | Client capabilities and device info | - -### plex.tv Cloud Endpoints (Out-of-scope for PMS spec, but referenced) - -| Path | Method | Description | -|------|--------|-------------| -| `https://plex.tv/api/v2/devices/{deviceId}/certificate/subject` | `GET` | Device certificate subject (used during claim). | -| `https://plex.tv/api/v2/devices/{deviceId}/certificate/csr` | `PUT` | Upload CSR. | -| `https://plex.tv/api/v2/devices/{deviceId}/certificate/download` | `GET` | Download signed cert. | -| `https://plex.tv/api/v2/release_channels` | `GET` | Release channel info. | -| `https://sonos.plex.tv/resources` | `GET` | Sonos speaker discovery. | - -### Real-Time / Websocket - -| Path | Description | -|------|-------------| -| `/:/websockets/notifications` | WebSocket event bus for sessions, timeline, status. Used by Tautulli and Home Assistant. Spec documents SSE/EventSource only. | - ---- - -## Schema Corrections - -### `Device` Schema (reusable component) - -**Current state:** The `Device` schema (`#/components/schemas/Device`) defines only 12 properties: - -- `ChannelMapping`, `key`, `lastSeenAt`, `make`, `model`, `modelNumber`, `protocol`, `sources`, `state`, `status`, `tuners`, `uri`, `uuid` - -**Issues:** -- **Missing `id`:** The `deviceId` path parameter is typed as `integer`, but the schema has no `id` field. -- **Missing `name` / `title`:** No human-readable device name. -- **Missing `enabled`:** The `PUT /media/grabbers/devices/{deviceId}` endpoint toggles this, but it is not in the schema. -- **Missing `deviceIdentifier`:** Not distinguished from `uuid`. -- **Missing `thumb` / `thumbVersion`:** Referenced by `/media/grabbers/devices/{deviceId}/thumb/{version}`. -- **Missing `lineup` / `lineupType`:** EPG lineup association is absent. -- **No `$ref` usage in responses:** `MediaContainerWithDevice` duplicates the `Device` properties inline instead of referencing `#/components/schemas/Device`. This means fixes must be applied in two places. - -### `MediaContainerWithDevice` Schema - -**Issue:** Duplicates `Device` properties verbatim instead of using `allOf` + `$ref: '#/components/schemas/Device'`. Should be: - -```yaml -MediaContainerWithDevice: - type: object - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - type: object - properties: - Device: - type: array - items: - $ref: '#/components/schemas/Device' -``` - -### `Grabber` / `MediaGrabber` Schema - -**Issue:** No reusable schema exists. The `GET /media/grabbers` response defines `MediaGrabber` inline with only: -- `identifier`, `protocol`, `title` - -**Likely missing fields:** -- `id`, `type`, `deviceType`, `urlBase`, `modelDescription`, `modelNumber`, `modelURL`, `UDN`, `manufacturer`, `manufacturerURL`, `protocols` (array), `features`. - -### `DownloadQueue` Schema - -**Issue:** Not a reusable component. Defined inline in `POST /downloadQueue` and `GET /downloadQueue/{queueId}`. - -**Current fields:** `id`, `itemCount`, `status` - -**Likely missing fields:** -- `createdAt`, `updatedAt`, `clientIdentifier`, `userID`, `totalSize`, `identifier`. - -### `DownloadQueueItem` Schema - -**Issue:** Not a reusable component. Defined inline in `GET /downloadQueue/{queueId}/items` and `GET /downloadQueue/{queueId}/items/{itemId}`. - -**Current fields:** `DecisionResult`, `error`, `id`, `key`, `queueId`, `status`, `transcode`, `TranscodeSession` - -**Likely missing fields:** -- `createdAt`, `updatedAt`, `downloadUrl`, `metadata` (`Metadata` object), `mediaIndex`, `partIndex`, `optimizedForStreaming`, `videoResolution`, `audioCodec`, `videoCodec`, `container`. - -### `PlexDevice` Schema - -**Status:** Well-defined reusable schema (`#/components/schemas/PlexDevice`) with 25+ fields. Used by `/resources`. - -**Minor issue:** `platform`, `platformVersion`, and `device` are typed as `["null", "string"]` which is correct for optional nullable fields, but the `required` list includes them. This is contradictory — either remove from `required` or remove `null` from type. - -### `ServerConfiguration` Schema (cross-domain) - -**Issues noted in gap analysis:** -- `diagnostics`: Spec types as `string`; SDK parses as `list` (comma-separated). -- `transcoderVideoBitrates`: Untyped / description only; SDK parses as `list`. -- `transcoderVideoQualities`: Spec types as `string`; SDK parses as `list`. -- `transcoderVideoResolutions`: Description only; SDK parses as `list`. -- `ownerFeatures`: Spec types as `string` (comma-separated); SDK parses as `list`. - ---- - -## Parameter/Query Gaps - -### Devices - -| Endpoint | Gap | Details | -|----------|-----|---------| -| `GET /media/grabbers` | `protocol` query param | Only documented as `string` with example `livetv`. Should enumerate known protocols (`stream`, `download`, `livetv`). | -| `POST /media/grabbers/devices` | `uri` query param | No format/validation pattern documented. | -| `PUT /media/grabbers/devices/{deviceId}/channelmap` | `channelMapping` / `channelMappingByKey` | `style: deepObject` is used but no formal schema for the nested map keys. | -| `PUT /media/grabbers/devices/{deviceId}/prefs` | `name` query param | Description says "preference names and values" but schema is just `string`. Should be `object` or better documented as `name=value` pairs. | -| `POST /media/grabbers/devices/{deviceId}/scan` | `source` query param | Only example `Cable` given; should list valid scan sources (OTA, Cable, etc.). | - -### Download Queue - -| Endpoint | Gap | Details | -|----------|-----|---------| -| `POST /downloadQueue/{queueId}/add` | `keys` parameter | `explode: false` array of strings. No max length or format documented. | -| `POST /downloadQueue/{queueId}/add` | Transcoding params | Re-uses ~25 transcoding parameters (e.g., `videoBitrate`, `audioChannelCount`, `subtitles`). These are well-documented individually but the interaction with download-queue transcoding is not described. | -| `GET /downloadQueue/{queueId}/items` | Pagination | No `offset` / `limit` query parameters; relies on `X-Plex-Container-Start` / `X-Plex-Container-Size` headers which are not listed as request parameters. | -| `GET /downloadQueue/{queueId}/item/{itemId}/media` | `Accept` header | Should document required `Accept` header for media file negotiation. | - -### Security / Resources - -| Endpoint | Gap | Details | -|----------|-----|---------| -| `GET /security/resources` | `source` query param | Required but no enum or example of valid source identifiers. | -| `GET /security/resources` | `refresh` query param | Boolean (`BoolInt`) but behavior is not described. | -| `POST /security/token` | `type` / `scope` | Only `delegation` / `all` are documented. No note on whether additional scopes are planned. | -| `GET /resources` | `includeHttps` / `includeRelay` / `includeIPv6` | Defaults are `0`; should clarify that omitting them is equivalent to `0`. | - ---- - -## Documentation Improvements - -### Tag Clarity -1. **Devices tag description** conflates "media grabber devices" (DVR tuners) with "Plex clients/devices". A clarifying note should be added that this tag **only** covers DVR/network tuner devices discovered via SSDP, and that client discovery is handled via `/clients` (missing) or `/resources`. -2. **`/media/grabbers/operations/{operationId}`** is tagged under `Subscriptions` rather than `Devices`. While logically related to subscription recordings, it operates on grabber operations and could be cross-tagged. - -### Endpoint Descriptions -1. **`/security/token`** description states "responds to all HTTP verbs but POST is preferred." The spec only documents `POST`. Either document all verbs or restrict the description to `POST` only. -2. **Download Queue endpoints** all carry an `Available: 0.2.0` note with no context. If this refers to an internal API version, it should be documented in the tag description or removed if not actionable for consumers. -3. **`GET /downloadQueue/{queueId}/item/{itemId}/media`** returns `200` with "The raw media file" but has no `content` schema. Should document expected `Content-Type` (e.g., `video/mp4`, `application/octet-stream`) and note that the actual type depends on the transcode decision. -4. **`GET /media/grabbers/devices/{deviceId}/thumb/{version}`** returns `200` with "The thumbnail for the device" but has no `content` schema. Should document `image/jpeg` or `image/png` response type. - -### Schema Documentation -1. **`Device` schema** should be expanded and referenced consistently. The SSDP example in the tag description lists fields (`UDN`, `URLBase`, `deviceType`, `serviceType`, `serviceId`, `friendlyName`, `manufacturer`, `modelDescription`, `modelName`, `modelNumber`) that do not appear in the `Device` schema at all. -2. **`MediaGrabber` inline schema** should become a reusable component with complete fields. -3. **`DownloadQueue` and `DownloadQueueItem` inline schemas** should be promoted to reusable components under `#/components/schemas/`. -4. **`TranscodeSession` schema** is referenced by `DownloadQueueItem` but is minimal. The comment in the spec admits it is "not yet documented." This is a known gap but should be prioritized. - -### Cross-References -1. Add a note in the `Devices` tag pointing to the `DVRs`, `EPG`, `Live TV`, and `Subscriptions` tags, since grabber devices are tightly coupled with DVR functionality. -2. Add a note in the `Download Queue` tag explaining that this is the **server-side sync/optimization queue** (used for mobile sync and optimized versions), distinct from the client-side `Play Queue`. diff --git a/review/domain_library_metadata_review.md b/review/domain_library_metadata_review.md deleted file mode 100644 index 0dffe39a0..000000000 --- a/review/domain_library_metadata_review.md +++ /dev/null @@ -1,401 +0,0 @@ -# Library & Metadata Domain Review - -**Domain:** Library, Library Collections, Library Playlists, Collections, Metadata, Media, Part, Stream -**Date:** 2026-06-03 -**Spec file:** `plex-api-spec.yaml` (≈17k lines, OpenAPI 3.1.1) - ---- - -## Endpoints Present in Spec (inventory with assessment) - -### Root Library Endpoints - -| Path | Methods | Tag | Assessment | -|------|---------|-----|------------| -| `/library/all` | GET | Library | **Partial** — only documents `mediaQuery`; missing `type`, `sort`, filters, include/exclude flags | -| `/library/caches` | DELETE | Library | ✅ Complete | -| `/library/clean/bundles` | PUT | Library | ✅ Complete | -| `/library/collections` | POST | Collections | **Partial** — creation params present but collection-specific response fields under-documented | -| `/library/file` | POST | Library | ✅ Complete | -| `/library/matches` | GET | Library | ✅ Complete | -| `/library/optimize` | PUT | Library | ✅ Complete | -| `/library/randomArtwork` | GET | Library | ✅ Complete | -| `/library/tags` | GET | Library | ✅ Complete | - -### Library Sections - -| Path | Methods | Tag | Assessment | -|------|---------|-----|------------| -| `/library/sections/all` | GET | Library | ✅ Complete | -| `/library/sections/all/refresh` | DELETE | Library | ✅ Complete | -| `/library/sections/prefs` | GET | Library | ✅ Complete | -| `/library/sections/refresh` | POST | Library | ✅ Complete | -| `/library/sections/{sectionId}` | GET, PUT, DELETE | Library | **Partial** — missing `edit` body schema; `PUT` params under-documented | -| `/library/sections/{sectionId}/albums` | GET | Content | ✅ Complete | -| `/library/sections/{sectionId}/all` | GET, PUT | Content | **Partial** — GET missing `type`, `sort`, tag filters, include/exclude matrix; PUT field-editing schema is descriptive only | -| `/library/sections/{sectionId}/allLeaves` | GET | Content | ✅ Complete | -| `/library/sections/{sectionId}/analyze` | POST | Library | ✅ Complete | -| `/library/sections/{sectionId}/arts` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/autocomplete` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/categories` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/cluster` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/collections` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/common` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/computePath` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/emptyTrash` | PUT | Library | ✅ Complete | -| `/library/sections/{sectionId}/filters` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/firstCharacters` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/indexes` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/intros` | POST | Library | ✅ Complete | -| `/library/sections/{sectionId}/location` | GET, POST, DELETE | Library | ✅ Complete | -| `/library/sections/{sectionId}/moment` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/nearest` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/prefs` | GET, PUT | Library | ✅ Complete | -| `/library/sections/{sectionId}/refresh` | DELETE, POST | Library | ✅ Complete | -| `/library/sections/{sectionId}/sorts` | GET | Library | ✅ Complete | -| `/library/sections/{sectionId}/collection/{collectionId}` | DELETE | Library | ✅ Complete | -| `/library/sections/{sectionId}/composite/{updatedAt}` | GET | Library | ✅ Complete | - -### Metadata Items - -| Path | Methods | Tag | Assessment | -|------|---------|-----|------------| -| `/library/metadata/{ids}` | GET, PUT, DELETE | Content / Library | **Partial** — GET has `checkFiles`, `skipRefresh`, `asyncAugmentMetadata` but missing `includeMarkers`, `includeChapters`, `includeExtras`, `includeRelated`, `includeOnDeck`, `includePopularLeaves`, `includeReviews`, `includeStations`, `includeExternalMedia`, `excludeElements`, `excludeFields`; PUT body schema is `args: object` (opaque) | -| `/library/metadata/{ids}/addetect` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/allLeaves` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/analyze` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/chapterThumbs` | POST | Library | ✅ Complete | -| `/library/metadata/{ids}/credits` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/extras` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/file` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/index` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/intro` | GET, PUT | Library | ✅ Complete | -| `/library/metadata/{ids}/marker` | GET, POST | Library | ✅ Complete | -| `/library/metadata/{ids}/match` | PUT | Library | ✅ Complete | -| `/library/metadata/{ids}/matches` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/merge` | PUT | Library | ✅ Complete | -| `/library/metadata/{ids}/nearest` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/prefs` | GET, PUT | Library | ✅ Complete | -| `/library/metadata/{ids}/refresh` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/related` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/similar` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/split` | PUT | Library | ✅ Complete | -| `/library/metadata/{ids}/subtitles` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/tree` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/unmatch` | PUT | Library | ✅ Complete | -| `/library/metadata/{ids}/users/top` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/voiceActivity` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/augmentations/{augmentationId}` | GET | Library | ✅ Complete | -| `/library/metadata/{ids}/media/{mediaItem}` | PUT | Library | ✅ Complete | -| `/library/metadata/{ids}/marker/{marker}` | DELETE, PUT | Library | ✅ Complete | -| `/library/metadata/{ids}/{element}` | POST, PUT | Library | ✅ Complete — supports `thumb`, `art`, `clearLogo`, `banner`, `poster`, `theme` | -| `/library/metadata/{ids}/{element}/{timestamp}` | GET | Library | ✅ Complete | -| `/library/metadata/augmentations/{augmentationId}` | GET, DELETE | Library | ✅ Complete | - -### Media, Parts, Streams, People - -| Path | Methods | Tag | Assessment | -|------|---------|-----|------------| -| `/library/parts/{partId}` | GET, PUT | Library | ✅ Complete | -| `/library/parts/{partId}/indexes/{index}` | GET | Library | ✅ Complete | -| `/library/parts/{partId}/indexes/{index}/{offset}` | GET | Library | ✅ Complete | -| `/library/parts/{partId}/{changestamp}/{filename}` | GET | Library | ✅ Complete | -| `/library/people/{personId}` | GET | Library | ✅ Complete | -| `/library/people/{personId}/media` | GET | Library | ✅ Complete | -| `/library/streams/{streamId}/levels` | GET | Library | ✅ Complete | -| `/library/streams/{streamId}/loudness` | GET | Library | ✅ Complete | -| `/library/streams/{streamId}.{ext}` | GET | Library | ✅ Complete | -| `/library/media/{mediaId}/chapterImages/{chapter}` | GET | Library | ✅ Complete | - -### Collections - -| Path | Methods | Tag | Assessment | -|------|---------|-----|------------| -| `/library/collections/{collectionId}/items` | GET, PUT | Library Collections | ✅ Complete | -| `/library/collections/{collectionId}/items/{itemId}` | DELETE | Library Collections | ✅ Complete | -| `/library/collections/{collectionId}/items/{itemId}/move` | PUT | Library Collections | ✅ Complete | -| `/library/collections/{collectionId}/composite/{updatedAt}` | GET | Library Collections | ✅ Complete | - -### Playlists - -| Path | Methods | Tag | Assessment | -|------|---------|-----|------------| -| `/playlists` | GET, POST | Playlist / Library Playlists | **Partial** — missing `type=42` (optimized/conversion items) query param documentation | -| `/playlists/upload` | POST | Library Playlists | ✅ Complete | -| `/playlists/{playlistId}` | GET, PUT, DELETE | Playlist / Library Playlists | ✅ Complete | -| `/playlists/{playlistId}/generators` | GET | Library Playlists | ✅ Complete | -| `/playlists/{playlistId}/items` | GET, POST, DELETE | Library Playlists | ✅ Complete | -| `/playlists/{playlistId}/items/{generatorId}` | DELETE | Library Playlists | ✅ Complete | -| `/playlists/{playlistId}/items/{generatorId}/items` | GET, POST | Library Playlists | ✅ Complete | -| `/playlists/{playlistId}/items/{playlistItemId}/move` | PUT | Library Playlists | ✅ Complete | -| `/playlists/{playlistId}/items/{generatorId}/{metadataId}/{action}` | PUT | Library Playlists | ✅ Complete | - ---- - -## Missing Endpoints - -### Section Browsing & Filtering (used by official clients) - -| Path | Method | Purpose | Evidence | -|------|--------|---------|----------| -| `/library/sections/{id}/onDeck` | GET | On-deck items for this section | Client traffic / community knowledge | -| `/library/sections/{id}/unwatched` | GET | Unwatched items | Client traffic | -| `/library/sections/{id}/newest` | GET | Newest additions | Client traffic | -| `/library/sections/{id}/byYear` | GET | Browse by year | Client traffic | -| `/library/sections/{id}/byDecade` | GET | Browse by decade | Client traffic | -| `/library/sections/{id}/byContentRating` | GET | Browse by content rating | Client traffic | -| `/library/sections/{id}/byResolution` | GET | Browse by resolution | Client traffic | -| `/library/sections/{id}/byFolder` | GET | Browse by folder | Client traffic | -| `/library/sections/{id}/agents` | GET | Available agents for this section | Client traffic | -| `/library/sections/{id}/match` | GET | Match items in section | Client traffic | -| `/library/sections/{id}/unmatch` | GET | Unmatch items in section | Client traffic | -| `/library/sections/{id}/edit` | GET / PUT | Edit section metadata | Client traffic | -| `/library/sections/{id}/move` | PUT | Move section paths | Client traffic | -| `/library/sections/{id}/settings` | GET | Section-specific settings | Client traffic | -| `/library/sections/{id}/playlists` | GET | Playlists belonging to section | Client traffic | -| `/library/sections/{id}/hubs` | GET | Hubs for this section | Client traffic | -| `/library/sections/{id}/timeline` | GET | Section timeline | Client traffic | -| `/library/sections/{id}/search` | GET | Section-scoped search | Client traffic | -| `/library/sections/{id}/tags` | GET | Tags in section | Client traffic | -| `/library/sections/{id}/artists` | GET | Artists (music) | Client traffic | -| `/library/sections/{id}/shows` | GET | Shows (TV) | Client traffic | -| `/library/sections/{id}/episodes` | GET | Episodes | Client traffic | -| `/library/sections/{id}/movies` | GET | Movies | Client traffic | -| `/library/sections/{id}/clips` | GET | Clips | Client traffic | -| `/library/sections/{id}/photos` | GET | Photos | Client traffic | -| `/library/sections/{id}/recentlyAdded` | GET | Per-library recently added | Tautulli | - -### Global & Hub Recently Added - -| Path | Method | Purpose | Evidence | -|------|--------|---------|----------| -| `/library/recentlyAdded` | GET | Global recently added | Tautulli | -| `/hubs/home/recentlyAdded` | GET | Hub-centric recently added | Tautulli | - -### Metadata Sub-Endpoints - -| Path | Method | Purpose | Evidence | -|------|--------|---------|----------| -| `/library/metadata/{id}/children` | GET | Children of show/season/artist/album | SDK (`key` attribute) | -| `/library/metadata/{id}/onDeck` | GET | On-deck for this show/season | Client traffic | -| `/library/metadata/{id}/reviews` | GET | User reviews | Client traffic | -| `/library/metadata/{id}/parent` | GET | Parent metadata shortcut | Client traffic | -| `/library/metadata/{id}/grandparent` | GET | Grandparent metadata shortcut | Client traffic | -| `/library/metadata/{id}/grandchildren` | GET | Grandchildren (e.g. episodes under show) | Tautulli, python-plexapi | - -### Note on Poster / Art Upload - -The spec documents `/library/metadata/{ids}/{element}` (POST/PUT) with `element` enum including `poster`, `art`, `thumb`, `banner`, `clearLogo`, `theme`. This covers the upload functionality Kometa uses, but **Kometa and other tools call specific paths** (`/library/metadata/{id}/posters`, `/library/metadata/{id}/arts`). The generic endpoint is present, but dedicated path aliases are not explicitly listed. - ---- - -## Schema Corrections - -### `Metadata` Schema - -The `Metadata` schema (`#/components/schemas/Metadata`) is the central type for movies, shows, episodes, tracks, etc. It uses `additionalProperties: true`, which masks missing fields. The following fields are **not documented** but are parsed by `python-plexapi` from XML/JSON responses: - -| Field | Found In | Notes | -|-------|----------|-------| -| `artBlurHash` | `video.py`, `audio.py` | Blur hash for background art | -| `thumbBlurHash` | `video.py`, `audio.py` | Blur hash for thumbnail | -| `lastRatedAt` | `video.py`, `audio.py` | Timestamp of last user rating | -| `editionTitle` | `video.py` (Movie) | Edition string (e.g. "Director's Cut") | -| `languageOverride` | `video.py` (Movie, Show) | Per-item language override | -| `enableCreditsMarkerGeneration` | `video.py` (Movie, Show) | Credits marker flag | -| `useOriginalTitle` | `video.py` (Movie, Show) | Display original title flag | -| `slug` | `video.py` (Movie, Show) | URL-friendly slug | -| `skipCount` | `audio.py` (Track) | Number of times skipped | -| `musicAnalysisVersion` | `audio.py` (Audio base) | Analysis version for music | -| `distance` | `audio.py` (Audio base) | Sonic similarity distance | -| `sourceURI` | `video.py`, `audio.py`, `playlist.py` | Remote/shared server item URI | -| `playlistItemID` | `base.py` (Playable) | Item ID within a playlist | -| `playQueueItemID` | `base.py` (Playable) | Item ID within a play queue | - -**Type-specific gap:** The `Metadata` schema is a flat union. It does **not** distinguish type-specific required/optional fields (e.g. `year` is optional for episodes, `parentIndex` is season number, `grandparentTitle` is show name). Tools must infer field applicability by `type`. - -### `Media` Schema - -| Field | Found In | Notes | -|-------|----------|-------| -| `uuid` | `media.py` | Media instance UUID | -| `selected` | `media.py` | Whether this media version is selected | - -*Note:* `title` is present in spec ✅. - -### `Part` Schema - -| Field | Found In | Notes | -|-------|----------|-------| -| `protocol` | `media.py` | Streaming protocol (e.g. `dash`, `hls`) | -| `packetLength` | `media.py` | RTP packet length | -| `requiredBandwidths` | `media.py` | Bandwidth requirements list | -| `syncItemId` | `media.py` | Mobile sync item association | -| `syncState` | `media.py` | Sync state (e.g. `pending`, `downloaded`) | -| `deepAnalysisVersion` | `media.py` | Deep analysis version | - -*Note:* `decision` is present in `MediaContainerWithDecision` ✅. - -### `Stream` Schema - -The `Stream` schema covers video, audio, and subtitle streams. Many audio-specific loudness and subtitle-specific fields are missing: - -#### AudioStream gaps - -| Field | Notes | -|-------|-------| -| `bitrateMode` | e.g. `cbr`, `vbr` | -| `visualImpaired` | Audio description track flag | -| `albumGain` | ReplayGain album gain | -| `albumPeak` | ReplayGain album peak | -| `albumRange` | ReplayGain album range | -| `endRamp` | Loudness ramp end | -| `gain` | Track replay gain | -| `loudness` | Integrated loudness (LUFS) | -| `lra` | Loudness range | -| `peak` | Track peak | -| `startRamp` | Loudness ramp start | - -#### SubtitleStream gaps - -| Field | Notes | -|-------|-------| -| `providerTitle` | Subtitle provider name | -| `score` | Match confidence score | -| `sourceKey` | Source identifier | -| `transient` | Temporary/downloaded subtitle | -| `userID` | User who added subtitle | -| `perfectMatch` | Exact match flag | - -#### LyricStream gaps - -| Field | Notes | -|-------|-------| -| `minLines` | Minimum lines in lyric file | -| `provider` | Lyric provider | -| `timed` | Whether lyrics are timestamped | - -### `Collection` Schema - -**There is no dedicated `Collection` schema in the spec.** Collections appear to reuse `Metadata` (or are returned inside `MediaContainerWithMetadata`). The following collection-specific fields are missing: - -| Field | Notes | -|-------|-------| -| `collectionFilterBasedOnUser` | Smart-collection user filter | -| `collectionMode` | Display mode (`default`, `hideItems`, `showItems`) | -| `collectionPublished` | Whether published to Plex Discover | -| `collectionSort` | Sort order for collection | -| `artBlurHash` | Blur hash for collection art | -| `thumbBlurHash` | Blur hash for collection thumb | -| `userRating` | User star rating | -| `lastRatedAt` | Rating timestamp | - -### `Playlist` Schema - -Playlists in the spec are defined via `MediaContainerWithPlaylistMetadata`, which extends `Metadata` with a few extra fields. Missing fields: - -| Field | Notes | -|-------|-------| -| `durationInSeconds` | Total duration in seconds (redundant but present in XML) | -| `radio` | Whether this is a generated radio playlist | -| `titleSort` | Sort-friendly title | - -*Note:* `librarySectionID`, `librarySectionKey`, `librarySectionTitle` are present ✅. - ---- - -## Parameter/Query Gaps - -### Missing or Under-Documented on `/library/sections/{sectionId}/all` - -The GET method only documents `includeMeta`, `includeGuids`, `sectionId`, `mediaQuery`, `X-Plex-Container-Start`, `X-Plex-Container-Size`. Widely used but **absent** params: - -| Parameter | Purpose | -|-----------|---------| -| `type` | Filter by metadata type (`1`=movie, `2`=show, `3`=season, `4`=episode, `8`=artist, `9`=album, `10`=track) | -| `sort` | Sort key and direction (e.g. `addedAt:desc`, `titleSort`) | -| `filters` / `unwatched` (`1`) | General filtering | -| `genre`, `studio`, `contentRating`, `resolution`, `year`, `firstCharacter` | Tag-based filters | -| `includeCollections` | Include collection items in results | -| `includeExternalMedia` | Include external/online media | -| `includeAdvanced` | Include advanced settings | -| `checkFiles` | Verify file existence | -| `includeRelated` | Include related items | -| `includeExtras` | Include trailers, behind-the-scenes, etc. | -| `includePopularLeaves` | Include popular episodes | -| `includeConcerts` | Include concert items | -| `includeOnDeck` | Include On Deck status | -| `includeChapters` | Include chapter markers | -| `includePreferences` | Include user preferences | -| `includeBandwidths` | Include bandwidth info | -| `includeLoudnessRamps` | Include loudness ramp data | -| `includeStations` | Include radio station data | -| `includeExternalIds` | Include external GUIDs | -| `includeReviews` | Include user reviews | -| `includeCredits` | Include full credits | -| `includeArt`, `includeThumb`, `includeBanner`, `includeTheme` | Force inclusion of artwork fields | -| `includeFields` | Whitelist of fields to return | -| `asyncAugmentMetadata` | Async metadata augmentation | -| `asyncRefreshLocalMediaAgent` | Async local media agent refresh | -| `nocache` | Bypass cache | -| `excludeFields` | Blacklist of fields to omit | -| `skipRefresh` | Skip synchronous refresh | - -### Missing on `/library/metadata/{ids}` - -| Parameter | Purpose | Notes | -|-----------|---------|-------| -| `includeMarkers` | Intro/credits markers | Critical for Tautulli and skip-intro clients | -| `includeChapters` | Chapter data | Missing from spec GET params | -| `includeExternalMedia` | External media | Missing | -| `includeExtras` | Extras/trailers | Missing | -| `includeRelated` | Related items | Missing | -| `includeOnDeck` | On Deck status | Missing | -| `includePopularLeaves` | Popular episodes | Missing | -| `includeReviews` | User reviews | Missing | -| `includeStations` | Radio stations | Missing | -| `includeGuids` | External GUIDs | Only documented on `/library/sections/{id}/all` | -| `excludeElements` | Omit elements | Mentioned only in history endpoint description | -| `excludeFields` | Omit fields | Mentioned only in history endpoint description | - -### Other Parameter Gaps - -| Parameter | Where It Should Be | Notes | -|-----------|-------------------|-------| -| `type=42` | `/playlists` | Optimized/conversion items (python-plexapi `optimizedItems()`, `conversions()`) | -| `includeCollections=1` | `/hubs/search` | Tautulli uses this for collection-in-search | -| `playlistType` | `/playlists` | Present ✅ | -| `sectionID` | `/playlists` | Present ✅ | -| `asyncAugmentMetadata=1` | `/library/metadata/{ids}` | Present on GET ✅ (query param `asyncAugmentMetadata`) | - ---- - -## Documentation Improvements - -1. **Dedicate a `Collection` schema.** Collections are not vanilla `Metadata` items. They carry `collectionMode`, `collectionSort`, `collectionPublished`, `collectionFilterBasedOnUser`, and blur hashes. Reusing `Metadata` with `additionalProperties: true` hides these fields from generated SDKs. - -2. **Add `Playlist` schema fields.** `durationInSeconds`, `radio`, and `titleSort` are real XML attributes that python-plexapi relies on. - -3. **Document blur hashes and loudness fields.** These are XML-first fields (`artBlurHash`, `thumbBlurHash`, `loudness`, `gain`, `albumGain`, etc.) that do not always appear in JSON unless requested. The spec should note XML vs JSON behavior. - -4. **Expand `/library/sections/{id}/all` query parameters.** This is one of the most trafficked endpoints. Missing `type`, `sort`, tag filters, and the include/exclude matrix forces SDK users to hand-craft query strings. - -5. **Document `includeMarkers=1` on metadata endpoints.** Intro/credits skip detection is a first-class feature in modern Plex. Tautulli and many clients depend on this parameter. - -6. **Add missing section sub-endpoints.** `/onDeck`, `/unwatched`, `/newest`, `/byYear`, `/byDecade`, `/byContentRating`, `/byResolution`, `/byFolder`, `/recentlyAdded` are all used by official Plex clients and are well-known in the community. - -7. **Add global `/library/recentlyAdded` and `/hubs/home/recentlyAdded`.** These are standard "what's new" endpoints used by Tautulli and dashboards. - -8. **Add `/library/metadata/{id}/children`, `/parent`, `/grandparent`, `/grandchildren`.** These hierarchy shortcuts prevent excessive round-trips for show→season→episode traversal. - -9. **Clarify `PUT /library/metadata/{ids}` body schema.** The current spec uses `args: object`, which is opaque. Document editable fields (title, summary, tag locks, etc.). - -10. **Document `sourceURI` behavior.** Cross-server playlist/collection items use `sourceURI` pointing to other servers. This multi-server awareness pattern is not described. - -11. **Add missing `Stream` fields.** Audio loudness (`lra`, `peak`, `gain`, `startRamp`, `endRamp`), subtitle metadata (`providerTitle`, `score`, `perfectMatch`), and lyric metadata (`minLines`, `provider`, `timed`) should be added. - -12. **Add missing `Part` fields.** `protocol`, `packetLength`, `requiredBandwidths`, `syncItemId`, `syncState`, `deepAnalysisVersion` are needed for sync and transcode clients. - -13. **Add missing `Media` fields.** `uuid` and `selected` are present in real responses. - -14. **Document the `_INCLUDES` / `_EXCLUDES` pattern.** python-plexapi's `PlexPartialObject.reload()` uses a matrix of include/exclude parameters. A reusable parameter component (e.g. `#/components/parameters/includeExcludeMatrix`) would keep the spec DRY. diff --git a/review/domain_livetv_dvr_review.md b/review/domain_livetv_dvr_review.md deleted file mode 100644 index c34044bb6..000000000 --- a/review/domain_livetv_dvr_review.md +++ /dev/null @@ -1,256 +0,0 @@ -# Live TV & DVR Domain Review - -**Date:** 2026-06-03 -**Spec File:** `plex-api-spec.yaml` -**Domain:** Live TV & DVR (Tags: DVRs, Devices, EPG, Subscriptions, Live TV) -**Paths Reviewed:** `/livetv/*`, `/media/subscriptions/*`, `/media/grabbers/*` - ---- - -## Endpoints Present in Spec - -### DVRs (`/livetv/dvrs`) - -| Path | Methods | Tags | Notes | -|------|---------|------|-------| -| `/livetv/dvrs` | GET, POST | DVRs | `POST` requires `admin` scope | -| `/livetv/dvrs/{dvrId}` | GET, DELETE | DVRs | `DELETE` requires `admin` scope | -| `/livetv/dvrs/{dvrId}/lineups` | PUT, DELETE | DVRs | Both require `admin` scope | -| `/livetv/dvrs/{dvrId}/prefs` | PUT | DVRs | Requires `admin` scope | -| `/livetv/dvrs/{dvrId}/reloadGuide` | POST, DELETE | DVRs | Both require `admin` scope | -| `/livetv/dvrs/{dvrId}/channels/{channel}/tune` | POST | DVRs | Tunes a channel | -| `/livetv/dvrs/{dvrId}/devices/{deviceId}` | PUT, DELETE | DVRs | Add/remove device from DVR | - -### EPG (`/livetv/epg`) - -| Path | Methods | Tags | Notes | -|------|---------|------|-------| -| `/livetv/epg/channelmap` | GET | EPG | Compute best channel map | -| `/livetv/epg/channels` | GET | EPG | Get channels for a lineup | -| `/livetv/epg/countries` | GET | EPG | List countries with EPG data | -| `/livetv/epg/languages` | GET | EPG | List available languages | -| `/livetv/epg/lineup` | GET | EPG | Compute best lineup | -| `/livetv/epg/lineupchannels` | GET | EPG | Get channels across multiple lineups | -| `/livetv/epg/countries/{country}/{epgId}/lineups` | GET | EPG | Lineups by postal code | -| `/livetv/epg/countries/{country}/{epgId}/regions` | GET | EPG | Regions for a country | -| `/livetv/epg/countries/{country}/{epgId}/regions/{region}/lineups` | GET | EPG | Lineups for a region | - -### Live TV Sessions (`/livetv/sessions`) - -| Path | Methods | Tags | Notes | -|------|---------|------|-------| -| `/livetv/sessions` | GET | Live TV | List all sessions | -| `/livetv/sessions/{sessionId}` | GET | Live TV | Get single session metadata | -| `/livetv/sessions/{sessionId}/{consumerId}/index.m3u8` | GET | Live TV | HLS playlist index | -| `/livetv/sessions/{sessionId}/{consumerId}/{segmentId}` | GET | Live TV | HLS segment delivery | - -### Subscriptions (`/media/subscriptions`) - -| Path | Methods | Tags | Notes | -|------|---------|------|-------| -| `/media/subscriptions` | GET, POST | Subscriptions | `includeGrabs`, `includeStorage` query params | -| `/media/subscriptions/process` | POST | Subscriptions | Process all subscriptions async | -| `/media/subscriptions/scheduled` | GET | Subscriptions | Scheduled recordings across all subs | -| `/media/subscriptions/template` | GET | Subscriptions | Get subscription template for a GUID | -| `/media/subscriptions/{subscriptionId}` | GET, PUT, DELETE | Subscriptions | Single subscription CRUD | -| `/media/subscriptions/{subscriptionId}/move` | PUT | Subscriptions | Re-order subscription priority | - -### Grabbers / Devices (`/media/grabbers`) - -| Path | Methods | Tags | Notes | -|------|---------|------|-------| -| `/media/grabbers` | GET | Devices | `protocol` filter (e.g. `livetv`) | -| `/media/grabbers/devices` | GET, POST | Devices | List/add devices | -| `/media/grabbers/devices/discover` | POST | Devices | Trigger device discovery | -| `/media/grabbers/devices/{deviceId}` | GET, DELETE | Devices | Get/remove device | -| `/media/grabbers/devices/{deviceId}/channelmap` | PUT | Devices | Set channel mapping | -| `/media/grabbers/devices/{deviceId}/channels` | GET | Devices | Get device channels | -| `/media/grabbers/devices/{deviceId}/prefs` | PUT | Devices | Set device preferences | -| `/media/grabbers/devices/{deviceId}/scan` | POST, DELETE | Devices | Start/stop channel scan | -| `/media/grabbers/devices/{deviceId}/thumb/{version}` | GET | Devices | Device thumbnail | -| `/media/grabbers/operations/{operationId}` | DELETE | Subscriptions | Cancel an active grab/recording | - -### Cross-cutting Observations - -- **Plex Pass / admin requirement:** Most write operations require `admin` token scope. Read operations on subscriptions and scheduled recordings return `403` with "User cannot access DVR on this server" when the user lacks DVR privileges. -- **Client info headers:** Every endpoint repeats the full set of `X-Plex-*` client identifier headers. This is consistent with the rest of the spec but verbose. - ---- - -## Missing Endpoints - -### 1. Create / Start a Live TV Session - -The spec documents `GET /livetv/sessions` and `GET /livetv/sessions/{sessionId}`, but there is **no endpoint to create or start a Live TV session**. In practice, sessions are typically initiated through the transcoder (`/video/:/transcode/universal/start.m3u8`) with a `channel` URI, but a dedicated session-creation endpoint or documentation of the flow is absent. - -### 2. Update a DVR - -There is no `PUT` or `PATCH` for `/livetv/dvrs/{dvrId}`. The only mutable DVR fields exposed are via `PUT /livetv/dvrs/{dvrId}/prefs` (generic preference key/value). There is no way to change the DVR's `language`, `lineup`, or associated devices in a single structured update. - -### 3. List Channels for a Specific DVR - -While `/livetv/epg/channels` exists (lineup-scoped), there is no `/livetv/dvrs/{dvrId}/channels` to list channels directly associated with a DVR. The only DVR-scoped channel operation is `POST .../tune`. - -### 4. Get Program Guide for a DVR - -There is no endpoint to fetch the actual program guide / schedule for a DVR or lineup (e.g., `/livetv/dvrs/{dvrId}/guide` or `/livetv/epg/guide`). The `reloadGuide` endpoints only trigger a background refresh. - -### 5. Stop / Terminate a Live TV Session - -The spec has no `DELETE` for `/livetv/sessions/{sessionId}`. Sessions appear to be read-only and segment-retrievable, but there is no documented way to tear one down. - -### 6. Get DVR Recordings Directly - -There is no DVR-centric path for listing completed recordings (e.g., `/livetv/dvrs/{dvrId}/recordings` or `/livetv/recordings`). Recordings are only accessible indirectly through subscription grabs or the generic `/library` metadata endpoints. - -### 7. EPG Search / Program Lookup - -No endpoint exists to search the EPG for upcoming airings by title, time range, or channel (e.g., `/livetv/epg/search`). This is a common client operation when setting up recording rules. - ---- - -## Schema Corrections - -### 1. Inline DVR Schema Duplication - -The `DVR` object schema is duplicated inline across **at least 7 endpoints** (`/livetv/dvrs` GET, POST, `/livetv/dvrs/{dvrId}` GET, `/livetv/dvrs/{dvrId}/lineups` PUT/DELETE, `/livetv/dvrs/{dvrId}/prefs` PUT, `/livetv/dvrs/{dvrId}/devices/{deviceId}` PUT/DELETE). It should be extracted to a reusable `#/components/schemas/DVR` component. - -### 2. `MediaContainerWithDevice` Duplicates `Device` Schema - -`MediaContainerWithDevice` (line 14931) embeds the full `Device` property set inline instead of referencing `#/components/schemas/Device`. This creates maintenance risk if `Device` is updated. - -### 3. `DeviceChannel` Not a Reusable Component - -The `DeviceChannel` schema (used in `/media/grabbers/devices/{deviceId}/channels` response, line 9832) is defined inline. It has useful fields (`drm`, `favorite`, `hd`, `signalQuality`, `signalStrength`) that are **missing** from the main `Channel` schema. Consider: -- Extracting `DeviceChannel` to a component, or -- Merging these fields into the main `Channel` schema and reusing it. - -### 4. `Channel` Schema Missing EPG Fields - -The `Channel` schema (line 14401) only has: `title`, `callSign`, `channelVcn`, `hd`, `identifier`, `key`, `language`, `thumb`. It lacks: -- `favorite` -- `drm` -- `signalQuality` -- `signalStrength` - -These fields are present in real-world EPG responses and in the inline `DeviceChannel` schema. - -### 5. `MediaSubscription` Hint Schemas Are Opaque - -`MediaSubscription` (line 15159) declares `Directory`, `Playlist`, and `Video` as: -```yaml -description: Media Matching Hints -additionalProperties: true -``` -These are essentially untyped. At minimum, they should document the known hint keys (e.g., `ratingKey`, `title`, `guid`) that clients and the template endpoint rely on. - -### 6. `MediaGrabOperation` Description Typo - -Line 15125: `A media grab opration represents...` → should be `operation`. - -### 7. `MediaContainerWithMetadata` for Sessions Is Too Generic - -`/livetv/sessions/{sessionId}` returns `MediaContainerWithMetadata`. A session container may include session-specific fields (e.g., `sessionKey`, `sessionId`, `channel`, `dvrId`, `consumerId`) that are not present in the generic `Metadata` schema. A dedicated `MediaContainerWithLiveTVSession` schema should be considered. - -### 8. `Lineup` Schema Missing `key` / `identifier` - -The `Lineup` schema (line 14685) has `title`, `type`, `lineupType`, `location`, `uuid`. It does not include `key` or `identifier`, which are commonly returned when listing lineups. - ---- - -## Parameter / Query Gaps - -### 1. `/livetv/dvrs` GET — No Filter Params - -The list-DVRs endpoint accepts no query parameters. In practice, clients may want to filter by `uuid` or `lineup` when managing multiple DVRs. - -### 2. `/livetv/sessions` GET — No Filter Params - -No filtering by `dvrId`, `channel`, or active state. For servers with many concurrent Live TV viewers, this makes client-side filtering mandatory. - -### 3. `/media/subscriptions` GET — Missing Pagination Headers as Request Params - -While `X-Plex-Container-Start` and `X-Plex-Container-Size` are documented as **response headers**, they are not listed as **request parameters** on this endpoint (or most others in the domain). The spec should be consistent about whether these are accepted as request headers/query params for pagination. - -### 4. `/media/subscriptions/template` — Missing `type` Param - -The template endpoint only documents `guid`. In practice, the type of subscription (show, season, episode, movie) likely influences the template response. A `type` or `targetLibrarySectionID` query param may be required. - -### 5. `/media/grabbers/devices/discover` — No Grabber Filter - -The discover endpoint takes no parameters. Clients may want to target discovery to a specific `protocol` (e.g., `livetv`) or `grabberIdentifier` to avoid unnecessary network traffic. - -### 6. POST `/livetv/dvrs` — `device` Array Format Ambiguity - -The `device` parameter is declared as: -```yaml -schema: - type: array - items: - type: string -``` -The example shows `device[]=device://tv.plex.grabbers.hdhomerun/1053C0CA`, but the spec does not declare `style: form` / `explode: true`, which may cause code generators to produce incorrect query serialization. - -### 7. `/livetv/dvrs/{dvrId}/prefs` — Single `name` Param - -The endpoint description says "Set DVR preferences by name and value", but only a `name` parameter is documented. There is no `value` parameter. This suggests the parameter documentation is incomplete or the API expects `name` to contain a composite `key=value` string, which should be clarified. - -### 8. `/media/grabbers/devices/{deviceId}/prefs` — Same Issue - -Only `name` is documented; no `value` parameter is present despite the summary saying "Set device preferences by its id". - ---- - -## Documentation Improvements - -### 1. Typos & Copy-Paste Errors - -| Location | Issue | Correction | -|----------|-------|------------| -| `POST /livetv/dvrs` description | "after creation of a **devcie**" | "device" | -| `PUT /livetv/dvrs/{dvrId}/lineups` summary | "Add a DVR Lineup" ✅, but description says "The lineup to **delete**" | "The lineup to add" | -| `PUT /livetv/dvrs/{dvrId}/prefs` description | "by name **avd** value" | "and" | -| `GET /livetv/epg/lineupchannels` summary | "Get the channels for **mulitple** lineups" | "multiple" | -| `MediaGrabOperation` description | "media grab **opration**" | "operation" | - -### 2. Live TV Session Lifecycle Is Undocumented - -The spec documents how to **list** sessions and **retrieve HLS segments**, but does not explain: -- How sessions are created (transcoder start? tune endpoint?) -- What `sessionId` and `consumerId` represent -- How sessions expire or are terminated -- The expected content type of segments (only `application/vnd.apple.mpegurl` is documented for the index; the segment endpoint has no content-type) - -### 3. `reloadGuide` Response Should Be JSON - -`POST /livetv/dvrs/{dvrId}/reloadGuide` returns `text/html` with an `X-Plex-Activity` header. If the response body is actually empty or contains a status object, it should be documented as JSON. If it truly returns HTML, that should be noted as a known quirk. - -### 4. Tune Endpoint Response Schema - -`POST /livetv/dvrs/{dvrId}/channels/{channel}/tune` returns `MediaContainerWithMetadata`. The documentation should clarify what metadata is returned (e.g., the tuned channel's `Metadata` object, or a transcode decision). - -### 5. Missing Error Response Documentation - -Many endpoints only document `200` and sometimes `404`. Common errors like: -- `400` for invalid lineup / device URIs -- `403` for non-admin users -- `409` for duplicate subscriptions (only documented on `POST /media/subscriptions`) -- `500` for tuning failures (only on `/tune`) - -...should be added consistently across the domain. - -### 6. Plex Pass Requirement Should Be Explicit - -The tag descriptions for DVRs and Subscriptions do not mention that these features require an active Plex Pass subscription and a compatible tuner device. Adding a note to the tag description would help API consumers understand why they receive `403` responses. - -### 7. `Channel` Path Parameter on `/tune` - -The `channel` path parameter on `/livetv/dvrs/{dvrId}/channels/{channel}/tune` has example `2.1` and type `string`. The description should clarify whether this is a `channelVcn`, a `channelKey`, or a `callSign`. - -### 8. `lineupchannels` Response Headers Missing - -`GET /livetv/epg/lineupchannels` returns `200` with a JSON body but does not document `X-Plex-Container-Start` / `X-Plex-Container-Total-Size` headers, even though it returns an array of channels. - ---- - -*End of review.* diff --git a/review/domain_media_provider_review.md b/review/domain_media_provider_review.md deleted file mode 100644 index 6a0a11f03..000000000 --- a/review/domain_media_provider_review.md +++ /dev/null @@ -1,250 +0,0 @@ -# Media Provider & Content Domain Review - -**Date:** 2026-06-03 -**Scope:** Tags `Provider`, `Content`, `Hubs`, `Search`, `Rate`, `Playlist` (partial) and paths `/media/providers/*`, `/hubs/*`, `/media/providers/refresh`, `/media/subscriptions/*`, `/playlists/*`. -**Sources:** `plex-api-spec.yaml`, `python_plexapi_gap_analysis.md`, `integration_ecosystem_gaps.md`, `undocumented_endpoints_research.md`. - ---- - -## Endpoints Present in Spec - -### Provider - -| Method | Path | Summary | Notes | -|--------|------|---------|-------| -| `GET` | `/media/providers` | List providers | Response schema inherits from `ServerConfiguration` | -| `POST` | `/media/providers` | Add a provider | Only `url` query param documented | -| `POST` | `/media/providers/refresh` | Refresh providers | — | -| `DELETE`| `/media/providers/{provider}` | Delete a provider | — | - -### Content (selected representative endpoints) - -| Method | Path | Summary | -|--------|------|---------| -| `GET` | `/library/metadata/{ratingKey}` | Get metadata item(s) | -| `DELETE`| `/library/metadata/{ratingKey}` | Delete metadata item(s) | -| `GET` | `/library/sections/{sectionId}/all` | List section items | -| `GET` | `/library/sections/{sectionId}/allLeaves` | All leaves | -| `GET` | `/library/sections/{sectionId}/albums` | Music albums | -| `GET` | `/library/sections/{sectionId}/categories` | Categories | -| `GET` | `/library/sections/{sectionId}/cluster` | Clusters (photos) | -| `GET` | `/library/sections/{sectionId}/computePath` | Sonic path | -| `GET` | `/library/sections/{sectionId}/nearest` | Sonically similar tracks | -| `GET` | `/library/sections/{sectionId}/location` | Folder locations | -| `GET` | `/library/sections/{sectionId}/moment` | Moments (photos) | -| `GET` | `/library/collections/{collectionId}/items` | Collection items | -| `GET` | `/library/collections/{collectionId}/composite/{updatedAt}` | Collection image | - -### Hubs - -| Method | Path | Summary | -|--------|------|---------| -| `GET` | `/hubs` | Global hubs | -| `GET` | `/hubs/continueWatching` | Continue watching hub | -| `GET` | `/hubs/items` | Items for a specific hub (by `identifier`) | -| `GET` | `/hubs/promoted` | Promoted hubs | -| `GET` | `/hubs/search` | Search across libraries (hub results) | -| `GET` | `/hubs/search/voice` | Voice search | -| `GET` | `/hubs/metadata/{metadataId}` | Hubs for a metadata item (music) | -| `GET` | `/hubs/metadata/{metadataId}/postplay` | Post-play hubs | -| `GET` | `/hubs/metadata/{metadataId}/related` | Related hubs | -| `GET` | `/hubs/sections/{sectionId}` | Section hubs | -| `GET` | `/hubs/sections/{sectionId}/manage` | List built-in & custom hubs | -| `DELETE`| `/hubs/sections/{sectionId}/manage` | Reset hubs to defaults | -| `PUT` | `/hubs/sections/{sectionId}/manage/move` | Re-order a hub | -| `PUT` | `/hubs/sections/{sectionId}/manage/{identifier}` | Update hub visibility | - -### Search - -| Method | Path | Summary | -|--------|------|---------| -| `GET` | `/hubs/search` | Standard search | -| `GET` | `/hubs/search/voice` | Voice search | - -### Rate - -| Method | Path | Summary | -|--------|------|---------| -| `PUT` | `/:/rate` | Rate an item (`identifier`, `key`, `rating`, `ratedAt`) | - -### Playlist - -| Method | Path | Summary | -|--------|------|---------| -| `GET` | `/playlists` | List playlists | -| `POST` | `/playlists` | Create playlist | -| `POST` | `/playlists/upload` | Import m3u playlist | -| `GET` | `/playlists/{playlistId}` | Retrieve playlist | -| `PUT` | `/playlists/{playlistId}` | Edit playlist metadata | -| `DELETE`| `/playlists/{playlistId}` | Delete playlist | -| `GET` | `/playlists/{playlistId}/generators` | List generators | -| `GET` | `/playlists/{playlistId}/items` | List items | -| `DELETE`| `/playlists/{playlistId}/items` | Clear playlist | -| `PUT` | `/playlists/{playlistId}/items` | Add items | -| `PUT` | `/playlists/{playlistId}/items/{generatorId}/items` | Add generator items | -| `PUT` | `/playlists/{playlistId}/items/{playlistItemId}/move` | Move item | -| `PUT` | `/playlists/{playlistId}/items/{generatorId}/{metadataId}/{action}` | Generator actions | - ---- - -## Missing Endpoints (including cloud providers) - -### Cloud / External Providers - -These are used by official clients and major integrations (Overseerr, Jellyseerr, Tautulli, python-plexapi) but are **absent** from the spec. - -| Provider Host | Missing Paths | Purpose | -|---------------|---------------|---------| -| `discover.provider.plex.tv` | `GET /library/search` | Discover search (movies & shows) | -| `discover.provider.plex.tv` | `GET /library/sections/watchlist/all` | Plex Discover watchlist | -| `discover.provider.plex.tv` | `POST /actions/addToWatchlist` | Add to watchlist | -| `discover.provider.plex.tv` | `POST /actions/removeFromWatchlist` | Remove from watchlist | -| `metadata.provider.plex.tv` *(deprecated)* | `GET /library/sections/watchlist/all` | Legacy watchlist | -| `metadata.provider.plex.tv` *(deprecated)* | `POST /actions/addToWatchlist` | Legacy add | -| `metadata.provider.plex.tv` *(deprecated)* | `POST /actions/removeFromWatchlist` | Legacy remove | -| `vod.provider.plex.tv` | `GET /hubs` | VOD hub items | -| `music.provider.plex.tv` | `GET /hubs` | Tidal / music hub items | - -> **Note:** `metadata.provider.plex.tv` was deprecated in late 2025 in favor of `discover.provider.plex.tv`. The spec should document the current endpoints and include a deprecation notice for the old host. - -### Hub Endpoints - -| Missing Path | Method | Used By | Why It Matters | -|--------------|--------|---------|----------------| -| `/hubs/home/recentlyAdded` | `GET` | Tautulli, official clients | Global recently-added hub view | -| `/hubs/continueWatching/items` | `GET` | python-plexapi (`PlexServer.continueWatching()`) | Direct access to CW items without wrapping in a hub container | - -### Provider Proxy Endpoints - -The spec only documents `DELETE /media/providers/{provider}`. No proxy paths for the individual provider features are defined. In practice, PMS reverse-proxies the following feature paths for each registered provider: - -- `/{provider}/search` -- `/{provider}/metadata` -- `/{provider}/content` -- `/{provider}/match` -- `/{provider}/manage` -- `/{provider}/timeline` -- `/{provider}/rate` -- `/{provider}/playqueue` -- `/{provider}/playlist` -- `/{provider}/subscribe` -- `/{provider}/promoted` -- `/{provider}/continuewatching` -- `/{provider}/collection` -- `/{provider}/actions` -- `/{provider}/imagetranscoder` -- `/{provider}/queryParser` -- `/{provider}/grid` - -These should at minimum be referenced in the `Provider` tag description or documented as dynamic paths. - ---- - -## Schema Corrections - -### `/media/providers` Response Schema - -The `GET /media/providers` response uses: - -```yaml -allOf: - - $ref: '#/components/schemas/ServerConfiguration' - - properties: - Feature: ... - identifier: ... - protocols: ... - title: ... - types: ... -``` - -**Issues:** - -1. **Wrong base schema.** `ServerConfiguration` is server-global (includes `machineIdentifier`, `version`, `transcoderActiveVideoSessions`, etc.). A provider list should likely extend `MediaContainer` or a dedicated `ProviderContainer`. -2. **Underspecified `Feature` array.** Each `Feature` contains a `Directory[]` referencing the generic `Directory` schema. The spec does not enumerate the well-known feature types (`search`, `metadata`, `content`, `match`, `manage`, `timeline`, `rate`, `playqueue`, `playlist`, `subscribe`, `promoted`, `continuewatching`, `collection`, `actions`, `imagetranscoder`, `queryParser`, `grid`). -3. **Missing provider-level fields.** Real-world responses include additional fields (e.g., `icon`, `hubKey`, `featureKey`) that are not documented. - -**Recommendation:** Create a `Provider` schema and a `ProviderFeature` schema that explicitly documents the known feature keys and their directory structures. - -### `Hub` Schema - -The `Hub` schema (`components/schemas/Hub`) is reasonably complete for the fields it documents (`hubIdentifier`, `key`, `Metadata`, `more`, `promoted`, `random`, `size`, `style`, `subtype`, `totalSize`). However: - -- It sets `additionalProperties: true`, which masks the fact that several fields observed in client traffic (e.g., `context`, `hubKey`, `reason`, `reasonTitle`, `reasonID`) are not formally described. -- The `Metadata` items reference the base `Metadata` schema, which is missing fields commonly returned in hub contexts (see below). - -### `Metadata` / Content Schema Gaps (hub-relevant) - -Per `python_plexapi_gap_analysis.md`, the `Metadata` schema is missing fields that appear in XML/JSON hub and search responses: - -- `artBlurHash`, `thumbBlurHash` -- `lastRatedAt` -- `editionTitle`, `languageOverride`, `enableCreditsMarkerGeneration`, `useOriginalTitle`, `slug` -- `sourceURI` -- `playlistItemID`, `playQueueItemID` - -### `Playlist` Schema Gaps - -- `durationInSeconds`, `radio`, `titleSort` are missing from the playlist metadata schema. - ---- - -## Parameter/Query Gaps - -### Search Parameters - -| Endpoint | Missing / Under-documented Parameter | Impact | -|----------|--------------------------------------|--------| -| `GET /hubs/search` | `includeCollections` (boolean) | Tautulli and other clients use this to include collection results in search hubs. **Not documented.** | -| `GET /hubs/search` | Query syntax details | No documentation on field filters (e.g., `title:`, `actor:`), partial-match behavior, or spell-check heuristics. | -| `GET /hubs/search/voice` | `includeCollections` | Same gap as standard search. | - -### Hub Pagination - -- `X-Plex-Container-Start` and `X-Plex-Container-Size` are documented as **response headers** on hub endpoints, but they are also sent by clients as **request headers** (or query parameters) for pagination. The spec should clarify that these may be used as request headers. - -### Rate Endpoint - -| Endpoint | Gap | -|----------|-----| -| `PUT /:/rate` | No `DELETE` method documented. In Plex, sending `rating=0` effectively removes the rating, but this is not described. | -| `PUT /:/rate` | `rating` is typed as `number` (0–10). It should note that fractional values (e.g., `8.5`) are accepted for star ratings. | - -### Provider Endpoints - -- `POST /media/providers` only documents `url`. Other query parameters that may be accepted (e.g., `identifier`, `title`, `protocols`) are not listed. - ---- - -## Documentation Improvements - -1. **Provider Response Features** - - Document the `Feature` directory types in `/media/providers` responses. Provide an enum or descriptive list for the known feature keys (`search`, `metadata`, `content`, `match`, `manage`, `timeline`, `rate`, `playqueue`, `playlist`, `subscribe`, `promoted`, `continuewatching`, `collection`, `actions`, `imagetranscoder`, `queryParser`, `grid`). - -2. **Cloud Provider Deprecation & Migration** - - Add a deprecation note for `metadata.provider.plex.tv` and document the canonical `discover.provider.plex.tv` endpoints (search, watchlist, add/remove actions). - - Document `vod.provider.plex.tv` and `music.provider.plex.tv` base paths at a high level so SDK generators know these hosts exist. - -3. **Search Query Syntax** - - Expand the `/hubs/search` and `/hubs/search/voice` operation descriptions to explain: - - How query strings are tokenized. - - That partial matches and spell-check are applied. - - The effect of `includeCollections=1`. - - The meaning of `reason`, `reasonTitle`, and `reasonID` in search results. - -4. **Pagination Clarification** - - Add a note to all `Hub` and `Playlist` endpoints that pagination can be driven by sending `X-Plex-Container-Start` and `X-Plex-Container-Size` as **request headers** (in addition to documenting them as response headers). - -5. **Rate Endpoint Semantics** - - Clarify that `rating=0` clears the user rating. - - Mention that the endpoint also responds to `GET` but `PUT` is the preferred verb. - -6. **Missing Hub Endpoints** - - Add `/hubs/home/recentlyAdded` and `/hubs/continueWatching/items` to the Hubs tag. - -7. **Schema Field Additions** - - Add missing `Metadata` fields (`artBlurHash`, `thumbBlurHash`, `lastRatedAt`, `sourceURI`, etc.) where they are known to appear in hub and search responses. - - Add missing `Playlist` fields (`durationInSeconds`, `radio`, `titleSort`). - ---- - -*End of review.* diff --git a/review/domain_playback_sessions_review.md b/review/domain_playback_sessions_review.md deleted file mode 100644 index 98587c071..000000000 --- a/review/domain_playback_sessions_review.md +++ /dev/null @@ -1,208 +0,0 @@ -# Playback & Sessions Domain Review - -**Date:** 2026-06-03 -**Spec file:** `plex-api-spec.yaml` (≈17 k lines) -**Review scope:** Tags `Status`, `Timeline`, `Play Queue`, `Transcoder`; paths `/status/sessions/*`, `/:/timeline`, `/:/scrobble`, `/:/unscrobble`, `/playQueues/*`, `/{transcodeType}/:/transcode/universal/*`, `/photo/:/transcode`. - ---- - -## Endpoints Present in Spec - -| Path | Method | Tag | Notes | -|------|--------|-----|-------| -| `POST /playQueues` | POST | Play Queue | Creates a queue. Inline response schema contains play-queue fields. | -| `GET /playQueues/{playQueueId}` | GET | Play Queue | Retrieves a queue window. | -| `PUT /playQueues/{playQueueId}` | PUT | Play Queue | Add generator / playlist to queue. | -| `DELETE /playQueues/{playQueueId}/items` | DELETE | Play Queue | Clear all items. | -| `PUT /playQueues/{playQueueId}/reset` | PUT | Play Queue | Reset to first item. | -| `PUT /playQueues/{playQueueId}/shuffle` | PUT | Play Queue | Shuffle (no Up Next). | -| `PUT /playQueues/{playQueueId}/unshuffle` | PUT | Play Queue | Restore natural order. | -| `DELETE /playQueues/{playQueueId}/items/{playQueueItemId}` | DELETE | Play Queue | Delete single item. | -| `PUT /playQueues/{playQueueId}/items/{playQueueItemId}/move` | PUT | Play Queue | Move item after another. | -| `GET /status/sessions` | GET | Status | Lists active sessions (admin only). | -| `GET /status/sessions/background` | GET | Status | Lists background transcode jobs. | -| `GET /status/sessions/history/all` | GET | Status | Lists playback history. | -| `GET /status/sessions/history/{historyId}` | GET | Status | Get single history item. | -| `DELETE /status/sessions/history/{historyId}` | DELETE | Status | Delete single history item. | -| `POST /status/sessions/terminate` | POST | Status | Kill a session by ID. | -| `POST /:/timeline` | POST | Timeline | **Only POST is documented.** Report playback state / progress. | -| `PUT /:/scrobble` | PUT | Timeline | Mark item as played (no view history created). | -| `PUT /:/unscrobble` | PUT | Timeline | Mark item as unplayed. | -| `GET /photo/:/transcode` | GET | Transcoder | Image resize/format transcode. | -| `GET /{transcodeType}/:/transcode/universal/decision` | GET | Transcoder | Playback decision (MDE). | -| `POST /{transcodeType}/:/transcode/universal/fallback` | POST | Transcoder | Force transcoder fallback. | -| `GET /{transcodeType}/:/transcode/universal/subtitles` | GET | Transcoder | Subtitle-only transcode. | -| `GET /{transcodeType}/:/transcode/universal/start.{extension}` | GET | Transcoder | Start session (`m3u8` or `mpd`). | -| `GET /:/websocket/notifications` | GET | Events | **Singular** `websocket` path. Returns binary stream. | - -**Observations** -- `/:/timeline` is documented as **POST only**. There is no `GET /:/timeline` in the spec. Client timeline polling is done via `/player/timeline/poll` (missing). -- `/:/scrobble` and `/:/unscrobble` are documented as **PUT only**, with a note that they respond to GET but should not be used. -- `/playQueues/{playQueueId}` (GET) and most play-queue mutators reuse response reference `#/components/responses/slash-post-responses-200`, which resolves to `MediaContainerWithPlaylistMetadata`. That schema is playlist-centric and does **not** contain play-queue top-level fields (`playQueueID`, `playQueueSelectedItemID`, etc.). - ---- - -## Missing Endpoints - -### WebSocket / Real-Time Events -| Missing Path | Why it matters | -|--------------|----------------| -| `GET /:/websockets/notifications` (plural) | Tautulli and Home Assistant connect to this **plural** path for real-time session & timeline events. The spec documents the singular `/:/websocket/notifications` under `Events`, but the plural path is the one widely used in the wild. Both should be documented, or at minimum the plural path should be noted as an alias. | - -### Client Remote-Control Protocol -The Plex Client Control Protocol is entirely absent from the spec. These endpoints are proxied through PMS via `X-Plex-Target-Client-Identifier`. - -| Missing Path | Purpose | -|--------------|---------| -| `GET /resources` | Client capabilities / device info (used by `PlexClient` discovery). | -| `GET /player/timeline/poll` | Poll a client’s local playback timeline. | -| `POST /player/playback/play` | Start playback on client. | -| `POST /player/playback/pause` | Pause client. | -| `POST /player/playback/stop` | Stop client. | -| `POST /player/playback/seek` | Seek to time. | -| `POST /player/playback/skipTo` | Skip to item. | -| `POST /player/playback/skipBy` | Skip forward/backward. | -| `POST /player/playback/stepForward` | Step forward. | -| `POST /player/playback/stepBack` | Step back. | -| `POST /player/playback/setParameters` | Set shuffle/repeat/volume. | -| `POST /player/playback/subtitleStream` | Change subtitle stream. | -| `POST /player/playback/audioStream` | Change audio stream. | -| `POST /player/playback/videoStream` | Change video stream. | -| `POST /player/playback/volume` | Set volume. | -| `POST /player/playback/mute` | Mute. | -| `POST /player/playback/unmute` | Unmute. | -| `POST /player/playback/setTextStream` | Set text stream. | -| `POST /player/playback/setRating` | Rate item. | -| `POST /player/playback/setViewOffset` | Set resume offset. | -| `POST /player/playback/setState` | Set playback state. | -| `POST /player/playback/refreshPlayQueue` | Refresh play queue. | -| `POST /player/playback/playMedia` | Play specific media on client. | - -### Transcode Sessions & Segment Delivery -| Missing Path | Purpose | -|--------------|---------| -| `GET /{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s` | DASH segment delivery. | -| `GET /{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts` | HLS TS segment delivery. | -| `GET /music/:/transcode` | Audio transcode endpoint (distinct from universal video transcoder). | - ---- - -## Schema Corrections - -### PlayQueue -- **Missing shared schema:** There is no standalone `PlayQueue` schema. The creation endpoint (`POST /playQueues`) defines play-queue fields (`playQueueID`, `playQueueLastAddedItemID`, `playQueueSelectedItemID`, `playQueueSelectedItemOffset`, `playQueueSelectedMetadataItemID`, `playQueueShuffled`, `playQueueSourceURI`, `playQueueTotalCount`, `playQueueVersion`) inline in its 200 response. -- **Reuse mismatch:** All other play-queue operations (GET, shuffle, unshuffle, reset, move, delete item, clear) return `#/components/schemas/MediaContainerWithPlaylistMetadata`. That schema contains **playlist** fields (`playlistType`, `smart`, `composite`, `leafCount`, etc.) and **omits** every play-queue field listed above. -- **Gap:** `playQueueSelectedMetadataItemID` is present in the creation response, but absent from `MediaContainerWithPlaylistMetadata`. Because the spec reuses the playlist schema for play-queue responses, generated SDKs will not expose play-queue properties on retrieval. -- **Recommendation:** Create a proper `MediaContainerWithPlayQueue` schema that includes both the queue metadata fields and the `Metadata` item array, and reference it from all play-queue endpoints. - -### Session -- The `Session` schema (line 15863) is extremely sparse: - ```yaml - Session: - properties: - bandwidth: integer - id: string - location: string # enum: [lan, wan] - ``` -- Real session objects returned in `/status/sessions` include additional fields such as `sessionKey`, `uuid`, `title`, `userID`, etc. The current schema does not model these. -- **Recommendation:** Expand `Session` or document that the object is intentionally minimal and that consumers should rely on the embedded `Player`, `User`, and `Metadata` objects. - -### History -- The history response schema (`/status/sessions/history/all`, line 3770+) defines an inline object with: - `accountID`, `deviceID`, `historyKey`, `key`, `librarySectionID`, `originallyAvailableAt`, `ratingKey`, `thumb`, `title`, `type`, `viewedAt`. -- Real history items include fields like `guid`, `index`, `parentKey`, `parentRatingKey`, `grandparentKey`, `grandparentRatingKey`, `parentThumb`, `grandparentThumb`, `content`, `viewCount`, `lastViewedAt`, etc., depending on metadata type. -- **Recommendation:** Derive history items from `Metadata` (or a `HistoryItem` allOf) so that type-specific fields are not lost. - -### Timeline Response -- The `POST /:/timeline` 200 response schema extends `ServerConfiguration` and adds `Bandwidths`, `terminationCode`, `terminationText`. -- This is reasonable, but the response can also include a `playQueueID` when playback originates from a queue, which is not documented. -- **Recommendation:** Add `playQueueID` (integer) to the timeline response schema. - ---- - -## Parameter / Query Gaps - -### `POST /:/timeline` -The spec documents: `key`, `ratingKey`, `state`, `playQueueItemID`, `time`, `duration`, `continuing`, `updated`, `offline`, `timeToFirstFrame`, `timeStalled`, `bandwidth`, `bufferedTime`, `bufferedSize`, plus `X-Plex-Client-Identifier` and `X-Plex-Session-Identifier` headers. - -**Missing / under-documented:** - -| Parameter | Where observed | Gap | -|-----------|----------------|-----| -| `containerKey` | Official Plex clients | Used to group timeline reports (e.g., `/playQueues/123`). Not in spec. | -| `playQueueID` | Official Plex clients | Distinct from `playQueueItemID`; identifies the queue itself. Not in spec. | -| `guid` | Client traffic | Global unique identifier for the item being reported. Not in spec. | -| `url` | Legacy clients | Alternative to `key`/`ratingKey`. Mentioned in `scrobble` description but absent from timeline. | - -Also, the `state` enum is `stopped | buffering | playing | paused`. This matches common usage, but some clients also send `ready` — verify if this is still current. - -### `GET /status/sessions/history/all` -- The description mentions `includeFields`, `excludeFields`, `includeElements`, and `excludeElements`, but these are **not declared as formal query parameters**. -- Pagination is described in text, but `X-Plex-Container-Start` and `X-Plex-Container-Size` are only documented as **response headers**, not request parameters. Many clients send them as query parameters or headers for pagination. -- Missing filter parameters observed in SDK usage: `viewedAt>` (greater-than), `viewedAt<` (less-than), `accountID`, `deviceID`, `metadataItemID` (the latter three are present, but range operators on `viewedAt` are not formally described). - -### `GET /status/sessions` -- No query parameters are listed. Real usage sometimes includes `X-Plex-Container-Start` / `X-Plex-Container-Size` for large session lists, though this is rare. - -### `POST /status/sessions/terminate` -- `sessionId` and `reason` are present. Looks complete for the documented surface. - -### Scrobble / Unscrobble (`PUT /:/scrobble`, `PUT /:/unscrobble`) -- Parameters: `identifier`, `key`, `uri`. -- `identifier` is documented as required; `key` and `uri` are optional (one must be provided). -- No gaps here, but the description of `uri` refers to "See intro for description of the URIs" — the spec does not actually contain that introductory URI section. - -### Transcoder (`/decision`, `/start.{extension}`, `/subtitles`, `/fallback`) -- Heavily parameterized; the spec is fairly comprehensive. -- **Missing** from all transcoder endpoints: - - `maxVideoBitrate` (client-side cap, distinct from `videoBitrate` / `peakBitrate`) - - `videoResolution` (cap string) - - `copyts` (boolean for timestamp copying) - - `mediaIndex` / `partIndex` are present on `/decision` and `/start`, but not on `/subtitles` - - `platform` query param (some clients send this in addition to headers) - -### Play Queue Creation (`POST /playQueues`) -- Missing parameter observed in SDKs: `limit` (to cap initial window size). Not documented. -- Missing parameter: `next` is documented on `PUT /playQueues/{playQueueId}` (add to queue) but a `next` semantic on creation is not addressed. - ---- - -## Documentation Improvements - -1. **Clarify HTTP verbs for scrobble/unscrobble** - - The spec notes these "respond to GET but applications should use PUT". This anti-pattern should be deprecated in documentation; only PUT should be shown in examples. - -2. **Timeline polling frequency** - - The `POST /:/timeline` description states "generally every 10 seconds on LAN/WAN, every 20 seconds over cellular." This is good, but should also mention that the server may reply with `terminationCode` / `terminationText` when a session is killed, and that clients must handle the 200 response body to detect server-side termination. - -3. **Play Queue "Up Next" semantics** - - The tag description (line 134) contains a lengthy explanation of the Up Next region, sliding window, and shuffle restrictions. This should be summarized or cross-linked in the operation descriptions for `POST /playQueues`, `PUT /playQueues/{playQueueId}/shuffle`, and `PUT /playQueues/{playQueueId}/unshuffle` so that consumers do not have to read the tag essay to understand why shuffle fails. - -4. **History pagination** - - The `listPlaybackHistory` description mentions pagination but does not declare `X-Plex-Container-Start` / `X-Plex-Container-Size` as request parameters. Add them explicitly (as headers or query params) and provide an example. - -5. **Transcoder segment flow** - - The spec documents `/start.{extension}` but does not explain that the returned manifest references segments under `/session/{sessionId}/{segmentId}.{ext}`. A short sequence diagram or note would help implementers understand the full playback flow. - -6. **WebSocket path discrepancy** - - Document that both `/:/websocket/notifications` (singular, in spec) and `/:/websockets/notifications` (plural, used by Tautulli/HA) exist, or add the plural path as a separate operation. Describe the `NotificationContainer`, `PlaySessionStateNotification`, `TimelineEntry`, and `StatusNotification` message shapes, which are currently absent. - -7. **Client remote control proxy pattern** - - Add a section explaining that `/player/*` endpoints can be invoked directly against a client or proxied through PMS using `X-Plex-Target-Client-Identifier`. This is a fundamental Plex architecture pattern that is missing from the spec entirely. - ---- - -## Quick-Reference: Priority Matrix - -| Gap | Impact | Effort | -|-----|--------|--------| -| Create `MediaContainerWithPlayQueue` schema and apply to all PQ endpoints | **High** | Medium | -| Add `/:/websockets/notifications` (plural) and message schemas | **High** | Medium | -| Add `/player/playback/*` and `/player/timeline/poll` endpoints | **High** | Large | -| Add `/resources` endpoint | **Medium** | Small | -| Add transcode segment delivery paths | **Medium** | Small | -| Expand `Session` schema | **Medium** | Small | -| Expand history inline schema | **Medium** | Medium | -| Add missing timeline query params (`containerKey`, `playQueueID`, `guid`) | **Medium** | Small | -| Declare `includeFields` / `excludeFields` / `includeElements` / `excludeElements` on history | **Low** | Small | -| Add `X-Plex-Container-Start` / `X-Plex-Container-Size` as request params on paginated endpoints | **Low** | Small | diff --git a/review/domain_server_system_review.md b/review/domain_server_system_review.md deleted file mode 100644 index 07559d1c8..000000000 --- a/review/domain_server_system_review.md +++ /dev/null @@ -1,289 +0,0 @@ -# Server & System Domain Review - -**Date:** 2026-06-03 -**Domain:** Server & System (General, Activities, Butler, Updater, Log, Preferences, Events, UltraBlur, Transcoder, Status) -**Spec File:** `plex-api-spec.yaml` (16,989 lines) - ---- - -## Endpoints Present in Spec (inventory with assessment) - -### General -| Path | Method | Tag | Assessment | -|------|--------|-----|------------| -| `/` | GET | General | ⚠️ **Schema mismatch.** Returns `MediaContainerWithDirectory`, but the actual response body contains `ServerConfiguration` fields (e.g. `machineIdentifier`, `version`, `platform`, `myPlex`, etc.). The `Directory` array is present but the container itself is server config. | -| `/identity` | GET | General | ✅ Clean. Returns `claimed`, `machineIdentifier`, `version`. Unauthenticated. | - -### Activities -| Path | Method | Tag | Assessment | -|------|--------|-----|------------| -| `/activities` | GET | Activities | ⚠️ **Inline schema.** `Activity` is defined inline in the response; not a reusable component. No `200` response headers documented. Missing `X-Plex-Activity` header documented elsewhere. | -| `/activities/{activityId}` | DELETE | Activities | ✅ Clean. Path param `activityId` documented. Returns 200/400/404. | - -### Butler -| Path | Method | Tag | Assessment | -|------|--------|-----|------------| -| `/butler` | GET / DELETE / POST | Butler | ⚠️ **Inline schema.** `ButlerTask` is defined inline. `GET` returns tasks list; `DELETE` stops all; `POST` starts all. Admin-only security is correct. | -| `/butler/{butlerTask}` | DELETE / POST | Butler | ✅ Clean. Comprehensive enum of 24 task names. Admin-only. | - -### Updater -| Path | Method | Tag | Assessment | -|------|--------|-----|------------| -| `/updater/apply` | PUT | Updater | ✅ Clean. Params `tonight` and `skip` (BoolInt). Returns text/html. | -| `/updater/check` | PUT | Updater | ✅ Clean. Param `download` (BoolInt). | -| `/updater/status` | GET | Updater | ⚠️ **Inline schema.** `UpdaterStatus` / `Release` objects are inline. Missing `checkedAt` type clarity (integer timestamp). | - -### Log -| Path | Method | Tag | Assessment | -|------|--------|-----|------------| -| `/log` | PUT / POST | Log | ⚠️ **No response schema.** PUT writes a single line; POST writes multi-line plain text. No `LogLine` schema exists. Level enum (0-4) is correct. | -| `/log/networked` | POST | Log | ⚠️ **Undocumented response.** Enables Papertrail logging. Param `minutes` documented. Returns only generic 200/403. | - -### Preferences -| Path | Method | Tag | Assessment | -|------|--------|-----|------------| -| `/:/prefs` | GET / PUT | Preferences | ⚠️ **GET lacks auth?** GET has no `security` block (should likely be admin). PUT uses generic `prefs: object` query param instead of documenting known keys. Hidden preferences (~40+ keys) are not documented. | -| `/:/prefs/get` | GET | Preferences | ✅ Clean. Single preference fetch by `id`. | - -### Rate / Timeline / Scrobble -| Path | Method | Tag | Assessment | -|------|--------|-----|------------| -| `/:/rate` | PUT | Rate | ✅ Clean. Params `identifier`, `key`, `rating` (0-10), `ratedAt`. | -| `/:/timeline` | POST | Timeline | ✅ Extensive params for playback reporting. Documents `state` enum, bandwidth, buffering, etc. | -| `/:/scrobble` | GET | — | 📍 **Not in primary domain review** but related to playback progress. | -| `/:/unscrobble` | GET | — | 📍 **Not in primary domain review** but related to playback progress. | - -### Events -| Path | Method | Tag | Assessment | -|------|--------|-----|------------| -| `/:/eventsource/notifications` | GET | Events | ⚠️ **No message schema.** Returns `application/octet-stream`. Filter param documented but no SSE event schemas. | -| `/:/websocket/notifications` | GET | Events | ⚠️ **No message schema.** Returns `application/octet-stream`. Filter param documented but no WebSocket message schemas (`NotificationContainer`, `PlaySessionStateNotification`, `StatusNotification`, `ReachabilityNotification`). | - -### UltraBlur -| Path | Method | Tag | Assessment | -|------|--------|-----|------------| -| `/services/ultrablur/colors` | GET | UltraBlur | ✅ Clean. `url` param. Returns `UltraBlurColors` array. | -| `/services/ultrablur/image` | GET | UltraBlur | ✅ Clean. Color quadrant params documented. | - -### Transcoder (Universal) -| Path | Method | Tag | Assessment | -|------|--------|-----|------------| -| `/{transcodeType}/:/transcode/universal/decision` | GET | Transcoder | ✅ Extensive params for playback decision. Returns `MediaContainerWithDecision`. | -| `/{transcodeType}/:/transcode/universal/start.{extension}` | GET | Transcoder | ✅ Supports `m3u8` and `mpd`. Extensive params duplicated from `/decision`. | -| `/{transcodeType}/:/transcode/universal/fallback` | POST | Transcoder | ✅ Clean. Session-based fallback trigger. | -| `/{transcodeType}/:/transcode/universal/subtitles` | GET | Transcoder | ✅ Clean. Subtitle-only transcode params. | - -### Status (Partial) -| Path | Method | Tag | Assessment | -|------|--------|-----|------------| -| `/status/sessions` | GET | Status | ✅ Clean. Returns `Metadata` with `Player`, `Session`, `User`. Admin-only. | -| `/status/sessions/background` | GET | Status | ⚠️ **Inline schema.** `TranscodeJob` is inline. Missing some fields like `generatorID` vs `generatorID` casing? (spec has `generatorID`). | -| `/status/sessions/history/all` | GET | Status | ⚠️ **Partial params.** Mentions `includeFields`, `excludeFields`, `includeElements`, `excludeElements` in description but does not formally declare them as query parameters. | -| `/status/sessions/terminate` | POST | Status | ✅ Clean. `sessionId` and `reason` params. | -| `/status/sessions/history/{historyId}` | GET | Status | 📍 Present but not primary focus of this review. | - ---- - -## Missing Endpoints - -The following endpoints are used by `python-plexapi`, Tautulli, Home Assistant, or community research but are **absent** from the spec. - -### Server Discovery & Identity -| Path | Method | Source | Notes | -|------|--------|--------|-------| -| `/servers` | GET | Tautulli | Local server list. | -| `/myplex/account` | GET | Tautulli | Linked MyPlex account info on PMS. | -| `/myplex/refreshReachability` | PUT | Tautulli | Refresh remote access port mapping. | - -### Clients & Devices -| Path | Method | Source | Notes | -|------|--------|--------|-------| -| `/clients` | GET | python-plexapi, HA | Lists connected `PlexClient` objects. Returns `MediaContainer` of `Server`/`Player` objects. | -| `/accounts` | GET | python-plexapi | Lists local system accounts (`PlexServer.systemAccounts()`). | -| `/devices` | GET | python-plexapi | Lists local system devices (`PlexServer.systemDevices()`). | - -### System & Agents -| Path | Method | Source | Notes | -|------|--------|--------|-------| -| `/system/agents` | GET | python-plexapi | Lists available metadata agents. | -| `/system/agents/{agentId}` | GET | Community | Agent details & settings. | -| `/system/settings` | GET | Community | System-level settings. | -| `/system/updates` | GET | Community | Check for PMS updates (alternative to `/updater/check`). | - -### Diagnostics & Statistics -| Path | Method | Source | Notes | -|------|--------|--------|-------| -| `/diagnostics` | GET | Community | Server diagnostics overview. | -| `/diagnostics/databases` | GET | python-plexapi | Downloads server DB diagnostics. | -| `/diagnostics/logs` | GET | python-plexapi | Downloads server logs bundle. | -| `/statistics/bandwidth` | GET | python-plexapi | Dashboard bandwidth data. Missing `timespan` (1-6), `accountID`, `deviceID`, `lan` params. | -| `/statistics/resources` | GET | python-plexapi | Dashboard resource data. | - -### Sync -| Path | Method | Source | Notes | -|------|--------|--------|-------| -| `/sync` | GET | Community | Sync status overview. | -| `/sync/items` | GET | Community / Tautulli | Sync items list. | -| `/sync/items/{syncId}` | GET | Tautulli | Sync item details. | -| `/sync/queue` | GET | Community | Sync queue. | -| `/sync/transcodeQueue` | GET | Tautulli | Sync transcode queue status. | -| `/sync/refreshSynclists` | PUT | python-plexapi | Forces PMS to download new SyncList from plex.tv. | -| `/sync/refreshContent` | PUT | python-plexapi | Forces PMS to refresh content for known SyncLists. | - -### Browse -| Path | Method | Source | Notes | -|------|--------|--------|-------| -| `/services/browse` | GET | python-plexapi | Browses filesystem paths. Missing `includeFiles` param. | -| `/services/browse/{base64path}` | GET | python-plexapi | Browses a specific filesystem path. | - -### Playback Progress -| Path | Method | Source | Notes | -|------|--------|--------|-------| -| `/:/progress` | GET | python-plexapi | Updates watch progress (`Playable.updateProgress()`). | - -### Transcoder (Missing) -| Path | Method | Source | Notes | -|------|--------|--------|-------| -| `/transcode/sessions` | GET | Community | Active transcode sessions. | -| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s` | GET | Community | DASH segment delivery. | -| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts` | GET | Community | HLS TS segment delivery. | -| `/music/:/transcode` | GET | Community | Audio transcode endpoint. | - -### Real-Time Events (Missing Schema) -| Path | Method | Source | Notes | -|------|--------|--------|-------| -| `/:/websockets/notifications` | WS | Tautulli, HA | WebSocket path is present but **message schema is absent**. | - ---- - -## Schema Corrections - -### `ServerConfiguration` -Used at `/media/providers` and in `LibrarySections` response, but **most importantly** the root `/` endpoint returns these fields. The spec incorrectly labels `/` as returning `MediaContainerWithDirectory`. - -| Field | Spec Status | Issue | Recommended Fix | -|-------|-------------|-------|-----------------| -| `diagnostics` | `string` | SDK parses as `list` (comma-separated diagnostics modules). | Change to `array` of `string`, or document as comma-separated list with `parseAs: list` hint. | -| `transcoderVideoBitrates` | untyped / description only | SDK parses as `list`. | Add `type: array` with `items: string` or `integer`. | -| `transcoderVideoQualities` | `string` | SDK parses as `list`. | Change to `array` of `string` / `integer`. | -| `transcoderVideoResolutions` | description only | SDK parses as `list`. | Add `type: array` of `string`. | -| `ownerFeatures` | `string` | SDK parses as `list` (comma-separated). | Change to `array` of `string`, or document parsing rule. | - -**Additional issue:** `offlineTranscode` is documented as `example: 1` but has no `type`. Should be `integer` or `boolean` (BoolInt pattern). - -### `Activity` -Defined inline under `/activities` GET response (lines 728-763). Should be extracted to `#/components/schemas/Activity`. - -| Field | Status | Notes | -|-------|--------|-------| -| `uuid` | Present | Good. | -| `type` | Present | Good. | -| `title` | Present | Good. | -| `subtitle` | Present | Good. | -| `progress` | Present | Good (-1 to 100). | -| `cancellable` | Present | Good. | -| `userID` | Present | Good. | -| `Context` | Present | `additionalProperties: true` is permissive but correct. | -| `Response` | Present | `additionalProperties: true` is permissive but correct. | - -**Missing:** No standalone component means it cannot be reused by other endpoints that may return activities (e.g., websocket `StatusNotification`). - -### `ButlerTask` -Defined inline under `/butler` GET response (lines 798-819). Should be extracted to `#/components/schemas/ButlerTask`. - -| Field | Status | Notes | -|-------|--------|-------| -| `name` | Present | Good. | -| `title` | Present | Good. | -| `description` | Present | Good. | -| `enabled` | Present | Good. | -| `interval` | Present | Good (days). | -| `scheduleRandomized` | Present | Good. | - -### `UpdaterStatus` -Defined inline under `/updater/status` GET response (lines 3956-3984+). Should be extracted to `#/components/schemas/UpdaterStatus`. - -| Field | Status | Notes | -|-------|--------|-------| -| `autoUpdateVersion` | Present | Good. | -| `canInstall` | Present | Good. | -| `checkedAt` | Present | Good. | -| `downloadURL` | Present | Good. | -| `Release` | Present | Array with `added`, `fixed`, `downloadURL`, `key`, etc. | - -### `LogLine` -**Does not exist.** The `/log` endpoints return generic `200` responses with no schema. If the endpoints ever return the logged line or a confirmation object, it should be documented. - -### `MediaContainerWithDecision` (Transcoder) -Present and comprehensive. However, the `decision` enum on `Part` and `Stream` is well-defined (`directplay`, `transcode`, `copy`, `burn`, etc.). ✅ - ---- - -## Parameter / Query Gaps - -### Preferences (`/:/prefs`) -- **PUT `/:/prefs`** uses a single `prefs: object` query parameter. It should document the known public keys (`FriendlyName`, `ScheduledLibraryUpdateInterval`, `sendCrashReports`, etc.) and note that hidden keys are also accepted. -- **Hidden preference keys** (~40+) are not documented anywhere in the spec. Examples: - - `aBRKeepOldTranscodes`, `allowHighOutputBitrates`, `backgroundQueueIdlePaused` - - `butlerTaskGarbageCollectBlobs`, `butlerTaskGenerateMediaIndexFiles` - - `certificateVersion`, `dvrShowUnsupportedDevices`, `enableABRDebugOverlay` - - `hardwareDevicePath`, `manualPortMappingMode`, `manualPortMappingPort` - - `transcoderH264MinimumCRF`, `transcoderH264Options`, `transcoderH264Preset` - - `transcoderLogLevel`, `transcoderLivePruneBuffer` - - Source: [Python PlexAPI settings docs](https://python-plexapi.readthedocs.io/en/latest/modules/settings.html) - -### History (`/status/sessions/history/all`) -- Mentions `includeFields`, `excludeFields`, `includeElements`, `excludeElements` in the **description** but does not formally declare them as query parameters. These should be added as explicit parameters. -- Also missing formal `X-Plex-Container-Start` and `X-Plex-Container-Size` **request** parameters (they are documented as response headers but used for request pagination by many clients). - -### Updater -- `/updater/check` documents `download` as BoolInt. Tautulli uses `download=0`. The spec is technically correct but could note that `0` explicitly skips download. - -### Transcoder Universal -- Missing segment delivery path parameters: - - `sessionId` (path) and `segmentId` (path) for `.m4s` / `.ts` segment URLs. -- Missing audio-specific transcoder path `/music/:/transcode`. -- Some stream URL parameters are accepted but not documented on all transcoder endpoints: - - `maxVideoBitrate`, `videoResolution`, `offset`, `copyts`, `protocol`, `mediaIndex`, `partIndex`, `platform`. - -### Timeline (`/:/timeline`) -- Generally well-documented. Missing `X-Plex-Session-Identifier` as a formal parameter? It is present. ✅ - -### Root `/` -- Missing `X-Plex-Token` as a query parameter option. The SDK often passes token via `url()` query param, not just header. - ---- - -## Documentation Improvements - -1. **Root `/` response schema** - - The description says "Information about this PMS setup and configuration" but the schema is `MediaContainerWithDirectory`. The actual response is a `ServerConfiguration`-shaped object with a `Directory` array. Update the schema to `allOf: [ServerConfiguration, { Directory: ... }]`. - -2. **Event / WebSocket / Eventsource message schemas** - - The spec documents the connection endpoints but provides **no schemas** for the messages that flow over them. - - Missing: `NotificationContainer`, `PlaySessionStateNotification`, `TimelineEntry`, `StatusNotification`, `ReachabilityNotification`. - - These are critical for Tautulli and Home Assistant integrations. - -3. **Activity, ButlerTask, UpdaterStatus should be components** - - Extract inline schemas to `#/components/schemas/` so they can be referenced by other endpoints and generated SDKs. - -4. **Log endpoint responses** - - Document whether `/log` PUT/POST returns any body, and if so, what it contains. - -5. **Preference setting documentation** - - Add an `example` or `enum` of common preference keys to the `PUT /:/prefs` operation description. - - Add a note about hidden/advanced preference keys and link to Plex support article. - -6. **Transcoder segment delivery** - - Document the segment delivery URLs (`.../session/{sessionId}/{segmentId}.m4s` / `.ts`) even if they are primarily streaming URLs rather than REST API calls. - -7. **Auth consistency** - - `GET /:/prefs` lacks a `security` block. It should likely require `token: [admin]` like `PUT /:/prefs`. - - `/identity` correctly allows unauthenticated access (`security: [{}]`). ✅ - -8. **Missing tags** - - Some endpoints like `/:/scrobble` and `/:/unscrobble` are not tagged with a domain tag (they appear tag-less or under an implicit tag). Verify they are categorized. - ---- - -*End of review.* diff --git a/review/integration_ecosystem_gaps.md b/review/integration_ecosystem_gaps.md deleted file mode 100644 index c8d20fda0..000000000 --- a/review/integration_ecosystem_gaps.md +++ /dev/null @@ -1,343 +0,0 @@ -# Integration Ecosystem API Gap Survey - -This document surveys major open-source Plex integrations to identify API endpoints, parameters, and authentication patterns that are commonly used but missing or poorly documented in the official Plex OpenAPI spec (`plex-api-spec.yaml`). - ---- - -## Tautulli API usage - -Tautulli (`Tautulli/Tautulli`) is a Python-based monitoring and tracking tool that interacts heavily with both the local PMS and plex.tv APIs. - -### PMS Endpoints Used - -| Endpoint | Method | Purpose | Status in Spec | -|---|---|---|---| -| `/status/sessions` | GET | Active play sessions | **Present** | -| `/status/sessions/terminate` | GET | Kill a session by ID | **Present** | -| `/library/metadata/{ratingKey}?includeMarkers=1` | GET | Media metadata with intro/credits markers | **Partial** (`includeMarkers` param absent) | -| `/library/metadata/{ratingKey}/children` | GET | Season episodes, album tracks | **Present** | -| `/library/metadata/{ratingKey}/allLeaves` | GET | All descendant items | **Present** | -| `/library/metadata/{ratingKey}/grandchildren` | GET | Grandchildren (e.g. episodes under a show) | **Absent** | -| `/library/sections` | GET | List libraries | **Present** | -| `/library/sections/{sectionId}/all` | GET | Library contents | **Present** | -| `/library/sections/{sectionId}/recentlyAdded` | GET | Per-library recently added | **Absent** | -| `/library/sections/{sectionId}/label` | GET | Labels for a library | **Absent** | -| `/library/recentlyAdded` | GET | Global recently added | **Absent** | -| `/hubs/home/recentlyAdded` | GET | Hub-centric recently added | **Absent** | -| `/hubs/search?query=&limit=&includeCollections=1` | GET | Search with collection results | **Partial** (`includeCollections` not documented) | -| `/hubs/metadata/{ratingKey}/related` | GET | Related items in a collection | **Present** | -| `/playlists/{ratingKey}/items` | GET | Playlist items | **Present** | -| `/sync/items/{syncId}` | GET | Sync item details | **Absent** | -| `/sync/transcodeQueue` | GET | Sync transcode queue status | **Absent** | -| `/myplex/account` | GET | Linked MyPlex account info | **Absent** | -| `/myplex/refreshReachability` | PUT | Refresh remote access port mapping | **Absent** | -| `/servers` | GET | Local server list | **Absent** | -| `/identity` | GET | Server identity / machine identifier | **Present** | -| `/:/prefs` | GET / PUT | Server preferences | **Present** | -| `/updater/check?download=0` | PUT | Trigger update check | **Present** | -| `/updater/status` | GET | Update status | **Present** | -| `/livetv/dvrs` | GET | DVR devices | **Present** | -| `/status/sessions/history/all` | GET | Play history | **Present** | -| `/activities` | GET | Background activities | **Present** | - -### plex.tv Endpoints Used - -| Endpoint | Method | Purpose | Status in Spec | -|---|---|---|---| -| `https://plex.tv/api/v2/pins` | POST | OAuth PIN generation | **Absent** | -| `https://plex.tv/api/v2/pins/{pin}` | GET | PIN status / token retrieval | **Absent** | -| `https://plex.tv/api/users` | GET | Friends / shared users | **Present** (`GET /users` on plex.tv) | -| `https://plex.tv/users/account` | GET | Own account details (XML) | **Absent** | -| `https://plex.tv/devices.xml` | GET | Authorized devices list | **Absent** | -| `https://plex.tv/pms/servers.xml` | GET | Published server list with timestamps | **Absent** | -| `https://plex.tv/api/resources?includeHttps=1` | GET | Server connections & discovery | **Absent** | -| `https://plex.tv/api/servers/{machineId}/shared_servers` | GET | Per-server shared library access | **Absent** | -| `https://plex.tv/servers/{machineId}/sync_lists` | GET | Mobile sync lists | **Absent** | -| `https://plex.tv/api/downloads/{channel}.json` | GET | Plex update downloads | **Absent** | -| `https://plex.tv/api/v2/cloud_server` | GET | Plex Cloud status | **Absent** | -| `https://plex.tv/api/v2/geoip?ip_address=` | GET | GeoIP lookup | **Absent** | -| `https://plex.tv/api/v2/ping` | GET | Token validity ping | **Absent** | -| `https://plex.tv/:/ip` | GET | Public IP detection | **Absent** | - -### Special Patterns - -- **Websocket**: Tautulli connects to `wss://{host}/:/websockets/notifications` (or `ws://`) with `X-Plex-Token` header for real-time session and timeline events. -- **Auth**: Uses `X-Plex-Token` header; also supports per-user server tokens derived from shared_server access tokens. -- **Pagination**: Uses `X-Plex-Container-Start` and `X-Plex-Container-Size` query parameters (also used by others). - ---- - -## Overseerr / Jellyseerr API usage - -Overseerr (`sct/overseerr`) and its successor Jellyseerr (`Fallenbagel/jellyseerr`) manage Plex user access, library scanning, and watchlist integration. - -### PMS Endpoints Used - -| Endpoint | Method | Purpose | Status in Spec | -|---|---|---|---| -| `/library/sections` | GET | Sync libraries | **Present** | -| `/library/sections/{id}/all?includeGuids=1` | GET | Full library scan with external GUIDs | **Partial** (`includeGuids` param absent) | -| `/library/metadata/{key}` | GET | Item metadata | **Present** | -| `/library/metadata/{key}/children` | GET | Child items (seasons/episodes) | **Present** | -| `/library/sections/{id}/all?type={1|4}&sort=addedAt:desc&addedAt>>={ts}` | GET | Recently added delta scan | **Partial** (filter params not fully documented) | - -### plex.tv / Provider Endpoints Used - -| Endpoint | Method | Purpose | Status in Spec | -|---|---|---|---| -| `https://plex.tv/api/resources?includeHttps=1` | GET | Server discovery & connection URLs | **Absent** | -| `https://plex.tv/users/account.json` | GET | Account info (JSON) | **Absent** | -| `https://plex.tv/api/users` | GET | Friends / shared users (XML) | **Present** (`GET /users`) | -| `https://discover.provider.plex.tv/library/sections/watchlist/all` | GET | Plex Discover watchlist | **Absent** | -| `https://discover.provider.plex.tv/library/metadata/{ratingKey}` | GET | Watchlist item metadata from Discover | **Absent** | -| `https://plex.tv/api/v2/ping` | GET | Token health check | **Absent** | - -### Special Patterns - -- **Container headers**: Overseerr sends `X-Plex-Container-Start` and `X-Plex-Container-Size` as **HTTP headers** rather than query parameters for pagination. -- **ETag caching**: Uses `If-None-Match` with ETag for watchlist caching. -- **Authentication**: Relies on OAuth PIN flow (same missing endpoints as Tautulli) to obtain tokens. -- **Migration note**: Jellyseerr migrated watchlist from `metadata.provider.plex.tv` to `discover.provider.plex.tv` after Plex deprecated the former. - ---- - -## Bazarr API usage - -Bazarr (`morpheus65535/bazarr`) integrates with Plex primarily for subtitle management and webhook-driven automation. - -### PMS Endpoints Used - -Bazarr's direct PMS API usage is lighter than other tools; it primarily triggers library refreshes after subtitle changes. The exact PMS paths are abstracted behind its own internal API, but typical operations include: - -- **Library item refresh** (likely `GET /library/metadata/{id}/refresh` or similar) to update subtitles. -- **Server connection testing** against `/` or `/identity`. - -### plex.tv / Webhook Patterns - -| Pattern | Details | Status in Spec | -|---|---|---| -| Plex Webhooks (inbound) | Bazarr receives webhooks at `/api/webhooks/plex?apikey={key}` for `media.play` / `media.resume` events to trigger subtitle search | **Absent** | -| Plex Webhook auto-registration | Bazarr can auto-create webhooks on the Plex server via the Plex Web UI mechanisms (not a formal API) | **Absent** | -| OAuth PIN flow | `POST /api/v2/pins` → `GET /api/v2/pins/{id}` for Plex auth | **Absent** | - -### Special Patterns - -- **Webhook payload**: Consumes standard Plex webhook JSON payloads (see Webhooks section below). -- **Added-date manipulation**: Can update `addedAt` timestamps for movies/episodes after subtitle operations (implementation-specific, not a standard API endpoint). - ---- - -## Kometa API usage - -Kometa (`kometa-team/kometa`) is a Python automation framework built on top of the `python-plexapi` library. It exercises a very broad surface of the PMS API for metadata editing, collection management, and server maintenance. - -### PMS Endpoints Used (via python-plexapi) - -| Endpoint / Operation | Method | Purpose | Status in Spec | -|---|---|---|---| -| `/library/sections/{id}/all` | GET | Enumerate all library items | **Present** | -| `/library/metadata/{id}` | GET | Read item metadata | **Present** | -| `/library/metadata/{id}` | PUT | Update item metadata (title, summary, etc.) | **Partial** (update body schema unclear) | -| `/library/metadata/{id}/posters` | POST | Upload custom poster image | **Absent** | -| `/library/metadata/{id}/arts` | POST | Upload custom background art | **Absent** | -| `/library/collections` | GET / POST | Create and list collections | **Partial** (creation semantics missing) | -| `/library/collections/{id}` | PUT | Edit collection metadata | **Partial** | -| `/library/sections/{id}/refresh` | GET / POST | Trigger library refresh | **Absent** | -| `/library/sections/{id}/emptyTrash` | GET / POST | Empty library trash | **Absent** | -| `/library/sections/{id}/optimize` | GET / POST | Optimize database for a library | **Absent** | -| `/library/optimize` | GET / POST | Global database optimize | **Absent** | -| `/playlists` | GET / POST | Create and list playlists | **Present** | -| `/playlists/{id}/items` | PUT / POST | Add items to playlists | **Partial** | -| `/library/metadata/{id}/unmatch` | PUT | Unmatch metadata match | **Present** | -| `/library/metadata/{id}/match` | PUT / GET | Re-match item | **Present** | -| `/library/metadata/{id}/refresh` | GET | Refresh metadata for single item | **Present** | - -### Special Patterns - -- **Database cache tuning**: Kometa recommends setting `db_cache` (PMS preference `DatabaseCacheSize` via `:/prefs`) before operations. -- **Label-based smart collections**: Uses `/library/sections/{id}/label` (missing from spec) to drive smart collection filters. -- **Overlays**: Performs image composition and uploads via the poster/art upload endpoints, which are not formally documented in the spec. -- **Python-plexapi abstraction**: Many of these endpoints are not called directly by Kometa's code but are abstracted through `PlexServer`, `LibrarySection`, `Movie`, `Show`, etc. objects in the `python-plexapi` library. - ---- - -## Home Assistant Plex integration usage - -The Home Assistant (`home-assistant/core`) Plex integration uses the `python-plexapi` library and a dedicated websocket wrapper (`plexwebsocket`) to monitor server state and control clients. - -### PMS Endpoints Used - -| Endpoint / Mechanism | Purpose | Status in Spec | -|---|---|---| -| `/` (root) | Server status / connection test | **Present** | -| `/clients` | List connected clients | **Absent** (returns `MediaContainer` of `Server`/`Player` objects) | -| `/status/sessions` | Active sessions | **Present** | -| `/library/sections` | Library discovery | **Present** | -| `systemAccounts()` (effectively `/accounts`) | Server system accounts | **Absent** | -| `playlists()` | List playlists | **Present** | -| `createToken()` | Generate temporary client token | **Absent** | - -### Websocket & Real-Time - -| Endpoint | Purpose | Status in Spec | -|---|---|---| -| `/:/websockets/notifications` | Real-time event stream (playing, timeline, status, reachability) | **Absent** | - -The integration subscribes to: -- `playing` → `PlaySessionStateNotification` (state changes: playing, paused, stopped) -- `status` → `StatusNotification` (e.g. "Library scan complete") - -### Discovery - -- **GDM (UDP multicast)**: Uses `plexapi.gdm.GDM` to discover clients on `239.0.0.250:32412/32414` via UDP multicast. This is a network-layer protocol, not a REST API, but it's a critical integration mechanism absent from the spec. - -### plex.tv Patterns - -- `MyPlexAccount(token=...)` → `account.resources()` → server connection -- `account.users()` → shared user discovery -- `resource.connect()` → plex.direct URL resolution - ---- - -## Webhooks & plex.tv endpoints - -### Plex Webhooks - -Webhooks are a **Plex Pass** feature configured via the Plex Web UI (Account → Webhooks). There is **no documented REST API** for webhook CRUD operations. - -#### Events Emitted - -| Event | Description | -|---|---| -| `library.on.deck` | New item added to On Deck | -| `library.new` | New item added to library | -| `media.play` | Playback started | -| `media.pause` | Playback paused | -| `media.resume` | Playback resumed | -| `media.stop` | Playback stopped | -| `media.scrobble` | Played past ~90% | -| `media.rate` | Item rated | -| `admin.database.backup` | Scheduled DB backup completed | -| `admin.database.corrupted` | DB corruption detected | -| `device.new` | New device accessed server | -| `playback.started` | Shared user started playback (admin only) | - -#### Payload Structure - -- **Format**: Multipart HTTP POST (`Content-Type: multipart/form-data`) -- **JSON part**: `payload` field containing `event`, `user`, `owner`, `Account`, `Server`, `Player`, `Metadata` -- **Thumbnail part**: Optional JPEG `thumb` attachment for `media.play`, `library.new`, `library.on.deck`, `media.rate`, `playback.started` - -The webhook payload schema is **not present** in the OpenAPI spec. - -### Additional plex.tv Endpoints (Cross-cutting) - -These plex.tv endpoints are used by multiple integrations (Tautulli, Overseerr, Home Assistant, etc.) and are largely absent: - -| Endpoint | Used By | Status | -|---|---|---| -| `GET https://plex.tv/api/v2/pins` | Tautulli, Overseerr, Bazarr | **Absent** | -| `GET https://plex.tv/api/v2/pins/{id}` | Tautulli, Overseerr, Bazarr | **Absent** | -| `GET https://plex.tv/api/resources?includeHttps=1` | Tautulli, Overseerr, HA | **Absent** | -| `GET https://plex.tv/users/account` / `users/account.json` | Tautulli, Overseerr | **Absent** | -| `GET https://plex.tv/devices.xml` | Tautulli | **Absent** | -| `GET https://plex.tv/pms/servers.xml` | Tautulli | **Absent** | -| `GET https://plex.tv/api/servers/{machineId}/shared_servers` | Tautulli | **Absent** | -| `GET https://plex.tv/servers/{machineId}/sync_lists` | Tautulli | **Absent** | -| `GET https://plex.tv/api/downloads/{channel}.json` | Tautulli | **Absent** | -| `GET https://plex.tv/api/v2/cloud_server` | Tautulli | **Absent** | -| `GET https://plex.tv/api/v2/geoip` | Tautulli | **Absent** | -| `GET https://plex.tv/api/v2/ping` | Tautulli, Overseerr | **Absent** | -| `GET https://plex.tv/:/ip` | Tautulli | **Absent** | -| `GET https://discover.provider.plex.tv/library/sections/watchlist/all` | Overseerr, Jellyseerr | **Absent** | -| `GET https://discover.provider.plex.tv/library/metadata/{id}` | Overseerr, Jellyseerr | **Absent** | -| `GET https://metadata.provider.plex.tv/library/metadata/{id}` | Tautulli | **Absent** | - ---- - -## Summary table: Endpoint | Method | Used By | Status in Spec - -| Endpoint | Method | Used By | Status in Spec | -|---|---|---|---| -| `/status/sessions` | GET | Tautulli, HA, many | Present | -| `/status/sessions/terminate` | GET | Tautulli | Present | -| `/library/metadata/{id}?includeMarkers=1` | GET | Tautulli | Partial | -| `/library/metadata/{id}/grandchildren` | GET | Tautulli | Absent | -| `/library/sections/{id}/recentlyAdded` | GET | Tautulli | Absent | -| `/library/recentlyAdded` | GET | Tautulli | Absent | -| `/hubs/home/recentlyAdded` | GET | Tautulli | Absent | -| `/hubs/search?includeCollections=1` | GET | Tautulli | Partial | -| `/library/sections/{id}/label` | GET | Tautulli, Kometa | Absent | -| `/sync/items/{id}` | GET | Tautulli | Absent | -| `/sync/transcodeQueue` | GET | Tautulli | Absent | -| `/myplex/account` | GET | Tautulli | Absent | -| `/myplex/refreshReachability` | PUT | Tautulli | Absent | -| `/servers` | GET | Tautulli | Absent | -| `/library/sections/{id}/all?includeGuids=1` | GET | Overseerr | Partial | -| `/library/sections/{id}/all?addedAt>>={ts}` | GET | Overseerr | Partial | -| `discover.provider.plex.tv/library/sections/watchlist/all` | GET | Overseerr, Jellyseerr | Absent | -| `discover.provider.plex.tv/library/metadata/{id}` | GET | Overseerr, Jellyseerr | Absent | -| `metadata.provider.plex.tv/library/metadata/{id}` | GET | Tautulli | Absent | -| `/library/metadata/{id}/posters` | POST | Kometa | Absent | -| `/library/metadata/{id}/arts` | POST | Kometa | Absent | -| `/library/sections/{id}/refresh` | GET/POST | Kometa | Absent | -| `/library/sections/{id}/emptyTrash` | GET/POST | Kometa | Absent | -| `/library/sections/{id}/optimize` | GET/POST | Kometa | Absent | -| `/library/optimize` | GET/POST | Kometa | Absent | -| `/clients` | GET | HA | Absent | -| `/accounts` | GET | HA (via python-plexapi) | Absent | -| `/:/websockets/notifications` | WS | Tautulli, HA | Absent | -| `plex.tv/api/v2/pins` | POST | Tautulli, Overseerr, Bazarr | Absent | -| `plex.tv/api/v2/pins/{id}` | GET | Tautulli, Overseerr, Bazarr | Absent | -| `plex.tv/api/resources?includeHttps=1` | GET | Tautulli, Overseerr, HA | Absent | -| `plex.tv/users/account` / `users/account.json` | GET | Tautulli, Overseerr | Absent | -| `plex.tv/devices.xml` | GET | Tautulli | Absent | -| `plex.tv/pms/servers.xml` | GET | Tautulli | Absent | -| `plex.tv/api/servers/{machineId}/shared_servers` | GET | Tautulli | Absent | -| `plex.tv/servers/{machineId}/sync_lists` | GET | Tautulli | Absent | -| `plex.tv/api/downloads/{channel}.json` | GET | Tautulli | Absent | -| `plex.tv/api/v2/cloud_server` | GET | Tautulli | Absent | -| `plex.tv/api/v2/geoip` | GET | Tautulli | Absent | -| `plex.tv/api/v2/ping` | GET | Tautulli, Overseerr | Absent | -| `plex.tv/:/ip` | GET | Tautulli | Absent | -| Plex Webhook payload schema | POST (inbound) | Bazarr, HA, Notifiarr | Absent | - ---- - -## Priority gaps (most impactful missing endpoints) - -### 1. plex.tv Authentication & Discovery (`CRITICAL`) -The OAuth PIN flow (`/api/v2/pins`) and server discovery (`/api/resources?includeHttps=1`) are fundamental to every modern integration. Without these, client apps cannot authenticate users or discover connection URLs. These are completely missing. - -### 2. plex.tv Account & Sharing Endpoints (`HIGH`) -- `/users/account` and `/users/account.json` — required for account info, Plex Pass status, and home-user detection. -- `/api/servers/{machineId}/shared_servers` — required for understanding which libraries are shared with which users. -- `/api/users` — present in spec but only as XML; JSON variant used by some tools is not documented. - -### 3. Plex Discover / Watchlist Provider (`HIGH`) -- `discover.provider.plex.tv/library/sections/watchlist/all` -- `discover.provider.plex.tv/library/metadata/{id}` -These are now the canonical endpoints for Plex Watchlist data. Overseerr/Jellyseerr depend on them. The older `metadata.provider.plex.tv` endpoint is also used by Tautulli for GUID-based metadata lookups. - -### 4. Real-Time Websocket (`HIGH`) -- `/:/websockets/notifications` is the primary real-time event bus for sessions, timeline updates, and server status. Both Tautulli and Home Assistant rely on it. The spec documents SSE/EventSource but not the websocket path or its message schema (`NotificationContainer`, `PlaySessionStateNotification`, `TimelineEntry`, `ReachabilityNotification`). - -### 5. Media Metadata Parameters (`MEDIUM-HIGH`) -- `includeMarkers=1` on `/library/metadata/{id}` — critical for intro/credits skip detection (used by Tautulli and many clients). -- `includeGuids=1` on `/library/sections/{id}/all` — critical for matching items to external databases (TMDB, TVDB) in Overseerr/Kometa. -- `includeCollections=1` on `/hubs/search` — affects search behavior for collection discovery. - -### 6. Library & Server Maintenance Endpoints (`MEDIUM`) -- `/library/sections/{id}/refresh`, `/emptyTrash`, `/optimize` -- `/library/optimize` -- `/library/metadata/{id}/posters` and `/arts` (image upload) -These are essential for automation tools like Kometa and are well-known in the community but absent from the spec. - -### 7. Webhook Schema (`MEDIUM`) -The webhook payload structure and event types are documented only in Plex support articles. A formal OpenAPI schema for the multipart JSON payload would help webhook consumers (Bazarr, Home Assistant, Notifiarr, Tautulli) validate inputs. - -### 8. Local Server Utility Endpoints (`LOW-MEDIUM`) -- `/servers` — local server list -- `/library/recentlyAdded` and `/library/sections/{id}/recentlyAdded` — standard "new content" queries -- `/library/metadata/{id}/grandchildren` — useful for show→episode traversal without intermediate season fetches -- `/sync/items/{id}` and `/sync/transcodeQueue` — mobile sync management diff --git a/review/python_plexapi_gap_analysis.md b/review/python_plexapi_gap_analysis.md deleted file mode 100644 index dd212a82f..000000000 --- a/review/python_plexapi_gap_analysis.md +++ /dev/null @@ -1,302 +0,0 @@ -# python-plexapi Gap Analysis - -**Date:** 2026-06-03 -**SDK Version Analyzed:** master (pkkid/python-plexapi) -**OpenAPI Spec:** plex-api-spec.yaml (local) - ---- - -## 1. Endpoints in SDK but Missing from Spec - -### PMS Endpoints (Local Server) - -| Path | Method | Source File | What it does | -|------|--------|-------------|--------------| -| `/library` | GET | `server.py` | Returns the root `Library` object (used by `PlexServer.library`) | -| `/library/sections/` | GET | `server.py` | Fallback for non-owners to list sections (used when `/library` throws `BadRequest`) | -| `/clients` | GET | `server.py` | Lists connected `PlexClient` objects (`PlexServer.clients()`) | -| `/system/agents` | GET | `server.py` | Lists available metadata agents (`PlexServer.agents()`) | -| `/accounts` | GET | `server.py` | Lists local system accounts (`PlexServer.systemAccounts()`) | -| `/devices` | GET | `server.py` | Lists local system devices (`PlexServer.systemDevices()`) | -| `/services/browse` | GET | `server.py` | Browses filesystem paths (`PlexServer.browse()`) | -| `/services/browse/{base64path}` | GET | `server.py` | Browses a specific filesystem path | -| `/diagnostics/databases` | GET | `server.py` | Downloads server DB diagnostics (`PlexServer.downloadDatabases()`) | -| `/diagnostics/logs` | GET | `server.py` | Downloads server logs (`PlexServer.downloadLogs()`) | -| `/statistics/bandwidth` | GET | `server.py` | Dashboard bandwidth data (`PlexServer.bandwidth()`) | -| `/statistics/resources` | GET | `server.py` | Dashboard resource data (`PlexServer.resources()`) | -| `/sync/refreshSynclists` | PUT | `server.py` | Forces PMS to download new SyncList from plex.tv | -| `/sync/refreshContent` | PUT | `server.py` | Forces PMS to refresh content for known SyncLists | -| `/playlists?type=42` | GET / DELETE | `server.py` | Optimized/Conversion items (`optimizedItems()`, `conversions()`) | -| `/playQueues/1` | GET | `server.py` | Conversion queue (`PlexServer.conversions()`) | -| `/hubs/continueWatching/items` | GET | `server.py` | Continue Watching hub items (`PlexServer.continueWatching()`) | -| `/:/progress` | GET | `base.py` | Updates watch progress (`Playable.updateProgress()`) | -| `/actions/removeFromContinueWatching` | PUT | `video.py` | Removes item from Continue Watching (`Movie.removeFromContinueWatching()`) | -| `/library/metadata/{id}/nearest` | GET | `audio.py` | Sonically similar items (`Audio.sonicallySimilar()`) | -| `/library/sections/{id}/computePath` | GET | `library.py` | Sonic adventure path (`MusicSection.sonicAdventure()`) | - -### Plex.tv / MyPlex Endpoints (Cloud Auth) - -The spec is PMS-centric and does **not** document any plex.tv cloud APIs. python-plexapi relies heavily on these for authentication, sharing, and sync. - -| Path | Method | Source File | What it does | -|------|--------|-------------|--------------| -| `https://plex.tv/api/v2/user` | GET | `myplex.py` | MyPlex account profile | -| `https://plex.tv/api/v2/users/signin` | POST | `myplex.py` | Username/password sign-in (supports 2FA) | -| `https://plex.tv/api/v2/users/signout` | DELETE | `myplex.py` | Invalidate token | -| `https://plex.tv/api/v2/ping` | GET | `myplex.py` | Token refresh ping | -| `https://plex.tv/api/v2/user/webhooks` | GET / POST | `myplex.py` | Webhook management | -| `https://plex.tv/api/v2/user/{uuid}/settings/opt_outs` | GET | `myplex.py` | Online media source opt-outs | -| `https://plex.tv/api/v2/pins/link` | PUT | `myplex.py` | PIN-based linking | -| `https://plex.tv/api/v2/user/view_state_sync` | PUT | `myplex.py` | View state sync | -| `https://plex.tv/api/servers/{machineId}/shared_servers` | POST | `myplex.py` | Share library with friend | -| `https://plex.tv/api/home/users` | GET / POST | `myplex.py` | Plex Home user list / creation | -| `https://plex.tv/api/home/users/{userId}` | DELETE / PUT | `myplex.py` | Remove / update home user | -| `https://plex.tv/api/v2/home/users/restricted/{userId}` | PUT | `myplex.py` | Managed user restrictions | -| `https://plex.tv/api/servers/{machineId}` | GET | `myplex.py` | Server details for sharing | -| `https://plex.tv/api/v2/sharings/{userId}` | PUT / DELETE | `myplex.py` | Update/remove friend share | -| `https://plex.tv/api/claim/token.json` | GET | `myplex.py` | Claim token for new servers | -| `https://sonos.plex.tv/resources` | GET | `myplex.py` | Sonos speaker discovery | -| `https://vod.provider.plex.tv/hubs` | GET | `myplex.py` | VOD hub items | -| `https://music.provider.plex.tv/hubs` | GET | `myplex.py` | Tidal hub items | -| `https://plex.tv/devices/{clientId}/sync_items` | GET / POST | `sync.py` | Mobile sync item list / creation | - -### Client Remote-Control Endpoints - -The spec does not cover the Plex Client Control Protocol (used by `PlexClient`). - -| Path Prefix | Methods | Source File | What it does | -|-------------|---------|-------------|--------------| -| `/player/{command}` | GET (via proxy) | `client.py` | Playback/navigation remote control (pause, play, seek, etc.) | -| `/player/playback/playMedia` | GET (via proxy) | `client.py` | Start playback of a media item on a client | -| `/player/playback/setParameters` | GET (via proxy) | `client.py` | Set shuffle/repeat/volume | -| `/player/playback/setStreams` | GET (via proxy) | `client.py` | Set active audio/subtitle/video streams | -| `/player/timeline/poll` | GET (via proxy) | `client.py` | Poll client playback timeline | -| `/resources` | GET | `client.py` | Client capabilities and device info | - ---- - -## 2. Schema Field Mismatches - -Fields that python-plexapi parses from XML responses but which are **not documented** in the corresponding OpenAPI schemas. - -### `ServerConfiguration` (root `/`) - -| SDK Field | Spec Status | Notes | -|-----------|-------------|-------| -| `diagnostics` | **Type mismatch** | Spec: `string`. SDK parses as `list` (comma-separated diagnostics modules). | -| `transcoderVideoBitrates` | **Type mismatch** | Spec: untyped / description only. SDK parses as `list`. | -| `transcoderVideoQualities` | **Type mismatch** | Spec: `string`. SDK parses as `list`. | -| `transcoderVideoResolutions` | **Type mismatch** | Spec: description only. SDK parses as `list`. | -| `ownerFeatures` | **Type mismatch** | Spec: `string` (comma-separated). SDK parses as `list`. | - -### `Metadata` (Movies, Shows, Episodes, Tracks, etc.) - -| SDK Field | Found In | Spec Status | -|-----------|----------|-------------| -| `artBlurHash` | `video.py`, `audio.py` | **Missing** from `Metadata` schema | -| `thumbBlurHash` | `video.py`, `audio.py` | **Missing** from `Metadata` schema | -| `lastRatedAt` | `video.py`, `audio.py` | **Missing** from `Metadata` schema | -| `editionTitle` | `video.py` (Movie) | **Missing** | -| `languageOverride` | `video.py` (Movie, Show) | **Missing** | -| `enableCreditsMarkerGeneration` | `video.py` (Movie, Show) | **Missing** | -| `useOriginalTitle` | `video.py` (Movie, Show) | **Missing** | -| `slug` | `video.py` (Movie, Show) | **Missing** | -| `skipCount` | `audio.py` (Track) | **Missing** | -| `musicAnalysisVersion` | `audio.py` (Audio base) | **Missing** | -| `distance` | `audio.py` (Audio base) | **Missing** (sonic distance) | -| `sourceURI` | `video.py`, `audio.py`, `playlist.py` | **Missing** (remote/shared server items) | -| `playlistItemID` | `base.py` (Playable) | **Missing** | -| `playQueueItemID` | `base.py` (Playable) | **Missing** | - -### `Media` - -| SDK Field | Found In | Spec Status | -|-----------|----------|-------------| -| `uuid` | `media.py` | **Missing** from `Media` schema | -| `selected` | `media.py` | **Missing** | -| `title` | `media.py` | Present in spec ✅ | - -### `Part` - -| SDK Field | Found In | Spec Status | -|-----------|----------|-------------| -| `protocol` | `media.py` | **Missing** | -| `packetLength` | `media.py` | **Missing** | -| `requiredBandwidths` | `media.py` | **Missing** | -| `syncItemId` | `media.py` | **Missing** | -| `syncState` | `media.py` | **Missing** | -| `deepAnalysisVersion` | `media.py` | **Missing** | -| `decision` | `media.py` | Present in `MediaContainerWithDecision` ✅ | - -### `Stream` (Video, Audio, Subtitle, Lyric) - -| SDK Field | Found In | Spec Status | -|-----------|----------|-------------| -| `bitrateMode` | `media.py` (AudioStream) | **Missing** | -| `visualImpaired` | `media.py` (AudioStream) | **Missing** | -| `albumGain` | `media.py` (AudioStream) | **Missing** (track-only loudness) | -| `albumPeak` | `media.py` (AudioStream) | **Missing** | -| `albumRange` | `media.py` (AudioStream) | **Missing** | -| `endRamp` | `media.py` (AudioStream) | **Missing** | -| `gain` | `media.py` (AudioStream) | **Missing** | -| `loudness` | `media.py` (AudioStream) | **Missing** | -| `lra` | `media.py` (AudioStream) | **Missing** | -| `peak` | `media.py` (AudioStream) | **Missing** | -| `startRamp` | `media.py` (AudioStream) | **Missing** | -| `providerTitle` | `media.py` (SubtitleStream) | **Missing** | -| `score` | `media.py` (SubtitleStream) | **Missing** | -| `sourceKey` | `media.py` (SubtitleStream) | **Missing** | -| `transient` | `media.py` (SubtitleStream) | **Missing** | -| `userID` | `media.py` (SubtitleStream) | **Missing** | -| `minLines` | `media.py` (LyricStream) | **Missing** | -| `provider` | `media.py` (LyricStream) | **Missing** | -| `timed` | `media.py` (LyricStream) | **Missing** | -| `extendedDisplayTitle` | `media.py` (MediaPartStream) | Present in spec ✅ | -| `languageTag` | `media.py` (MediaPartStream) | Present in spec ✅ | -| `streamIdentifier` | `media.py` (MediaPartStream) | Present in spec ✅ | -| `perfectMatch` | `media.py` (SubtitleStream) | **Missing** | - -### `Collection` - -| SDK Field | Found In | Spec Status | -|-----------|----------|-------------| -| `collectionFilterBasedOnUser` | `collection.py` | **Missing** | -| `collectionMode` | `collection.py` | **Missing** | -| `collectionPublished` | `collection.py` | **Missing** | -| `collectionSort` | `collection.py` | **Missing** | -| `artBlurHash` | `collection.py` | **Missing** | -| `thumbBlurHash` | `collection.py` | **Missing** | -| `userRating` | `collection.py` | **Missing** | -| `lastRatedAt` | `collection.py` | **Missing** | - -### `Playlist` - -| SDK Field | Found In | Spec Status | -|-----------|----------|-------------| -| `durationInSeconds` | `playlist.py` | **Missing** | -| `radio` | `playlist.py` | **Missing** | -| `titleSort` | `playlist.py` | **Missing** | -| `librarySectionID` | `playlist.py` | Present in spec ✅ | -| `librarySectionKey` | `playlist.py` | Present in spec ✅ | -| `librarySectionTitle` | `playlist.py` | Present in spec ✅ | - -### `PlayQueue` - -| SDK Field | Found In | Spec Status | -|-----------|----------|-------------| -| `playQueueLastAddedItemID` | `playqueue.py` | Present in spec ✅ | -| `playQueueSelectedItemID` | `playqueue.py` | Present in spec ✅ | -| `playQueueSelectedItemOffset` | `playqueue.py` | Present in spec ✅ | -| `playQueueSelectedMetadataItemID` | `playqueue.py` | **Missing** | -| `playQueueShuffled` | `playqueue.py` | Present in spec ✅ | -| `playQueueSourceURI` | `playqueue.py` | Present in spec ✅ | -| `playQueueTotalCount` | `playqueue.py` | Present in spec ✅ | -| `playQueueVersion` | `playqueue.py` | Present in spec ✅ | - ---- - -## 3. Parameter / Query Gaps - -### Missing or Under-Documented Query Parameters - -| Parameter | Where Used | Spec Status | -|-----------|------------|-------------| -| `includeGuids` | Virtually every `fetchItems`/`fetchItem` call in SDK | Only documented on `/library/sections/{sectionId}/all` | -| `checkFiles` | `_INCLUDES` in `base.py` (`PlexPartialObject.reload()`) | Mentioned in description but not a formal parameter on most metadata endpoints | -| `includeMarkers` | `_INCLUDES` in `base.py` | Not formally documented on `/library/metadata/{ids}` | -| `includeChapters` | `_INCLUDES` in `base.py` | Not formally documented on most endpoints | -| `includeExternalMedia` | `_INCLUDES` in `base.py` | Missing from most endpoints | -| `includeExtras` | `_INCLUDES` in `base.py` | Missing from most endpoints | -| `includeRelated` | `_INCLUDES` in `base.py` | Missing from most endpoints | -| `includeOnDeck` | `_INCLUDES` in `base.py` | Missing | -| `includePopularLeaves` | `_INCLUDES` in `base.py` | Missing | -| `includeReviews` | `_INCLUDES` in `base.py` | Missing | -| `includeStations` | `_INCLUDES` in `base.py` | Missing | -| `includeAllConcerts` | `_INCLUDES` in `base.py` | Missing | -| `includeConcerts` | `_INCLUDES` in `base.py` | Missing | -| `includeBandwidths` | `_INCLUDES` in `base.py` | Missing | -| `includeLoudnessRamps` | `_INCLUDES` in `base.py` | Missing | -| `includeGeolocation` | `_INCLUDES` in `base.py` | Missing | -| `includeChildren` | `_INCLUDES` in `base.py` | Missing | -| `includeFields` | `_INCLUDES` in `base.py` | Mentioned in `/status/sessions/history/all` description only | -| `excludeElements` | `_EXCLUDES` in `base.py` | Mentioned in history description only | -| `excludeFields` | `_EXCLUDES` in `base.py` | Mentioned in history description only | -| `skipRefresh` | `_EXCLUDES` in `base.py` | Mentioned on `/library/metadata/{ids}/refresh` | -| `asyncAugmentMetadata=1` | `video.py` (`Video.augmentation()`) | **Missing** | -| `includeFiles` | `server.py` (`PlexServer.browse()`) | **Missing** (endpoint itself is missing) | -| `type=42` | `server.py` (`optimizedItems()`, `conversions()`) | **Missing** from `/playlists` schema | -| `timespan` (values: 1-6) | `server.py` (`bandwidth()`) | **Missing** from `/statistics/bandwidth` (endpoint missing) | -| `accountID`, `deviceID`, `lan` | `server.py` (`bandwidth()`) | **Missing** | -| `playlistType` | `server.py` (`playlists()`) | Present on `/playlists` ✅ | -| `sectionID` | `server.py` (`playlists()`) | Present on `/playlists` ✅ | -| `metadataItemID` | `server.py` (`history()`) | Present on `/status/sessions/history/all` ✅ | -| `viewedAt>` | `server.py` (`history()`) | Present ✅ | - -### Header Usage Differences - -| Header | SDK Usage | Spec Status | -|--------|-----------|-------------| -| `X-Plex-Container-Start` | Sent on every batched `fetchItems` call | Documented as response header; not always listed as request header | -| `X-Plex-Container-Size` | Sent on every batched `fetchItems` call | Documented as response header; not always listed as request header | -| `X-Plex-Session-Identifier` | Sent on timeline posts | Documented on `/:/timeline` ✅ | - ---- - -## 4. Auth Flow Differences - -| Aspect | python-plexapi | OpenAPI Spec | -|--------|----------------|--------------| -| **PMS Auth** | `X-Plex-Token` header (or `X-Plex-Token` query param via `url()`) | `token` security scheme (header-based) ✅ | -| **Plex.tv Sign-In** | `POST https://plex.tv/api/v2/users/signin` with form data (`login`, `password`, `rememberMe`, `verificationCode`) | **Not documented** (spec is PMS-only) | -| **JWT Auth** | `MyPlexJWTLogin` uses Ed25519 keypairs to sign JWTs for auth | **Not documented** | -| **Claim Flow** | `MyPlexAccount.claimToken()` fetches token from `plex.tv/api/claim/token.json`, then `POST /myplex/claim` on PMS | Claim endpoint on PMS is **missing** from spec | -| **Home User Switch** | `POST https://plex.tv/api/home/users/{id}/switch` returns new auth token | **Not documented** | -| **Token Scope** | `PlexServer.createToken(type='delegation', scope='all')` | `/security/token` is present ✅ | -| **User Switching** | `PlexServer.switchUser()` uses admin token to fetch user token, then creates new `PlexServer` instance | Not documented as a formal flow | - ---- - -## 5. Notes on Implementation Patterns - -### XML-First Parsing -- The SDK parses **XML** responses, not JSON. All object attributes are read from XML element attributes (`data.attrib.get('...')`). -- The SDK uses **camelCase** throughout to match Plex's XML attribute names exactly. -- The OpenAPI spec describes JSON schemas, but many fields only appear in XML responses (e.g. `artBlurHash`, `thumbBlurHash`). - -### Partial Object Auto-Reload -- `PlexPartialObject` implements lazy loading: accessing a `None` attribute triggers `_reload()` with `_INCLUDES`/`_EXCLUDES` parameters. -- This means the SDK relies heavily on metadata detail endpoints with optional include/exclude parameters that are not fully documented in the spec. - -### Client-Side Filtering -- `fetchItems()` supports client-side operators (`__gt`, `__contains`, `__regex`, etc.) applied to XML attributes after the server response. -- These operators are **not** server-side query parameters; they are post-processing filters in Python. - -### Batched Pagination -- `fetchItems()` automatically paginates using `X-Plex-Container-Start` and `X-Plex-Container-Size` headers. -- The SDK does not use traditional `offset`/`limit` query parameters for pagination; it uses Plex's header-based pagination protocol. - -### Multi-Server Awareness -- Playlist items can have `sourceURI` pointing to a different server. The SDK resolves these by looking up the server via `myPlexAccount().resource(serverID).connect()`. -- This cross-server item resolution is not described in the spec. - -### Playback & Sync URIs -- The SDK constructs custom `library://` and `server://` URIs for playlists, collections, and sync items. -- These URI schemes are internal to Plex and are used as `uri` parameters when creating playlists, collections, and sync items. - -### Client Proxy Pattern -- `PlexClient` can send commands directly to the client device **or** proxy them through the PMS using `X-Plex-Target-Client-Identifier`. -- The proxied client commands are sent to `/player/{command}` on the PMS, which forwards them to the client. This proxy path is not documented in the spec. - ---- - -## Summary - -The python-plexapi SDK covers a **significantly broader surface area** than the current OpenAPI spec, particularly in these areas: - -1. **Plex.tv cloud APIs** (auth, sharing, sync, home users, webhooks) -2. **Local PMS management endpoints** (diagnostics, statistics, browsing, agents, devices, accounts) -3. **Client remote control protocol** (navigation, playback, timeline polling) -4. **Fine-grained metadata include/exclude parameters** (the `_INCLUDES` / `_EXCLUDES` matrix) -5. **XML-specific fields** (blur hashes, loudness ramps, sync states, on-demand subtitle metadata) - -The spec is strongest on core media provider APIs (`/library/metadata`, `/library/sections`, `/playlists`, `/playQueues`, `/transcode`) but lacks many operational and administrative endpoints that the SDK uses daily. diff --git a/review/undocumented_endpoints_research.md b/review/undocumented_endpoints_research.md deleted file mode 100644 index 78a61e4b3..000000000 --- a/review/undocumented_endpoints_research.md +++ /dev/null @@ -1,423 +0,0 @@ -# Undocumented & Hidden Plex API Endpoints - -> **Research date:** 2026-06-03 -> **Scope:** Public forums, GitHub, Gists, Reddit, CVE write-ups, and the official `plex-api-spec.yaml` (≈17k lines). -> **Goal:** Catalog endpoints, patterns, auth quirks, and XML/JSON behaviors that are **not** present in the current OpenAPI spec. - ---- - -## How to read this document - -* **In spec?** = Already documented in `plex-api-spec.yaml`. -* **Not in spec** = Missing from the current spec and should be considered for addition. -* Sources are URLs where the endpoint or behavior was observed in the wild. - ---- - -## plex.tv API v2 (Account, Auth, Devices, Webhooks) - -The current spec only documents three `plex.tv/api/v2` paths (`/user`, `/users/signin`, `/resources`). The v2 surface is much larger. - -### Account & User - -| Path | Method | What it does | Auth | In spec? | Source | -|------|--------|--------------|------|----------|--------| -| `https://plex.tv/api/v2/user` | `GET` | Full account object (authToken, home, subscription, etc.) | `X-Plex-Token` | ✅ Yes | — | -| `https://plex.tv/api/v2/users/signin` | `POST` | Username/password sign-in | Basic / form | ✅ Yes | — | -| `https://plex.tv/api/v2/users/signout` | `DELETE` | Invalidate token | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://plex.tv/api/v2/features` | `GET` | Plex Pass feature flags for the account | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/plex-v2-api-documentation/444928) | -| `https://plex.tv/api/v2/friends` | `GET` | List of friends & shared users | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/plex-v2-api-documentation/444928) | -| `https://plex.tv/api/v2/home` | `GET` | Plex Home user list | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/plex-v2-api-documentation/444928) | -| `https://plex.tv/api/v2/server` | `GET` | Server association info for the logged-in user | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/plex-v2-api-documentation/444928) | -| `https://plex.tv/api/v2/users/password` | `POST` | Change/reset password | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/plex-v2-api-documentation/444928) | -| `https://plex.tv/api/v2/ping` | `GET` | Health / latency check | None | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://plex.tv/api/v2/user/view_state_sync` | `PUT` | Enable/disable watch-state sync consent | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://plex.tv/api/v2/user/{userUUID}/settings/opt_outs` | `GET` | Online-media-source opt-outs (e.g. `opt_in`, `opt_out`, `opt_out_managed`) | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | - -### Sharing & Invites - -| Path | Method | What it does | Auth | In spec? | Source | -|------|--------|--------------|------|----------|--------| -| `https://plex.tv/api/v2/shared_servers` | `POST` | Share a server with a user (managed or friend) | `X-Plex-Token` + `X-Plex-Client-Identifier` | ❌ No | [Plexopedia](https://www.plexopedia.com/plex-media-server/api-plextv/share-server/) | -| `https://plex.tv/api/v2/sharings/{userId}` | `PUT` | Update friend filters (allowSync, allowCameraUpload, filterMovies, etc.) | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://plex.tv/api/v2/sharings/{userId}` | `DELETE` | Remove a share / friend | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://plex.tv/api/v2/home/users/restricted/{userId}` | `PUT` | Update restricted (managed) home user settings | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://plex.tv/api/v2/server/access_tokens` | `GET` | List access tokens for the server (server-device token only) | `X-Plex-Token` | ❌ No | [CVE-2025-34158 write-up](https://github.com/lufinkey/vulnerability-research/blob/main/CVE-2025-34158/README.md) | -| `https://plex.tv/api/v2/server/users/features` | `GET` | Features enabled per shared user | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/request-for-admin-expert-review-server-claimed-but-all-tokens-return-403-forbidden/932522) | - -### PIN & OAuth - -| Path | Method | What it does | Auth | In spec? | Source | -|------|--------|--------------|------|----------|--------| -| `https://plex.tv/api/v2/pins` | `POST` | Create a 4-character PIN for device linking | `X-Plex-Client-Identifier` | ❌ No | [python-plexapi docs](https://python-plexapi.readthedocs.io/en/latest/modules/myplex.html) | -| `https://plex.tv/api/v2/pins/{pinId}` | `GET` | Poll PIN status; returns `authToken` when claimed | `X-Plex-Client-Identifier` | ❌ No | [plexargod repo](https://github.com/danielewood/plexargod) | -| `https://plex.tv/api/v2/pins/link` | `PUT` | Link a PIN to an account (used by OAuth flow) | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://clients.plex.tv/api/v2/pins` | `POST` | Alternative PIN endpoint (clients subdomain) | `X-Plex-Client-Identifier` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | - -### JWT Device Registration (new as of 2025) - -| Path | Method | What it does | Auth | In spec? | Source | -|------|--------|--------------|------|----------|--------| -| `https://clients.plex.tv/api/v2/auth/jwk` | `POST` | Register device public key (JWK) | `X-Plex-Token` + `X-Plex-Client-Identifier` | ❌ No | [Plex Pro Week blog](https://www.plex.tv/blog/plex-pro-week-25-api-unlocked/), [JonnyWong16 gist](https://gist.github.com/JonnyWong16/6720b9d9edc5686c72957d94b0d5b381) | -| `https://clients.plex.tv/api/v2/auth/nonce` | `GET` | Get a nonce to sign in the client JWT | `X-Plex-Client-Identifier` | ❌ No | [JonnyWong16 gist](https://gist.github.com/JonnyWong16/6720b9d9edc5686c72957d94b0d5b381) | -| `https://clients.plex.tv/api/v2/auth/token` | `POST` | Exchange signed client JWT for a Plex JWT | `X-Plex-Client-Identifier` | ❌ No | [JonnyWong16 gist](https://gist.github.com/JonnyWong16/6720b9d9edc5686c72957d94b0d5b381) | -| `https://clients.plex.tv/api/v2/auth/keys` | `GET` | Plex public JWKs for signature verification | None | ❌ No | [JonnyWong16 gist](https://gist.github.com/JonnyWong16/6720b9d9edc5686c72957d94b0d5b381) | - -**JWT quirks** -* Tokens expire after **7 days**. -* Must be refreshed via the keypair flow. -* Scope list: `username`, `email`, `friendly_name`, `restricted`, `anonymous`, `joinedAt`. -* Plex mentions **rate limiting** is active on these endpoints. - -### Webhooks Configuration - -| Path | Method | What it does | Auth | In spec? | Source | -|------|--------|--------------|------|----------|--------| -| `https://plex.tv/api/v2/user/webhooks` | `GET` | List configured webhook URLs | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://plex.tv/api/v2/user/webhooks` | `POST` | Add a webhook URL | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | - -### Device Certificate (used during server claim) - -| Path | Method | What it does | Auth | In spec? | Source | -|------|--------|--------------|------|----------|--------| -| `https://plex.tv/api/v2/devices/{deviceId}/certificate/subject` | `GET` | Get cert subject | `X-Plex-Token` | ❌ No | [Plex Forum logs](https://forums.plex.tv/t/fresh-install-unable-to-claim-ubuntu/853466) | -| `https://plex.tv/api/v2/devices/{deviceId}/certificate/csr` | `PUT` | Upload CSR | `X-Plex-Token` | ❌ No | [Plex Forum logs](https://forums.plex.tv/t/fresh-install-unable-to-claim-ubuntu/853466) | -| `https://plex.tv/api/v2/devices/{deviceId}/certificate/download` | `GET` | Download signed cert (may 202 / retry) | `X-Plex-Token` | ❌ No | [Plex Forum logs](https://forums.plex.tv/t/fresh-install-unable-to-claim-ubuntu/853466) | -| `https://plex.tv/api/v2/release_channels` | `GET` | Release channel info (seen during claim) | `X-Plex-Token` | ❌ No | [Plex Forum](https://forums.plex.tv/t/unable-to-set-my-claim-token/922072) | - -### Legacy v1 plex.tv endpoints still in use - -| Path | Method | What it does | Auth | In spec? | Source | -|------|--------|--------------|------|----------|--------| -| `https://plex.tv/pins.xml` | `POST` | Legacy PIN creation (returns XML) | `X-Plex-Client-Identifier` | ❌ No | [plexargod repo](https://github.com/danielewood/plexargod) | -| `https://plex.tv/pins/{pinId}` | `GET` | Legacy PIN check (returns XML) | `X-Plex-Client-Identifier` | ❌ No | [plexargod repo](https://github.com/danielewood/plexargod) | -| `https://plex.tv/api/resources` | `GET` | Published server connections (XML) | `X-Plex-Token` | ❌ No | [plexargod repo](https://github.com/danielewood/plexargod) | -| `https://plex.tv/api/users/` | `GET` | Friends list (XML) | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://plex.tv/api/servers/{machineId}` | `GET` | Server info (XML) | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://plex.tv/api/servers/{machineId}/shared_servers` | `POST` | Share server (XML) | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://clients.plex.tv/devices.xml` | `GET` | Authorized devices with tokens (XML) | `X-Plex-Token` | ❌ No | [CVE-2025-34158 write-up](https://github.com/lufinkey/vulnerability-research/blob/main/CVE-2025-34158/README.md) | - ---- - -## Cloud Provider Endpoints (`tv.plex.provider.*`) - -These are **not** in the spec at all. They are used by Plex clients for watchlists, search, and streaming metadata. - -### `metadata.provider.plex.tv` — **Deprecated** (moved to `discover.provider.plex.tv`) - -| Path | Method | What it does | Auth | In spec? | Source | -|------|--------|--------------|------|----------|--------| -| `https://metadata.provider.plex.tv/library/sections/watchlist/all` | `GET` | Fetch user watchlist | `X-Plex-Token` | ❌ No | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | -| `https://metadata.provider.plex.tv/actions/removeFromWatchlist` | `POST` | Remove from watchlist | `X-Plex-Token` | ❌ No | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | -| `https://metadata.provider.plex.tv/actions/addToWatchlist` | `POST` | Add to watchlist | `X-Plex-Token` | ❌ No | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | - -### `discover.provider.plex.tv` — **Current** - -| Path | Method | What it does | Auth | In spec? | Source | -|------|--------|--------------|------|----------|--------| -| `https://discover.provider.plex.tv/library/search` | `GET` | Search movies & shows in Discover | `X-Plex-Token` | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://discover.provider.plex.tv/library/sections/watchlist/all` | `GET` | New watchlist endpoint | `X-Plex-Token` | ❌ No | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | -| `https://discover.provider.plex.tv/actions/removeFromWatchlist` | `POST` | New remove-from-watchlist | `X-Plex-Token` | ❌ No | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | -| `https://discover.provider.plex.tv/actions/addToWatchlist` | `POST` | New add-to-watchlist | `X-Plex-Token` | ❌ No | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | - -**Search query params** (from `searchDiscover`): -* `query`, `limit`, `searchTypes` (`movies,tv` or `movie` or `show`), `searchProviders` (`discover`, `discover,PLEXAVOD`, `discover,PLEXAVOD,PLEXTVOD`), `includeMetadata=1` -* Requires header `Accept: application/json`. - -### Other provider hostnames observed - -| Hostname | Purpose | In spec? | Source | -|----------|---------|----------|--------| -| `https://vod.provider.plex.tv` | VOD streaming / metadata | ❌ No | [Netify](https://www.netify.ai/resources/hostnames/vod.provider.plex.tv), [python-plexapi](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://music.provider.plex.tv` | Music provider | ❌ No | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `tv.plex.provider.vod` | VOD provider identifier | ❌ No | [Plex Pro Week blog](https://www.plex.tv/blog/plex-pro-week-25-api-unlocked/) | -| `tv.plex.provider.music` | Music provider identifier | ❌ No | [Plex Pro Week blog](https://www.plex.tv/blog/plex-pro-week-25-api-unlocked/) | -| `tv.plex.provider.discover` | Discover provider identifier | ❌ No | [Plex Pro Week blog](https://www.plex.tv/blog/plex-pro-week-25-api-unlocked/) | -| `tv.plex.provider.metadata` | Metadata provider identifier | ❌ No | [Plex Pro Week blog](https://www.plex.tv/blog/plex-pro-week-25-api-unlocked/) | - ---- - -## Server Management (undiscovered preferences, system endpoints) - -### System & Diagnostics - -| Path | Method | What it does | Auth | In spec? | Source | -|------|--------|--------------|------|----------|--------| -| `GET /system/agents` | `GET` | List metadata agents | `X-Plex-Token` (admin) | ❌ No | Unofficial wiki / community knowledge | -| `GET /system/agents/{agentId}` | `GET` | Agent details & settings | `X-Plex-Token` (admin) | ❌ No | Unofficial wiki / community knowledge | -| `GET /system/settings` | `GET` | System-level settings | `X-Plex-Token` (admin) | ❌ No | Unofficial wiki / community knowledge | -| `GET /system/updates` | `GET` | Check for PMS updates | `X-Plex-Token` (admin) | ❌ No | Unofficial wiki / community knowledge | -| `GET /diagnostics` | `GET` | Server diagnostics | `X-Plex-Token` (admin) | ❌ No | Unofficial wiki / community knowledge | -| `GET /sync` | `GET` | Sync status overview | `X-Plex-Token` | ❌ No | Unofficial wiki / community knowledge | -| `GET /sync/items` | `GET` | Sync items list | `X-Plex-Token` | ❌ No | Unofficial wiki / community knowledge | -| `GET /sync/queue` | `GET` | Sync queue | `X-Plex-Token` | ❌ No | Unofficial wiki / community knowledge | -| `GET /transcode/sessions` | `GET` | Active transcode sessions | `X-Plex-Token` (admin) | ❌ No | Unofficial wiki / community knowledge | - -### Preferences (`/:/prefs` is in spec, but many hidden settings are not) - -The spec documents `GET /:/prefs`, `GET /:/prefs/get`, and `PUT /:/prefs`. -What is **not** documented are the ~40+ *hidden* preference keys that can be read/written via the same endpoint: - -* `aBRKeepOldTranscodes`, `allowHighOutputBitrates`, `backgroundQueueIdlePaused` -* `butlerTaskGarbageCollectBlobs`, `butlerTaskGenerateMediaIndexFiles` -* `certificateVersion`, `dvrShowUnsupportedDevices`, `enableABRDebugOverlay` -* `enableAirplay`, `eyeQUser`, `forceAutoAdjustQuality` -* `generateIndexFilesDuringAnalysis`, `gracenoteUser` -* `hardwareDevicePath` (default `/dev/dri/renderD128`) -* `manualPortMappingMode`, `manualPortMappingPort` -* `minimumProgressTime`, `plexMetricsUrl`, `plexOnlineMail`, `plexOnlineUrl` -* `syncMyPlexLoginGCDeferral`, `syncPagingItemsLimit` -* `systemAudioCodecs`, `transcoderH264MinimumCRF`, `transcoderH264Options` -* `transcoderH264OptionsOverride`, `transcoderH264Preset` -* `transcoderLivePruneBuffer`, `transcoderLogLevel` - -Source: [Python PlexAPI settings docs](https://python-plexapi.readthedocs.io/en/latest/modules/settings.html), [Plex hidden settings article](https://support.plex.tv/articles/201105343-advanced-hidden-server-settings/) - ---- - -## Media Library (hidden params, extra endpoints) - -### Missing sub-endpoints under `/library/sections/{sectionId}` - -The spec documents `/library/sections/{sectionId}/all`, `/albums`, `/allLeaves`, `/analyze`, `/arts`, `/autocomplete`, `/categories`, `/cluster`, `/collections`, `/common`, `/computePath`, `/emptyTrash`, `/filters`, `/firstCharacters`, `/indexes`, `/intros`, `/location`, `/moment`, `/nearest`, `/prefs`, `/refresh`, `/sorts`, `/collection/{collectionId}`, `/composite/{updatedAt}`. - -**Not documented:** - -| Path | Method | Purpose | In spec? | Source | -|------|--------|---------|----------|--------| -| `/library/sections/{sectionId}/onDeck` | `GET` | On-deck items for this section | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/unwatched` | `GET` | Unwatched items | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/newest` | `GET` | Newest additions | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/byYear` | `GET` | Browse by year | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/byDecade` | `GET` | Browse by decade | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/byContentRating` | `GET` | Browse by content rating | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/byResolution` | `GET` | Browse by resolution | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/byFolder` | `GET` | Browse by folder | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/agents` | `GET` | Available agents for this section | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/match` | `GET` | Match items in section | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/unmatch` | `GET` | Unmatch items in section | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/edit` | `GET/PUT` | Edit section metadata | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/delete` | `DELETE` | Delete the section | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/move` | `PUT` | Move section paths | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/settings` | `GET` | Section-specific settings | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/playlists` | `GET` | Playlists belonging to section | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/hubs` | `GET` | Hubs for this section | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/timeline` | `GET` | Section timeline | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/search` | `GET` | Section-scoped search | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/tags` | `GET` | Tags in section | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/artists` | `GET` | Artists (music) | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/shows` | `GET` | Shows (TV) | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/episodes` | `GET` | Episodes | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/movies` | `GET` | Movies | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/clips` | `GET` | Clips | ❌ No | Community knowledge / client traffic | -| `/library/sections/{sectionId}/photos` | `GET` | Photos | ❌ No | Community knowledge / client traffic | - -### Missing sub-endpoints under `/library/metadata/{ratingKey}` - -The spec documents many (`/credits`, `/extras`, `/file`, `/index`, `/intro`, `/marker`, `/match`, `/matches`, `/merge`, `/nearest`, `/prefs`, `/refresh`, `/related`, `/similar`, `/split`, `/subtitles`, `/tree`, `/unmatch`, `/users/top`, `/voiceActivity`, `/augmentations/{augmentationId}`, `/media/{mediaItem}`, `/marker/{marker}`, `/nearest`, `/file`, `/parts/{partId}`, etc.). - -**Not documented:** - -| Path | Method | Purpose | In spec? | Source | -|------|--------|---------|----------|--------| -| `/library/metadata/{ratingKey}/children` | `GET` | Children of a show/season/artist/album | ❌ No | Client `key` attribute in metadata responses | -| `/library/metadata/{ratingKey}/onDeck` | `GET` | On-deck for this show/season | ❌ No | Client traffic | -| `/library/metadata/{ratingKey}/reviews` | `GET` | User reviews | ❌ No | Client traffic | -| `/library/metadata/{ratingKey}/parent` | `GET` | Parent metadata shortcut | ❌ No | Client traffic | -| `/library/metadata/{ratingKey}/grandparent` | `GET` | Grandparent metadata shortcut | ❌ No | Client traffic | - -### Undocumented query parameters for `/library/sections/{sectionId}/all` - -The spec only lists `includeMeta`, `includeGuids`, `sectionId`, `mediaQuery`, `X-Plex-Container-Start`, `X-Plex-Container-Size`. -The following params are widely used by official clients but **absent** from the spec: - -* **Type filtering:** `type` (`1`=movie, `2`=show, `3`=season, `4`=episode, `8`=artist, `9`=album, `10`=track, …) -* **Sorting:** `sort` (e.g. `titleSort`, `year`, `addedAt`, `lastViewedAt`, `viewCount`, `rating`) -* **Filters:** `filters`, `unwatched` (`1`) -* **Tag filters:** `genre`, `studio`, `contentRating`, `resolution`, `year`, `firstCharacter` -* **Include flags:** `includeCollections`, `includeExternalMedia`, `includeAdvanced`, `includeMeta`, `checkFiles`, `includeRelated`, `includeExtras`, `includePopularLeaves`, `includeConcerts`, `includeOnDeck`, `includeChapters`, `includePreferences`, `includeBandwidths`, `includeLoudnessRamps`, `includeStations`, `includeExternalIds`, `includeReviews`, `includeCredits`, `includeArt`, `includeThumb`, `includeBanner`, `includeTheme`, `includeFields` -* **Async flags:** `asyncAugmentMetadata`, `asyncRefreshLocalMediaAgent`, `nocache`, `excludeFields`, `skipRefresh` - ---- - -## Playback & Transcoder (hidden tuning params) - -### Player control endpoints (missing from spec entirely) - -The Plex Web app uses these to remotely control clients. They are **not** in the spec. - -| Path | Method | Purpose | -|------|--------|---------| -| `/player/playback/play` | `POST` | Start playback | -| `/player/playback/pause` | `POST` | Pause | -| `/player/playback/stop` | `POST` | Stop | -| `/player/playback/seek` | `POST` | Seek to time | -| `/player/playback/skipTo` | `POST` | Skip to item | -| `/player/playback/skipBy` | `POST` | Skip forward/backward | -| `/player/playback/stepForward` | `POST` | Step forward | -| `/player/playback/stepBack` | `POST` | Step back | -| `/player/playback/setParameters` | `POST` | Set playback params | -| `/player/playback/subtitleStream` | `POST` | Change subtitle stream | -| `/player/playback/audioStream` | `POST` | Change audio stream | -| `/player/playback/videoStream` | `POST` | Change video stream | -| `/player/playback/volume` | `POST` | Set volume | -| `/player/playback/mute` | `POST` | Mute | -| `/player/playback/unmute` | `POST` | Unmute | -| `/player/playback/setTextStream` | `POST` | Set text stream | -| `/player/playback/setRating` | `POST` | Rate item | -| `/player/playback/setViewOffset` | `POST` | Set resume offset | -| `/player/playback/setState` | `POST` | Set playback state | -| `/player/playback/refreshPlayQueue` | `POST` | Refresh play queue | -| `/player/playback/playMedia` | `POST` | Play specific media | - -**Auth:** Usually requires a `X-Plex-Target-Client-Identifier` header plus the controlling user’s `X-Plex-Token`. - -### Transcode session segments - -The spec documents `/{transcodeType}/:/transcode/universal/start.{extension}`, `/decision`, `/fallback`, `/subtitles`. -What is missing: - -| Path | Purpose | In spec? | Source | -|------|---------|----------|--------| -| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s` | DASH/HLS segment delivery | ❌ No | [UnicornTranscoder issue #136](https://github.com/UnicornTranscoder/UnicornTranscoder/issues/136) | -| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts` | HLS TS segment delivery | ❌ No | Community knowledge | -| `/music/:/transcode` | Audio transcode endpoint | ❌ No | Community knowledge | - -### Stream URL hidden parameters - -When requesting a direct-play or transcode stream URL, these query params are accepted but undocumented in the spec: - -* `maxVideoBitrate`, `videoResolution` -* `offset`, `copyts`, `protocol` -* `mediaIndex`, `partIndex` -* `platform`, `X-Plex-Token` - -Source: [Python PlexAPI base docs](https://python-plexapi.readthedocs.io/en/latest/modules/base.html) - ---- - -## Webhooks & Events - -### Configuration - -* `GET https://plex.tv/api/v2/user/webhooks` — list URLs. -* `POST https://plex.tv/api/v2/user/webhooks` — add a URL (body likely JSON with `url` field). - -### Payload format - -* **Content-Type:** `multipart/form-data` (not pure JSON). -* **Fields:** - * `payload` — JSON string containing `event`, `user`, `owner`, `Account`, `Server`, `Player`, `Metadata`. - * `thumb` — JPEG thumbnail (only for `media.play` and `media.rate`). -* **Events:** `media.play`, `media.pause`, `media.resume`, `media.stop`, `media.scrobble`, `media.rate`, `library.new`. - -Source: [Plex Support – Webhooks](https://support.plex.tv/articles/115002267687-webhooks/) - -### Sonos integration - -* `https://sonos.plex.tv` — Plex-to-Sonos control gateway. Routes through Plex remote access. Not in spec. -* Requires Plex Pass + linked Sonos account + remote access enabled. - -Source: [Python PlexAPI docs](https://python-plexapi.readthedocs.io/en/latest/introduction.html) - ---- - -## Legacy / Deprecated endpoints - -| Path | Status | Replacement | Source | -|------|--------|-------------|--------| -| `https://plex.tv/pins.xml` | Legacy XML PIN API | `https://plex.tv/api/v2/pins` | [plexargod repo](https://github.com/danielewood/plexargod) | -| `https://plex.tv/api/resources` | Legacy XML resources | `https://plex.tv/api/v2/resources` | [plexargod repo](https://github.com/danielewood/plexargod) | -| `https://plex.tv/api/users/` | Legacy XML friends | `https://plex.tv/api/v2/friends` | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://plex.tv/api/servers/{machineId}/shared_servers` | Legacy XML sharing | `https://plex.tv/api/v2/shared_servers` | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | -| `https://clients.plex.tv/devices.xml` | Legacy XML devices | `https://plex.tv/api/v2/resources` or JWT flow | [CVE-2025-34158 write-up](https://github.com/lufinkey/vulnerability-research/blob/main/CVE-2025-34158/README.md) | -| `https://metadata.provider.plex.tv/...` | Deprecated Oct 2025 | `https://discover.provider.plex.tv/...` | [pd_zurg issue #98](https://github.com/I-am-PUID-0/pd_zurg/issues/98) | - ---- - -## XML vs JSON quirks - -| Behavior | Details | -|----------|---------| -| **Default format** | Most PMS endpoints return **XML** unless `Accept: application/json` is sent. | -| **plex.tv v2** | Generally returns **JSON** by default. | -| **Legacy endpoints** (`/pins.xml`, `/api/resources`, `/api/users/`) | Return **XML** only. | -| **Webhook payload** | JSON wrapped in a `multipart/form-data` field named `payload`; thumbnail delivered as a second file part. | -| **Empty responses** | Some `PUT`/`DELETE` endpoints return `204 No Content` with no body. | - ---- - -## Rate Limiting & Special Headers - -| Topic | Details | -|-------|---------| -| **JWT / Auth rate limits** | Plex Pro Week ’25 blog explicitly mentions built-in rate limiting on auth endpoints to prevent abuse. | [Plex Pro Week blog](https://www.plex.tv/blog/plex-pro-week-25-api-unlocked/) | -| **Claim loops** | `POST https://plex.tv/servers.xml` can return `429 Too Many Requests` if retried too aggressively. | [Plex Forum](https://forums.plex.tv/t/fresh-install-unable-to-claim-ubuntu/853466) | -| **Provider timeouts** | Custom metadata providers may be timed out by PMS if responses are slow; no documented timeout value. | [Plex Forum – Custom Metadata Providers](https://forums.plex.tv/t/announcement-custom-metadata-providers/934384?page=2) | -| **Required headers** | `X-Plex-Client-Identifier` is **mandatory** for PIN and JWT flows. `X-Plex-Token` can be passed as header or query param. | Community knowledge | -| **Client info headers** | `X-Plex-Product`, `X-Plex-Version`, `X-Plex-Platform`, `X-Plex-Platform-Version`, `X-Plex-Device`, `X-Plex-Model`, `X-Plex-Device-Vendor`, `X-Plex-Device-Name`, `X-Plex-Marketplace` are expected by most plex.tv endpoints. | [python-plexapi source](https://python-plexapi.readthedocs.io/en/latest/_modules/plexapi/myplex.html) | - ---- - -## Summary: What should be added to the spec - -### High priority (missing blocks) - -1. **plex.tv API v2 surface** - * `/features`, `/friends`, `/home`, `/server`, `/users/signout`, `/users/password` - * `/pins`, `/pins/link`, `/ping` - * `/shared_servers`, `/sharings/{userId}`, `/home/users/restricted/{userId}` - * `/user/webhooks`, `/user/view_state_sync`, `/user/{uuid}/settings/opt_outs` - * `/server/access_tokens`, `/server/users/features` - * `/devices/{id}/certificate/*`, `/release_channels` - * **JWT auth sub-tree:** `clients.plex.tv/api/v2/auth/jwk`, `/nonce`, `/token`, `/keys` - -2. **Cloud providers** - * `discover.provider.plex.tv/library/search` - * `discover.provider.plex.tv/library/sections/watchlist/all` - * `discover.provider.plex.tv/actions/addToWatchlist` & `removeFromWatchlist` - * `vod.provider.plex.tv` & `music.provider.plex.tv` base paths - * Deprecated but historically important: `metadata.provider.plex.tv` watchlist endpoints (for migration docs) - -3. **Player control API** - * All `/player/playback/*` endpoints (play, pause, stop, seek, volume, stream selection, etc.) - -4. **Transcode segments** - * `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s` / `.ts` - * `/music/:/transcode` - -5. **Missing library section sub-endpoints** - * `/onDeck`, `/unwatched`, `/newest`, `/byYear`, `/byDecade`, `/byContentRating`, `/byResolution`, `/byFolder` - * `/agents`, `/match`, `/unmatch`, `/edit`, `/delete`, `/move`, `/settings` - * `/playlists`, `/hubs`, `/timeline`, `/search`, `/tags` - * `/artists`, `/shows`, `/episodes`, `/movies`, `/clips`, `/photos` - -6. **Missing metadata sub-endpoints** - * `/library/metadata/{id}/children`, `/onDeck`, `/reviews`, `/parent`, `/grandparent` - -7. **System & diagnostics** - * `/system/agents`, `/system/agents/{id}`, `/system/settings`, `/system/updates` - * `/diagnostics`, `/sync`, `/sync/items`, `/sync/queue`, `/transcode/sessions` - -### Medium priority (query params & schemas) - -8. **Expand `/library/sections/{sectionId}/all` parameters** - * `type`, `sort`, `filters`, `unwatched`, `genre`, `studio`, `contentRating`, `resolution`, `year`, `firstCharacter` - * `includeCollections`, `includeExternalMedia`, `includeAdvanced`, `checkFiles`, `includeRelated`, `includeExtras`, `includePopularLeaves`, `includeConcerts`, `includeOnDeck`, `includeChapters`, `includePreferences`, `includeBandwidths`, `includeLoudnessRamps`, `includeStations`, `includeExternalIds`, `includeReviews`, `includeCredits`, `includeArt`, `includeThumb`, `includeBanner`, `includeTheme`, `includeFields` - * `asyncAugmentMetadata`, `asyncRefreshLocalMediaAgent`, `nocache`, `excludeFields`, `skipRefresh` - -9. **Webhook schema** - * Document the `multipart/form-data` payload, event enum, and thumbnail attachment behavior. - -10. **Hidden preferences schema** - * Document the hidden `BoolInt` / `text` preferences accessible via `/:/prefs`. - -### Low priority (legacy / reference) - -11. **Legacy v1 endpoints** - * `POST /pins.xml`, `GET /pins/{id}`, `GET /api/resources`, `GET /api/users/`, `GET /api/servers/{machineId}`, `POST /api/servers/{machineId}/shared_servers`, `GET /clients.plex.tv/devices.xml` - * Useful for migration guides and backwards-compatibility notes. - ---- - -*End of research.* From 9a99b8f80907618d5c3b1018733bcc5b114e3623 Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 19:02:23 -0500 Subject: [PATCH 13/26] =?UTF-8?q?ci:=20fix=20vacuum=20lint=20action=20?= =?UTF-8?q?=E2=80=94=20pin=20version,=20add=20details,=20report=20artifact?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Pin vacuum to v0.29.0 for reproducible builds - Add --details --pipeline-output --no-banner for better CI output - Add --min-score 25 quality gate - Generate JSON report artifact on every run --- .github/workflows/lint.yml | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 0c5991a69..54ac4ff27 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -34,10 +34,36 @@ jobs: vacuum: runs-on: ubuntu-latest + permissions: + contents: read steps: - uses: actions/checkout@v4 + - name: Install Vacuum + env: + VACUUM_VERSION: "v0.29.0" run: | - curl -fsSL https://github.com/daveshanley/vacuum/releases/latest/download/vacuum_linux_amd64.tar.gz | tar -xz + curl -fsSL "https://github.com/daveshanley/vacuum/releases/download/${VACUUM_VERSION}/vacuum_linux_amd64.tar.gz" | tar -xz sudo mv vacuum /usr/local/bin/ - - run: vacuum lint plex-api-spec.yaml + vacuum version + + - name: Lint with Vacuum + run: | + vacuum lint plex-api-spec.yaml \ + --details \ + --pipeline-output \ + --no-banner \ + --min-score 25 + + - name: Generate Vacuum Report + if: always() + run: | + vacuum report plex-api-spec.yaml report-prefix --no-pretty + + - name: Upload Vacuum Report + if: always() + uses: actions/upload-artifact@v4 + with: + name: vacuum-report + path: report-prefix*.json + retention-days: 30 From 8e2e746a917b5874d7590af67be83e1090aa1e1a Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 19:04:46 -0500 Subject: [PATCH 14/26] ci: use latest vacuum release --- .github/workflows/lint.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 54ac4ff27..7cf48fff7 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -40,10 +40,8 @@ jobs: - uses: actions/checkout@v4 - name: Install Vacuum - env: - VACUUM_VERSION: "v0.29.0" run: | - curl -fsSL "https://github.com/daveshanley/vacuum/releases/download/${VACUUM_VERSION}/vacuum_linux_amd64.tar.gz" | tar -xz + curl -fsSL https://github.com/daveshanley/vacuum/releases/latest/download/vacuum_linux_amd64.tar.gz | tar -xz sudo mv vacuum /usr/local/bin/ vacuum version From 8974a67c07574a9acb786013abd0b8a3ba615d82 Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 19:05:56 -0500 Subject: [PATCH 15/26] chore: remove REMAINING_GAPS_PLAN.md from PR branch --- REMAINING_GAPS_PLAN.md | 455 ----------------------------------------- 1 file changed, 455 deletions(-) delete mode 100644 REMAINING_GAPS_PLAN.md diff --git a/REMAINING_GAPS_PLAN.md b/REMAINING_GAPS_PLAN.md deleted file mode 100644 index b443fa4d8..000000000 --- a/REMAINING_GAPS_PLAN.md +++ /dev/null @@ -1,455 +0,0 @@ -# Plex API Spec — Remaining Gaps & Phased Implementation Plan - -**Date:** 2026-06-03 -**Source:** 11 review documents (~3,777 lines of analysis) from agent swarm review -**Current Spec State:** 267 paths, 91 schemas, 315 operations, 0 speakeasy errors, 0 vacuum errors -**Goal:** 100% documentation parity — absolute source of truth for all things Plex API - ---- - -## Executive Summary - -| Category | Review Recs | Done | Remaining | Coverage | -|----------|-------------|------|-----------|----------| -| Missing endpoints | ~175 | ~71 | ~104 | 41% | -| Schema extractions | ~18 | ~18 | 0 | 100% | -| Schema field gaps | ~75 | ~5 | ~70 | 7% | -| Query param gaps | ~80 | ~8 | ~72 | 10% | -| Response/status fixes | ~15 | ~5 | ~10 | 33% | -| Auth/security gaps | ~18 | ~6 | ~12 | 33% | -| Documentation issues | ~45 | ~10 | ~35 | 22% | - -**What this PR accomplished:** All CRITICAL priorities (OAuth PIN, cloud providers, client remote-control, schema deduplication, CI tooling). -**What remains:** Primarily MEDIUM-priority plex.tv social endpoints, deep schema field coverage, query parameter completeness, and documentation polish. - ---- - -## Phase 4: Plex.tv v2 Account, Social & Sharing -**Priority: HIGH** | **Estimated Effort: 3–4 days** | **Target: ~25 new endpoints** - -This is the largest remaining functional gap. The spec is still PMS-centric; the entire plex.tv v2 social surface is missing. - -### 4.1 Auth & Account Completion -| Endpoint | Method | Source | -|----------|--------|--------| -| `/api/v2/users/signout` | `DELETE` | python-plexapi | -| `/api/v2/ping` | `GET` | Tautulli, Overseerr | -| `/api/v2/features` | `GET` | Plex Forum | -| `/api/v2/friends` | `GET` | Plex Forum | -| `/api/v2/home` | `GET` | Plex Forum | -| `/api/v2/server` | `GET` | Plex Forum | -| `/api/v2/users/password` | `POST` | Plex Forum | -| `/api/v2/user/view_state_sync` | `PUT` | python-plexapi | -| `/api/v2/user/{uuid}/settings/opt_outs` | `GET` | python-plexapi | -| `/users/account` | `GET` | Tautulli, Overseerr | -| `/users/account.json` | `GET` | Tautulli, Overseerr | - -### 4.2 Server Sharing & Plex Home -| Endpoint | Method | Source | -|----------|--------|--------| -| `/api/v2/shared_servers` | `POST` | python-plexapi, Plexopedia | -| `/api/v2/sharings/{userId}` | `PUT` | python-plexapi | -| `/api/v2/sharings/{userId}` | `DELETE` | python-plexapi | -| `/api/v2/home/users/restricted/{userId}` | `PUT` | python-plexapi | -| `/api/home/users` | `GET` / `POST` | python-plexapi | -| `/api/home/users/{userId}` | `DELETE` / `PUT` | python-plexapi | -| `/api/home/users/{id}/switch` | `POST` | python-plexapi | -| `/api/servers/{machineId}/shared_servers` | `POST` | python-plexapi, Tautulli | -| `/api/servers/{machineId}` | `GET` | python-plexapi | -| `/api/claim/token.json` | `GET` | python-plexapi | -| `POST /myplex/claim` | `POST` | python-plexapi | - -### 4.3 Webhooks -| Endpoint | Method | Source | -|----------|--------|--------| -| `/api/v2/user/webhooks` | `GET` | python-plexapi | -| `/api/v2/user/webhooks` | `POST` | python-plexapi | -| *Webhook payload schema* | inbound | Bazarr, Home Assistant, Tautulli | - -### 4.4 Utility Endpoints -| Endpoint | Method | Source | -|----------|--------|--------| -| `/api/v2/server/access_tokens` | `GET` | CVE-2025-34158 write-up | -| `/api/v2/server/users/features` | `GET` | Plex Forum | -| `/api/v2/cloud_server` | `GET` | Tautulli | -| `/api/v2/geoip` | `GET` | Tautulli | -| `/:/ip` | `GET` | Tautulli | -| `/api/downloads/{channel}.json` | `GET` | Tautulli | - -### 4.5 Security & Auth Documentation -- [ ] Add JWT bearer security scheme (documented but not formalized) -- [ ] Document rate limiting on auth endpoints -- [ ] Add note that `X-Plex-Token` may be passed as query parameter on all endpoints -- [ ] Document `X-Plex-Client-Identifier` as mandatory for PIN and JWT flows -- [ ] Document v1 vs v2 base URL split and deprecation trajectory - -### Validation Gates -- [ ] `speakeasy lint` = 0 errors -- [ ] `vacuum lint` = 0 errors -- [ ] `prettier --check` passes -- [ ] All new plex.tv endpoints use correct `servers:` override -- [ ] All new endpoints have `operationId`, `summary`, `description` - ---- - -## Phase 5: Schema Depth & Completeness -**Priority: MEDIUM** | **Estimated Effort: 2–3 days** | **Target: ~40 new fields, 5 new schemas** - -Deep field-level coverage is the biggest contributor to SDK quality. Generated SDKs cannot expose fields that are not in the spec. - -### 5.1 Metadata Fields -Add to `Metadata` schema (or type-specific sub-schemas): - -| Field | Type | Source | -|-------|------|--------| -| `artBlurHash` | string | video.py, audio.py | -| `thumbBlurHash` | string | video.py, audio.py | -| `lastRatedAt` | integer (timestamp) | video.py, audio.py | -| `editionTitle` | string | video.py (Movie) | -| `languageOverride` | string | video.py (Movie, Show) | -| `enableCreditsMarkerGeneration` | boolean | video.py (Movie, Show) | -| `useOriginalTitle` | boolean | video.py (Movie, Show) | -| `slug` | string | video.py (Movie, Show) | -| `skipCount` | integer | audio.py (Track) | -| `musicAnalysisVersion` | integer | audio.py (Audio base) | -| `sourceURI` | string | video.py, audio.py, playlist.py | -| `playlistItemID` | integer | base.py (Playable) | - -### 5.2 Media Fields -Add to `Media` schema: - -| Field | Type | Source | -|-------|------|--------| -| `uuid` | string | media.py | -| `selected` | boolean | media.py | - -### 5.3 Part Fields -Add to `Part` schema: - -| Field | Type | Source | -|-------|------|--------| -| `protocol` | string (dash, hls) | media.py | -| `packetLength` | integer | media.py | -| `requiredBandwidths` | string (list) | media.py | -| `syncItemId` | integer | media.py | -| `syncState` | string | media.py | -| `deepAnalysisVersion` | integer | media.py | - -### 5.4 Stream Fields -**AudioStream:** -| Field | Type | Source | -|-------|------|--------| -| `bitrateMode` | string (cbr, vbr) | media.py | -| `visualImpaired` | boolean | media.py | -| `albumGain` | number | media.py | -| `albumPeak` | number | media.py | -| `albumRange` | number | media.py | -| `endRamp` | string | media.py | -| `gain` | number | media.py | -| `loudness` | number | media.py | -| `lra` | number | media.py | -| `peak` | number | media.py | -| `startRamp` | string | media.py | - -**SubtitleStream:** -| Field | Type | Source | -|-------|------|--------| -| `providerTitle` | string | media.py | -| `score` | number | media.py | -| `sourceKey` | string | media.py | -| `transient` | boolean | media.py | -| `userID` | integer | media.py | -| `perfectMatch` | boolean | media.py | - -**LyricStream:** -| Field | Type | Source | -|-------|------|--------| -| `minLines` | integer | media.py | -| `provider` | string | media.py | -| `timed` | boolean | media.py | - -### 5.5 New Standalone Schemas -- [ ] `Collection` — collection-specific fields (`collectionMode`, `collectionPublished`, `collectionSort`, `collectionFilterBasedOnUser`, `artBlurHash`, `thumbBlurHash`, `userRating`, `lastRatedAt`) -- [ ] `Provider` / `ProviderFeature` — extract from `/media/providers` response -- [ ] `MediaContainerWithPlayQueue` — distinct from playlist schema; includes `playQueueLastAddedItemID`, `playQueueSelectedItemID`, `playQueueSelectedItemOffset`, `playQueueSelectedMetadataItemID`, `playQueueShuffled`, `playQueueSourceURI`, `playQueueTotalCount`, `playQueueVersion` -- [ ] `WebhookPayload` — `multipart/form-data` JSON payload + thumbnail -- [ ] `Session` expansion — add `sessionKey`, `uuid`, `title`, `userID`, or document that consumers rely on embedded `Player`/`User`/`Metadata` - -### 5.6 DVR / Live TV Schema Cleanup -- [ ] `Channel` — add missing EPG fields: `favorite`, `drm`, `signalQuality`, `signalStrength` -- [ ] `Lineup` — add `key`, `identifier` -- [ ] `MediaSubscription` — document known hint keys instead of `additionalProperties: true` -- [ ] `Device` — add `id`, `name`/`title`, `enabled`, `deviceIdentifier`, `thumb`/`thumbVersion`, `lineup`/`lineupType` - -### Validation Gates -- [ ] `speakeasy lint` = 0 errors -- [ ] `vacuum lint` = 0 errors -- [ ] `prettier --check` passes -- [ ] All new fields have `description` and `example` where possible -- [ ] No duplicate property names introduced - ---- - -## Phase 6: Library, Playback & Query Parameter Completeness -**Priority: MEDIUM** | **Estimated Effort: 2–3 days** | **Target: ~35 endpoints, ~30 query params** - -### 6.1 Missing Library Endpoints -| Endpoint | Method | Priority | -|----------|--------|----------| -| `/library/sections/{id}/onDeck` | `GET` | MEDIUM | -| `/library/sections/{id}/unwatched` | `GET` | MEDIUM | -| `/library/sections/{id}/newest` | `GET` | MEDIUM | -| `/library/sections/{id}/recentlyAdded` | `GET` | MEDIUM | -| `/library/sections/{id}/byYear` | `GET` | LOW | -| `/library/sections/{id}/byDecade` | `GET` | LOW | -| `/library/sections/{id}/byContentRating` | `GET` | LOW | -| `/library/sections/{id}/byResolution` | `GET` | LOW | -| `/library/sections/{id}/byFolder` | `GET` | LOW | -| `/library/sections/{id}/agents` | `GET` | LOW | -| `/library/sections/{id}/match` | `GET` | LOW | -| `/library/sections/{id}/unmatch` | `GET` | LOW | -| `/library/sections/{id}/edit` | `GET` / `PUT` | LOW | -| `/library/sections/{id}/move` | `PUT` | LOW | -| `/library/sections/{id}/settings` | `GET` | LOW | -| `/library/sections/{id}/playlists` | `GET` | LOW | -| `/library/sections/{id}/hubs` | `GET` | LOW | -| `/library/sections/{id}/timeline` | `GET` | LOW | -| `/library/sections/{id}/search` | `GET` | LOW | -| `/library/sections/{id}/tags` | `GET` | LOW | -| `/library/sections/{id}/label` | `GET` | MEDIUM | -| `/library/sections/{id}/refresh` | `GET` / `POST` | MEDIUM | -| `/library/sections/{id}/emptyTrash` | `GET` / `POST` | MEDIUM | -| `/library/sections/{id}/optimize` | `GET` / `POST` | MEDIUM | -| `/library/optimize` | `GET` / `POST` | MEDIUM | -| `/library/recentlyAdded` | `GET` | MEDIUM | -| `/library/metadata/{id}/children` | `GET` | MEDIUM | -| `/library/metadata/{id}/grandchildren` | `GET` | MEDIUM | -| `/library/metadata/{id}/posters` | `POST` | MEDIUM | -| `/library/metadata/{id}/arts` | `POST` | MEDIUM | -| `/library/metadata/{id}/nearest` | `GET` | MEDIUM | -| `/library/metadata/{id}/computePath` | `GET` | MEDIUM | -| `/hubs/home/recentlyAdded` | `GET` | MEDIUM | -| `/hubs/continueWatching/items` | `GET` | MEDIUM | - -### 6.2 Missing Playback Endpoints -| Endpoint | Method | Priority | -|----------|--------|----------| -| `/playlists?type=42` | `GET` / `DELETE` | MEDIUM | -| `/playQueues/1` | `GET` | MEDIUM | -| `/:/progress` | `GET` | MEDIUM | -| `/actions/removeFromContinueWatching` | `PUT` | MEDIUM | -| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s` | `GET` | MEDIUM | -| `/{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts` | `GET` | MEDIUM | -| `/music/:/transcode` | `GET` | MEDIUM | -| `/resources` (on client) | `GET` | MEDIUM | - -### 6.3 Missing Live TV Endpoints -| Endpoint | Method | Priority | -|----------|--------|----------| -| `/livetv/dvrs/{dvrId}` | `PUT` / `PATCH` | LOW | -| `/livetv/dvrs/{dvrId}/channels` | `GET` | LOW | -| `/livetv/dvrs/{dvrId}/guide` or `/livetv/epg/guide` | `GET` | LOW | -| `/livetv/sessions/{sessionId}` | `DELETE` | LOW | -| `/livetv/dvrs/{dvrId}/recordings` or `/livetv/recordings` | `GET` | LOW | -| `/livetv/epg/search` | `GET` | LOW | - -### 6.4 Query Parameters — Library Section Browsing -Add to `/library/sections/{sectionId}/all` and other browse endpoints: - -| Parameter | Type | -|-----------|------| -| `type` | integer | -| `sort` | string | -| `filters` | string | -| `unwatched` | integer (1) | -| `genre`, `studio`, `contentRating`, `resolution`, `year`, `firstCharacter` | string / integer | -| `includeCollections` | boolean | -| `includeExternalMedia` | boolean | -| `includeAdvanced` | boolean | -| `checkFiles` | boolean | -| `includeRelated` | boolean | -| `includeExtras` | boolean | -| `includePopularLeaves` | boolean | -| `includeConcerts` | boolean | -| `includeOnDeck` | boolean | -| `includeChapters` | boolean | -| `includePreferences` | boolean | -| `includeBandwidths` | boolean | -| `includeLoudnessRamps` | boolean | -| `includeStations` | boolean | -| `includeExternalIds` | boolean | -| `includeReviews` | boolean | -| `includeCredits` | boolean | -| `includeArt`, `includeThumb`, `includeBanner`, `includeTheme` | boolean | -| `includeFields` | string | -| `asyncAugmentMetadata` | boolean | -| `asyncRefreshLocalMediaAgent` | boolean | -| `nocache` | boolean | -| `excludeFields` | string | -| `skipRefresh` | boolean | - -### 6.5 Query Parameters — Metadata Detail -Add to `/library/metadata/{ids}`: -- [ ] `includeMarkers` — already done in PR, verify coverage on all metadata GETs -- [ ] `includeChapters`, `includeExternalMedia`, `includeExtras`, `includeRelated`, `includeOnDeck`, `includePopularLeaves`, `includeReviews`, `includeStations` — add where missing - -### 6.6 Query Parameters — Search & Hubs -- [ ] `/hubs/search` — `includeCollections` -- [ ] `/hubs/search/voice` — `includeCollections` - -### 6.7 Query Parameters — History -- [ ] `/status/sessions/history/all` — `includeFields`, `excludeFields`, `includeElements`, `excludeElements` -- [ ] `viewedAt>`, `viewedAt<`, `accountID`, `deviceID` -- [ ] `X-Plex-Container-Start`, `X-Plex-Container-Size` as request params (not just response headers) - -### 6.8 Query Parameters — Transcoder -- [ ] `maxVideoBitrate`, `videoResolution`, `copyts`, `platform` -- [ ] `mediaIndex`, `partIndex` on `/subtitles` - -### 6.9 Query Parameters — Server / System -- [ ] `/statistics/bandwidth` — `timespan` (1–6), `accountID`, `deviceID`, `lan` -- [ ] `/services/browse` — `includeFiles` -- [ ] `/library/metadata/{ids}/refresh` — `skipRefresh` -- [ ] `/library/metadata/{ids}` — `asyncAugmentMetadata=1` - -### Validation Gates -- [ ] `speakeasy lint` = 0 errors -- [ ] `vacuum lint` = 0 errors -- [ ] `prettier --check` passes -- [ ] Arbiter diff against live PMS shows 0 gaps for added endpoints - ---- - -## Phase 7: Documentation Polish, Typos & SDK Generator -**Priority: LOW–MEDIUM** | **Estimated Effort: 1–2 days** | **Target: ~35 doc issues** - -### 7.1 Fix Typos -| Location | Typo | Correction | -|----------|------|------------| -| `POST /livetv/dvrs` description | "devcie" | "device" | -| `GET /livetv/epg/lineupchannels` summary | "mulitple" | "multiple" | -| `PUT /livetv/dvrs/{dvrId}/prefs` description | "avd" | "and" | -| `MediaGrabOperation` description | "opration" | "operation" | - -### 7.2 Missing Descriptions & Examples -- [ ] `PUT /:/prefs` — add example or enum of common preference keys; link to hidden settings reference -- [ ] `PUT /library/metadata/{ids}` — document editable fields (title, summary, tag locks) -- [ ] `uri` parameter on scrobble/unscrobble — remove broken cross-reference or add URI intro section -- [ ] `/media/providers` proxy paths — reference dynamic paths in `Provider` tag description -- [ ] `X-Plex-Container-Start` / `X-Plex-Container-Size` — clarify they are accepted as request headers/query params - -### 7.3 XML vs JSON Notes -- [ ] Add note: "Most PMS endpoints return XML unless `Accept: application/json` is sent" -- [ ] Add note: "plex.tv v2 generally returns JSON by default" -- [ ] Note legacy endpoints (`/pins.xml`, `/api/resources`, `/api/users/`) return XML only -- [ ] Webhook payload: JSON wrapped in `multipart/form-data` field named `payload`; thumbnail as second file part -- [ ] Document where PUT/DELETE return `204 No Content` - -### 7.4 Tag Organization -- [ ] Add `Plex.tv` tag group in `x-tagGroups` to organize cloud endpoints -- [ ] Retag `/media/grabbers/operations/{operationId}` from `Subscriptions` to `Devices` -- [ ] `Devices` tag description — clarify this covers grabber/tuner devices only; client discovery is via `/clients` or `/resources` -- [ ] Verify `/:/scrobble` and `/:/unscrobble` are categorized under a domain tag - -### 7.5 Cross-References -- [ ] `Devices` → `DVRs`, `EPG`, `Live TV`, `Subscriptions` -- [ ] `Download Queue` → `Play Queue` (explain distinction) -- [ ] `Provider` → dynamic proxy paths -- [ ] `Transcoder` → segment delivery URLs -- [ ] `Timeline` → `terminationCode` / `terminationText` session kill behavior - -### 7.6 Speakeasy / SDK Improvements -- [ ] Add `x-speakeasy-retries` for rate-limited endpoints (`/pins`, `/auth/*`) -- [ ] Add `x-speakeasy-unknown-fields: allow` note on heavily `additionalProperties` schemas -- [ ] Consider adding `X-Plex-Client-Profile-Name` and `X-Plex-Client-Profile-Extra` to `x-speakeasy-globals` -- [ ] Remove or use orphaned components: `Title`, `Type`, `UpdaterRelease`, `X-Plex-Client-Profile-Extra`, `X-Plex-Client-Profile-Name`, `X-Plex-Session-Identifier`, `500` response - -### Validation Gates -- [ ] `prettier --check` passes -- [ ] `speakeasy lint` = 0 errors -- [ ] `vacuum lint` = 0 errors -- [ ] All typos verified fixed via grep - ---- - -## Phase 8: JWT Device Registration & Legacy Endpoints -**Priority: MEDIUM** | **Estimated Effort: 1 day** | **Target: 4 endpoints + legacy coverage** - -### 8.1 JWT Device Registration (2025) -| Endpoint | Method | Source | -|----------|--------|--------| -| `/api/v2/auth/jwk` | `POST` | Plex Pro Week blog, JonnyWong16 gist | -| `/api/v2/auth/nonce` | `GET` | JonnyWong16 gist | -| `/api/v2/auth/token` | `POST` | JonnyWong16 gist | -| `/api/v2/auth/keys` | `GET` | JonnyWong16 gist | - -### 8.2 Legacy plex.tv Endpoints (XML-first) -| Endpoint | Method | Notes | -|----------|--------|-------| -| `/pins.xml` | `POST` | Legacy PIN (XML) | -| `/pins/{pinId}` | `GET` | Legacy PIN check (XML) | -| `/api/resources` | `GET` | Legacy published server connections | -| `/api/users/` | `GET` | Legacy friends list | -| `/devices.xml` | `GET` | Authorized devices with tokens | - -### 8.3 Documentation -- [ ] Document JWT flow: `POST /auth/jwk` → `GET /auth/nonce` → `POST /auth/token` (7-day expiry) -- [ ] Document Ed25519 keypair requirement -- [ ] Note XML-only responses for legacy endpoints - ---- - -## Phase 9: Discovery Pipeline Hardening -**Priority: MEDIUM** | **Estimated Effort: 2–3 days** | **Ongoing** - -### 9.1 Arbiter Enhancements -- [ ] Add `diff-against` auto-fix mode — suggest YAML patches for gaps -- [ ] Add coverage dashboard — % of observed paths documented vs undocumented -- [ ] Add schema inference from live traffic — auto-suggest response schemas -- [ ] Support plex.tv traffic capture (not just PMS) - -### 9.2 CI Improvements -- [ ] Run discovery on PRs with `exit-on-gap: false` and post gap report as PR comment -- [ ] Add vacuum quality score gate (currently 25/100 — set target 50/100) -- [ ] Auto-open issue when nightly discovery finds new undocumented endpoints - -### 9.3 Continuous Validation -- [ ] Weekly diff review — human-in-the-loop for inferred schema changes -- [ ] Monthly full Arbiter run against staging PMS with all features enabled - ---- - -## Appendix A: Priority Triage Matrix - -| Priority | Count | Effort | Impact | Recommendation | -|----------|-------|--------|--------|----------------| -| CRITICAL | 0 | — | — | All addressed in current PR ✅ | -| HIGH | ~25 endpoints | 3–4 days | Blocks modern integrations | Phase 4 immediately | -| MEDIUM | ~100 endpoints/fields/params | 5–7 days | SDK completeness | Phases 5–6 next | -| LOW | ~35 doc/typos/SDK | 1–2 days | Polish & trust | Phase 7 | -| ONGOING | Pipeline | 2–3 days setup | Sustainability | Phase 9 | - -## Appendix B: Source Document Mapping - -| Review Document | Key Sections | Covered by Phase | -|-----------------|--------------|------------------| -| `PLEX_API_SPEC_FULL_REVIEW.md` | All | 4–8 | -| `python_plexapi_gap_analysis.md` | Endpoints, schemas, params | 4–6 | -| `integration_ecosystem_gaps.md` | Webhooks, WS, auth | 4, 6, 8 | -| `undocumented_endpoints_research.md` | Hidden endpoints, XML quirks | 4, 6, 8 | -| `domain_auth_account_review.md` | Security, scopes, OAuth, JWT | 4, 8 | -| `domain_server_system_review.md` | Activities, butler, updater, logs | 5 (schema depth) | -| `domain_library_metadata_review.md` | Metadata fields, library endpoints | 5, 6 | -| `domain_media_provider_review.md` | Providers, hubs, search | 5, 6 | -| `domain_playback_sessions_review.md` | Remote control, transcoder, WS | 6 (remaining endpoints) | -| `domain_livetv_dvr_review.md` | DVRs, EPG, sessions | 5, 6 | -| `domain_devices_download_review.md` | Devices, download queue | 5 | - -## Appendix C: Validation Gates (All Phases) - -Every phase must pass: -1. `prettier --check plex-api-spec.yaml` -2. `speakeasy lint openapi -s plex-api-spec.yaml` → 0 errors -3. `vacuum lint plex-api-spec.yaml` → 0 errors -4. Arbiter diff against live PMS → 0 new gaps for added endpoints (where testable) -5. PR review by CodeRabbit or equivalent automated review From 6fc7c215d85fb128dc4da05deabf22169b1f3a54 Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 19:08:57 -0500 Subject: [PATCH 16/26] chore: remove all backfill and discovery scripts (migrated to arbiter) --- scripts/deduplicate_schemas.py | 144 ----- scripts/deduplicate_schemas_safe.py | 153 ------ scripts/discovery/diff_analyzer.py | 165 ------ scripts/discovery/generate_traffic.py | 148 ----- scripts/discovery/run_discovery.py | 123 ----- scripts/extract_schemas.py | 142 ----- scripts/phase2_backfill.py | 746 -------------------------- scripts/phase2_backfill_b.py | 583 -------------------- scripts/phase2b_client_control.py | 562 ------------------- 9 files changed, 2766 deletions(-) delete mode 100644 scripts/deduplicate_schemas.py delete mode 100644 scripts/deduplicate_schemas_safe.py delete mode 100755 scripts/discovery/diff_analyzer.py delete mode 100755 scripts/discovery/generate_traffic.py delete mode 100755 scripts/discovery/run_discovery.py delete mode 100644 scripts/extract_schemas.py delete mode 100644 scripts/phase2_backfill.py delete mode 100644 scripts/phase2_backfill_b.py delete mode 100644 scripts/phase2b_client_control.py diff --git a/scripts/deduplicate_schemas.py b/scripts/deduplicate_schemas.py deleted file mode 100644 index f1280ad0f..000000000 --- a/scripts/deduplicate_schemas.py +++ /dev/null @@ -1,144 +0,0 @@ -#!/usr/bin/env python3 -""" -Extract heavily duplicated inline schemas into reusable components. -Targets the duplicate-schemas warnings from Speakeasy lint. -""" - -import yaml -import copy - -SPEC_PATH = "plex-api-spec.yaml" - -def load_spec(): - with open(SPEC_PATH, "r") as f: - return yaml.safe_load(f) - -def save_spec(spec): - with open(SPEC_PATH, "w") as f: - yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) - -def find_and_replace(obj, target, replacement): - """Recursively find target dict and replace with replacement.""" - if isinstance(obj, dict): - for k, v in list(obj.items()): - if isinstance(v, dict) and v == target: - obj[k] = copy.deepcopy(replacement) - else: - find_and_replace(v, target, replacement) - elif isinstance(obj, list): - for i, item in enumerate(obj): - if isinstance(item, dict) and item == target: - obj[i] = copy.deepcopy(replacement) - else: - find_and_replace(item, target, replacement) - -def main(): - spec = load_spec() - schemas = spec.setdefault("components", {}).setdefault("schemas", {}) - - # 1. PlexBoolean - the 0/1 enum used for boolean-like fields - plex_boolean = {"type": "integer", "enum": [0, 1], "description": "Plex boolean: 0 = false, 1 = true"} - schemas["PlexBoolean"] = plex_boolean - # Replace all inline {type: integer, enum: [0, 1]} with $ref - find_and_replace(spec, {"type": "integer", "enum": [0, 1]}, {"$ref": "#/components/schemas/PlexBoolean"}) - - # 2. PlexError - the code/message/status error object - plex_error = { - "type": "object", - "properties": { - "code": {"type": "integer"}, - "message": {"type": "string"}, - "status": {"type": "integer"}, - }, - "description": "Plex API error detail", - } - schemas["PlexError"] = plex_error - # Replace inline error objects - find_and_replace(spec, plex_error, {"$ref": "#/components/schemas/PlexError"}) - - # 3. ConnectionProtocol - lan/wan/cellular - conn_proto = {"type": "string", "enum": ["lan", "wan", "cellular"]} - schemas["ConnectionProtocol"] = conn_proto - find_and_replace(spec, conn_proto, {"$ref": "#/components/schemas/ConnectionProtocol"}) - - # 4. StreamProtocol - http/hls/dash - stream_proto = {"type": "string", "enum": ["http", "hls", "dash"]} - schemas["StreamProtocol"] = stream_proto - find_and_replace(spec, stream_proto, {"$ref": "#/components/schemas/StreamProtocol"}) - - # 5. SubtitleBurnMode - auto/burn/none/subtitle/only_text/image - burn_mode = {"type": "string", "enum": ["auto", "burn", "none", "subtitle", "only_text", "image"]} - schemas["SubtitleBurnMode"] = burn_mode - find_and_replace(spec, burn_mode, {"$ref": "#/components/schemas/SubtitleBurnMode"}) - - # 6. MediaType - audio/video/photo - media_type = {"type": "string", "enum": ["audio", "video", "photo"]} - schemas["MediaType"] = media_type - find_and_replace(spec, media_type, {"$ref": "#/components/schemas/MediaType"}) - - # 7. PlaybackState - playing/paused/stopped - playback_state = {"type": "string", "enum": ["playing", "paused", "stopped"]} - schemas["PlaybackState"] = playback_state - find_and_replace(spec, playback_state, {"$ref": "#/components/schemas/PlaybackState"}) - - # 8. ButlerTaskType - all the butler task enum values - butler_tasks = { - "type": "string", - "enum": [ - "AutomaticUpdates", - "BackupDatabase", - "ButlerTaskGenerateAdMarkers", - "ButlerTaskGenerateChapterThumbnails", - "ButlerTaskGeneratePreviewFiles", - "ButlerTaskGenerateStaticMedia", - "ButlerTaskGenerateStaticPreview", - "ButlerTaskGenerateVideoPreview", - "ButlerTaskIndexLibraries", - "ButlerTaskRefreshLibraries", - "ButlerTaskRefreshLocalMedia", - "ButlerTaskUpgradeMediaAnalysis", - "CleanOldBundles", - "CleanOldCacheFiles", - "CleanOldMediaAssets", - "DeepMediaAnalysis", - "OptimizeDatabase", - "RefreshLibraries", - "RefreshPeriodicMetadata", - "UpgradeMediaAnalysis", - ], - } - schemas["ButlerTaskType"] = butler_tasks - find_and_replace(spec, butler_tasks, {"$ref": "#/components/schemas/ButlerTaskType"}) - - # 9. UpdateStatus - available/downloading/downloaded/... - update_status = { - "type": "string", - "enum": [ - "available", - "downloading", - "downloaded", - "installing", - "installed", - "error", - "restarting", - ], - } - schemas["UpdateStatus"] = update_status - find_and_replace(spec, update_status, {"$ref": "#/components/schemas/UpdateStatus"}) - - # 10. ImageType - thumb/art/clearLogo/poster/banner/background - image_type = {"type": "string", "enum": ["thumb", "art", "clearLogo", "poster", "banner", "background"]} - schemas["ImageType"] = image_type - find_and_replace(spec, image_type, {"$ref": "#/components/schemas/ImageType"}) - - # 11. CountType - all/count - count_type = {"type": "string", "enum": ["all", "count"]} - schemas["CountType"] = count_type - find_and_replace(spec, count_type, {"$ref": "#/components/schemas/CountType"}) - - save_spec(spec) - print(f"Extracted {len(schemas)} total schemas") - print("Done. Run prettier and speakeasy lint to validate.") - -if __name__ == "__main__": - main() diff --git a/scripts/deduplicate_schemas_safe.py b/scripts/deduplicate_schemas_safe.py deleted file mode 100644 index 31540fb7e..000000000 --- a/scripts/deduplicate_schemas_safe.py +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env python3 -""" -Safely extract duplicate inline schemas into reusable components. -Only replaces EXACT full-schema matches, never partial matches inside allOf/oneOf. -""" - -import yaml -import copy - -SPEC_PATH = "plex-api-spec.yaml" - -def load_spec(): - with open(SPEC_PATH, "r") as f: - return yaml.safe_load(f) - -def save_spec(spec): - with open(SPEC_PATH, "w") as f: - yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) - -def find_exact_matches(obj, target, path="", matches=None): - """Find exact dict matches and return their paths.""" - if matches is None: - matches = [] - if isinstance(obj, dict): - if obj == target: - matches.append(path) - for k, v in obj.items(): - find_exact_matches(v, target, f"{path}.{k}", matches) - elif isinstance(obj, list): - for i, item in enumerate(obj): - find_exact_matches(item, target, f"{path}[{i}]", matches) - return matches - -def set_at_path(obj, path, value): - """Set a value at a dotted path like paths./users.get.responses.200.content.""" - parts = path.strip(".").split(".") - current = obj - for part in parts[:-1]: - if part.startswith("[") and part.endswith("]"): - idx = int(part[1:-1]) - current = current[idx] - else: - current = current[part] - last = parts[-1] - if last.startswith("[") and last.endswith("]"): - idx = int(last[1:-1]) - current[idx] = value - else: - current[last] = value - -def main(): - spec = load_spec() - schemas = spec.setdefault("components", {}).setdefault("schemas", {}) - - # 1. Extract the full 401 error response schema - # Find the first 401 response and use it as the canonical version - error_401_schema = None - for path, methods in spec.get("paths", {}).items(): - for method, op in methods.items(): - if "401" in op.get("responses", {}): - content = op["responses"]["401"].get("content", {}) - if "application/json" in content: - error_401_schema = copy.deepcopy(content["application/json"].get("schema")) - break - if error_401_schema: - break - - if error_401_schema: - schemas["UnauthorizedErrorResponse"] = error_401_schema - # Replace all matching 401 response schemas - for path, methods in spec.get("paths", {}).items(): - for method, op in methods.items(): - if "401" in op.get("responses", {}): - content = op["responses"]["401"].get("content", {}) - if "application/json" in content: - if content["application/json"].get("schema") == error_401_schema: - content["application/json"]["schema"] = {"$ref": "#/components/schemas/UnauthorizedErrorResponse"} - - # 2. Extract the full 400 error response schema - error_400_schema = None - for path, methods in spec.get("paths", {}).items(): - for method, op in methods.items(): - if "400" in op.get("responses", {}): - content = op["responses"]["400"].get("content", {}) - if "application/json" in content: - error_400_schema = copy.deepcopy(content["application/json"].get("schema")) - break - if error_400_schema: - break - - if error_400_schema: - schemas["BadRequestErrorResponse"] = error_400_schema - for path, methods in spec.get("paths", {}).items(): - for method, op in methods.items(): - if "400" in op.get("responses", {}): - content = op["responses"]["400"].get("content", {}) - if "application/json" in content: - if content["application/json"].get("schema") == error_400_schema: - content["application/json"]["schema"] = {"$ref": "#/components/schemas/BadRequestErrorResponse"} - - # 3. Extract the full 200 response schema for /livetv/dvrs endpoints - # These all have the same MediaContainerWithStatus + DVR wrapper - dvr_response_schema = None - dvr_endpoints = [ - ("/livetv/dvrs", "get"), - ("/livetv/dvrs/{dvrId}", "get"), - ("/livetv/dvrs/{dvrId}/lineups", "delete"), - ("/livetv/dvrs/{dvrId}/lineups", "put"), - ("/livetv/dvrs/{dvrId}/prefs", "put"), - ("/livetv/dvrs/{dvrId}/lineups", "post"), - ("/livetv/dvrs/{dvrId}/prefs", "get"), - ("/livetv/dvrs/{dvrId}/refresh", "get"), - ] - for path, method in dvr_endpoints: - if path in spec.get("paths", {}) and method in spec["paths"][path]: - content = spec["paths"][path][method].get("responses", {}).get("200", {}).get("content", {}) - if "application/json" in content: - dvr_response_schema = copy.deepcopy(content["application/json"].get("schema")) - break - - if dvr_response_schema: - schemas["DVRResponse"] = dvr_response_schema - for path, method in dvr_endpoints: - if path in spec.get("paths", {}) and method in spec["paths"][path]: - content = spec["paths"][path][method].get("responses", {}).get("200", {}).get("content", {}) - if "application/json" in content: - if content["application/json"].get("schema") == dvr_response_schema: - content["application/json"]["schema"] = {"$ref": "#/components/schemas/DVRResponse"} - - # 4. Extract Channel response schema - channel_response_schema = None - for path in ["/livetv/epg/channels", "/livetv/epg/lineupchannels"]: - if path in spec.get("paths", {}): - content = spec["paths"][path].get("get", {}).get("responses", {}).get("200", {}).get("content", {}) - if "application/json" in content: - channel_response_schema = copy.deepcopy(content["application/json"].get("schema")) - break - - if channel_response_schema: - schemas["ChannelResponse"] = channel_response_schema - for path in ["/livetv/epg/channels", "/livetv/epg/lineupchannels"]: - if path in spec.get("paths", {}): - content = spec["paths"][path].get("get", {}).get("responses", {}).get("200", {}).get("content", {}) - if "application/json" in content: - if content["application/json"].get("schema") == channel_response_schema: - content["application/json"]["schema"] = {"$ref": "#/components/schemas/ChannelResponse"} - - save_spec(spec) - print(f"Total schemas: {len(schemas)}") - print("Done. Run prettier and speakeasy lint to validate.") - -if __name__ == "__main__": - main() diff --git a/scripts/discovery/diff_analyzer.py b/scripts/discovery/diff_analyzer.py deleted file mode 100755 index d7b4d46dd..000000000 --- a/scripts/discovery/diff_analyzer.py +++ /dev/null @@ -1,165 +0,0 @@ -#!/usr/bin/env python3 -""" -Diff Analyzer — Compare captured traffic against the OpenAPI spec. -Produces a structured gap report (JSON) of missing endpoints, methods, and query params. -""" - -import json -import os -import re -import sys -from collections import defaultdict -from urllib.parse import urlparse, parse_qs -import yaml - -SPEC_PATH = os.environ.get("SPEC_PATH", "plex-api-spec.yaml") -TRAFFIC_PATH = os.environ.get("TRAFFIC_PATH", "/tmp/traffic.jsonl") -REPORT_PATH = os.environ.get("REPORT_PATH", "/tmp/diff_report.json") - - -def load_spec(path): - with open(path, "r") as f: - return yaml.safe_load(f) - - -def normalize_path(path): - """Normalize URL path by replacing dynamic segments with placeholders.""" - # Collapse consecutive digits or UUID-like segments into {id} - # Plex uses numeric IDs, GUIDs, and string keys as path params - segments = [] - for seg in path.strip("/").split("/"): - if re.match(r"^\d+$", seg): - segments.append("{id}") - elif re.match(r"^[0-9a-fA-F-]{20,}$", seg): - segments.append("{guid}") - elif re.match(r"^[0-9a-zA-Z_-]{30,}$", seg): - # Likely a token or key - segments.append("{key}") - else: - segments.append(seg) - return "/" + "/".join(segments) - - -def extract_spec_paths(spec): - """Extract set of (normalized_path, method) from spec.""" - paths = spec.get("paths", {}) - spec_set = set() - for path, methods in paths.items(): - norm = normalize_path(path) - for method in methods: - if method.lower() in ("get", "post", "put", "delete", "patch", "options"): - spec_set.add((norm, method.upper())) - return spec_set - - -def extract_traffic_paths(traffic_path): - """Extract set of (normalized_path, method) from captured traffic.""" - traffic_set = set() - path_methods = defaultdict(set) - path_params = defaultdict(set) - with open(traffic_path, "r") as f: - for line in f: - line = line.strip() - if not line: - continue - try: - entry = json.loads(line) - except json.JSONDecodeError: - continue - if "path" not in entry or "method" not in entry: - continue - raw_path = urlparse(entry["path"]).path - norm = normalize_path(raw_path) - method = entry["method"].upper() - traffic_set.add((norm, method)) - path_methods[norm].add(method) - - # Track query params - qs = parse_qs(urlparse(entry["path"]).query) - for key in qs: - path_params[(norm, method)].add(key) - return traffic_set, path_methods, path_params - - -def build_report(spec_set, traffic_set, path_params, spec): - missing_in_spec = traffic_set - spec_set - # Also check for methods on known paths that are missing - missing_methods = [] - for (norm_path, method) in missing_in_spec: - missing_methods.append({ - "path": norm_path, - "method": method, - "query_params_seen": sorted(path_params.get((norm_path, method), [])), - }) - - # Identify paths in spec never hit during capture (potential dead code or untested) - spec_only = spec_set - traffic_set - - # Query param gaps: for paths+methods present in both, which query params are missing from spec? - spec_paths_obj = spec.get("paths", {}) - param_gaps = [] - for (norm_path, method) in (spec_set & traffic_set): - # Find the actual spec path that matches norm_path - spec_entry = None - for spath, smethods in spec_paths_obj.items(): - if normalize_path(spath) == norm_path and method.lower() in smethods: - spec_entry = smethods[method.lower()] - break - if not spec_entry: - continue - spec_params = set() - for p in spec_entry.get("parameters", []): - if p.get("in") == "query": - spec_params.add(p.get("name")) - seen_params = path_params.get((norm_path, method), set()) - missing_params = seen_params - spec_params - if missing_params: - param_gaps.append({ - "path": norm_path, - "method": method, - "missing_query_params": sorted(missing_params), - }) - - return { - "summary": { - "endpoints_in_spec": len(spec_set), - "endpoints_captured": len(traffic_set), - "missing_from_spec": len(missing_methods), - "untested_in_spec": len(spec_only), - "query_param_gaps": len(param_gaps), - }, - "missing_endpoints": sorted(missing_methods, key=lambda x: (x["path"], x["method"])), - "untested_endpoints": sorted([{"path": p, "method": m} for p, m in spec_only], key=lambda x: (x["path"], x["method"])), - "query_param_gaps": sorted(param_gaps, key=lambda x: (x["path"], x["method"])), - } - - -def main(): - if not os.path.exists(TRAFFIC_PATH): - print(f"Traffic file not found: {TRAFFIC_PATH}", file=sys.stderr) - sys.exit(1) - if not os.path.exists(SPEC_PATH): - print(f"Spec file not found: {SPEC_PATH}", file=sys.stderr) - sys.exit(1) - - spec = load_spec(SPEC_PATH) - spec_set = extract_spec_paths(spec) - traffic_set, path_methods, path_params = extract_traffic_paths(TRAFFIC_PATH) - - report = build_report(spec_set, traffic_set, path_params, spec) - - with open(REPORT_PATH, "w") as f: - json.dump(report, f, indent=2) - - print(json.dumps(report["summary"], indent=2)) - missing = report["summary"]["missing_from_spec"] - print(f"\nDiff report written to {REPORT_PATH}") - if missing > 0: - print(f"WARNING: {missing} captured endpoint(s) missing from spec.") - sys.exit(2) - else: - print("All captured endpoints are documented in the spec.") - - -if __name__ == "__main__": - main() diff --git a/scripts/discovery/generate_traffic.py b/scripts/discovery/generate_traffic.py deleted file mode 100755 index 35e8714f6..000000000 --- a/scripts/discovery/generate_traffic.py +++ /dev/null @@ -1,148 +0,0 @@ -#!/usr/bin/env python3 -""" -Synthetic traffic generator for Plex Media Server. -Exercises a broad set of endpoints through the Arbiter proxy to maximize -coverage for the discovery/diff pipeline. -""" - -import argparse -import sys -import time -import urllib.request -import urllib.error -import json - - -def fetch(base: str, path: str, method: str = "GET", headers: dict = None, data: bytes = None): - """Make a request and return (status, body).""" - url = f"{base}{path}" - req = urllib.request.Request(url, method=method, data=data) - if headers: - for k, v in headers.items(): - req.add_header(k, v) - try: - with urllib.request.urlopen(req, timeout=10) as resp: - body = resp.read().decode("utf-8", errors="replace") - return resp.status, body - except urllib.error.HTTPError as e: - body = e.read().decode("utf-8", errors="replace") if e.fp else "" - return e.code, body - except Exception as e: - return 0, str(e) - - -def run(base: str, token: str = None): - headers = {} - if token: - headers["X-Plex-Token"] = token - - endpoints = [ - # Core identity & status - ("GET", "/identity"), - ("GET", "/"), - ("GET", "/status"), - ("GET", "/status/sessions"), - ("GET", "/status/sessions/history"), - ("GET", "/status/transcodes/active"), - - # Library - ("GET", "/library"), - ("GET", "/library/sections"), - ("GET", "/library/onDeck"), - ("GET", "/library/recentlyAdded"), - ("GET", "/library/search?query=test"), - - # System - ("GET", "/system/agents"), - ("GET", "/system/devices"), - ("GET", "/system/updates"), - - # Accounts & users - ("GET", "/accounts"), - ("GET", "/myplex/account"), - ("GET", "/home/users"), - - # Media providers - ("GET", "/media/providers"), - ("GET", "/media/providers/search?query=test"), - - # Hubs - ("GET", "/hubs"), - ("GET", "/hubs/home"), - ("GET", "/hubs/home/recentlyAdded"), - ("GET", "/hubs/sections/all"), - - # Clients & resources - ("GET", "/clients"), - ("GET", "/resources"), - ("GET", "/servers"), - ("GET", "/devices"), - - # Channels & plugins - ("GET", "/channels/all"), - ("GET", "/channels/recentlyViewed"), - - # Playlists - ("GET", "/playlists"), - - # Sync - ("GET", "/sync/items"), - ("GET", "/sync/transcodeQueue"), - - # Butlers & tasks - ("GET", "/butler"), - ("GET", "/butler/tasks"), - ("GET", "/butler/statistics"), - - # Preferences & settings - ("GET", "/:/prefs"), - ("GET", "/:/plugins"), - ("GET", "/:/prefs?X-Plex-Token=dummy"), - - # Statistics - ("GET", "/statistics/resources"), - ("GET", "/statistics/bandwidth"), - - # Services - ("GET", "/services/browse"), - - # Photo transcoder - ("GET", "/photo/:/transcode?url=/&width=100&height=100"), - - # Timeline - ("GET", "/player/timeline/poll"), - - # Diagnostics - ("GET", "/diagnostics/logs"), - ("GET", "/diagnostics/sections"), - - # Actions - ("POST", "/actions/scan"), - ("POST", "/actions/scan?force=1"), - ("GET", "/actions/generateMediaIndex"), - - # WebSocket (upgrade only; proxy captures the upgrade) - # This will 400 without WS upgrade headers but still registers the path - ("GET", "/:/websockets/notifications"), - ] - - print(f"[TRAFFIC] Hitting {len(endpoints)} endpoints via {base} ...", file=sys.stderr) - for method, path in endpoints: - status, _body = fetch(base, path, method=method, headers=headers) - indicator = "✓" if status == 200 else "○" if status in (401, 403) else "✗" - print(f" {indicator} {method} {path} -> {status}", file=sys.stderr) - time.sleep(0.1) - - print("[TRAFFIC] Done.", file=sys.stderr) - - -def main(): - parser = argparse.ArgumentParser(description="Generate synthetic Plex traffic") - parser.add_argument("--base", default="http://localhost:8080", help="Proxy base URL") - parser.add_argument("--token", default=None, help="X-Plex-Token for authenticated requests") - args = parser.parse_args() - run(args.base, args.token) - - -if __name__ == "__main__": - main() diff --git a/scripts/discovery/run_discovery.py b/scripts/discovery/run_discovery.py deleted file mode 100755 index d7fcda58e..000000000 --- a/scripts/discovery/run_discovery.py +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env python3 -""" -Orchestrates the full discovery pipeline using Arbiter as the proxy: - 1. Start Arbiter + PMS via docker-compose - 2. Wait for PMS and Arbiter docs server health - 3. Run synthetic traffic generator - 4. Fetch traffic.jsonl and diff report from Arbiter - 5. Stop services - 6. Run local diff_analyzer on captured traffic - 7. Output report and exit with appropriate code -""" - -import os -import subprocess -import sys -import time -import json -import urllib.request - -COMPOSE_FILE = os.environ.get("COMPOSE_FILE", "docker-compose.yml") -REPORT_PATH = os.environ.get("REPORT_PATH", "/tmp/diff_report.json") -TRAFFIC_PATH = os.environ.get("TRAFFIC_PATH", "/tmp/traffic.jsonl") -ARBITER_DOCS_URL = "http://localhost:9000" - -def run(cmd, check=True): - print(f"[DISCOVERY] {' '.join(cmd)}", file=sys.stderr) - return subprocess.run(cmd, check=check) - -def wait_for_url(url, timeout=180): - print(f"[DISCOVERY] Waiting for {url} ...", file=sys.stderr) - for i in range(timeout): - try: - with urllib.request.urlopen(url, timeout=5) as resp: - if resp.status == 200: - print(f"[DISCOVERY] {url} is up.", file=sys.stderr) - return True - except Exception: - pass - time.sleep(1) - print(f"[DISCOVERY] {url} failed to respond.", file=sys.stderr) - return False - -def fetch_jsonl(): - url = f"{ARBITER_DOCS_URL}/traffic.jsonl" - print(f"[DISCOVERY] Fetching traffic from {url} ...", file=sys.stderr) - try: - with urllib.request.urlopen(url, timeout=30) as resp: - with open(TRAFFIC_PATH, "wb") as f: - f.write(resp.read()) - print(f"[DISCOVERY] Traffic saved to {TRAFFIC_PATH}", file=sys.stderr) - return True - except Exception as e: - print(f"[DISCOVERY] Failed to fetch traffic: {e}", file=sys.stderr) - return False - -def fetch_diff(): - url = f"{ARBITER_DOCS_URL}/diff" - print(f"[DISCOVERY] Fetching diff from {url} ...", file=sys.stderr) - try: - with urllib.request.urlopen(url, timeout=30) as resp: - data = json.loads(resp.read()) - with open(REPORT_PATH, "w") as f: - json.dump(data, f, indent=2) - print(f"[DISCOVERY] Diff report saved to {REPORT_PATH}", file=sys.stderr) - return data - except Exception as e: - print(f"[DISCOVERY] Failed to fetch diff: {e}", file=sys.stderr) - return None - -def main(): - os.chdir(os.path.dirname(os.path.abspath(__file__))) - os.chdir("../..") # Back to project root - - # 1. Start services - run(["docker", "compose", "-f", COMPOSE_FILE, "up", "-d"]) - - # 2. Wait for PMS and Arbiter - pms_ok = wait_for_url("http://localhost:32400/identity") - arbiter_ok = wait_for_url(f"{ARBITER_DOCS_URL}/openapi.json", timeout=60) - - if not pms_ok: - run(["docker", "compose", "-f", COMPOSE_FILE, "logs", "pms"]) - run(["docker", "compose", "-f", COMPOSE_FILE, "down"]) - sys.exit(1) - - if not arbiter_ok: - run(["docker", "compose", "-f", COMPOSE_FILE, "logs", "proxy"]) - run(["docker", "compose", "-f", COMPOSE_FILE, "down"]) - sys.exit(1) - - # 3. Run synthetic traffic generator - print("[DISCOVERY] Running synthetic traffic generator...", file=sys.stderr) - result = subprocess.run([ - sys.executable, - "scripts/discovery/generate_traffic.py", - "--base", "http://localhost:8080", - ]) - if result.returncode != 0: - print("[DISCOVERY] Traffic generation failed, continuing anyway...", file=sys.stderr) - - # 4. Fetch outputs from Arbiter - fetch_jsonl() - arbiter_diff = fetch_diff() - - # 5. Stop services - run(["docker", "compose", "-f", COMPOSE_FILE, "down"]) - - # 6. Run local diff analyzer as fallback / cross-check - print("[DISCOVERY] Running local diff analyzer...", file=sys.stderr) - result = subprocess.run([sys.executable, "scripts/discovery/diff_analyzer.py"]) - - # 7. Output report summary - if os.path.exists(REPORT_PATH): - with open(REPORT_PATH) as f: - report = json.load(f) - print(json.dumps(report.get("summary", report), indent=2)) - elif arbiter_diff: - print(json.dumps(arbiter_diff.get("summary", arbiter_diff), indent=2)) - - sys.exit(result.returncode) - -if __name__ == "__main__": - main() diff --git a/scripts/extract_schemas.py b/scripts/extract_schemas.py deleted file mode 100644 index 55578cad6..000000000 --- a/scripts/extract_schemas.py +++ /dev/null @@ -1,142 +0,0 @@ -#!/usr/bin/env python3 -""" -Extract inline schemas from plex-api-spec.yaml into reusable components. -Run from repo root: python scripts/extract_schemas.py -""" - -import os -import sys -import yaml -from copy import deepcopy - -SPEC_PATH = "plex-api-spec.yaml" - - -def load_spec(): - if not os.path.exists(SPEC_PATH): - print(f"Error: Specification file not found at {SPEC_PATH}", file=sys.stderr) - sys.exit(1) - try: - with open(SPEC_PATH) as f: - return yaml.safe_load(f) - except yaml.YAMLError as e: - print(f"Error: Failed to parse YAML in {SPEC_PATH}: {e}", file=sys.stderr) - sys.exit(1) - - -def save_spec(spec): - with open(SPEC_PATH, "w") as f: - yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) - - -def _safe_extract(spec, path_keys, schema_name, item_key="items"): - """Safely extract an inline schema from a nested path.""" - try: - current = spec - for key in path_keys: - current = current[key] - spec["components"]["schemas"][schema_name] = deepcopy(current) - # Replace with $ref - parent = spec - for key in path_keys[:-1]: - parent = parent[key] - parent[path_keys[-1]] = {"$ref": f"#/components/schemas/{schema_name}"} - print(f"Extracted {schema_name} schema") - except KeyError as e: - print(f"Warning: Could not extract {schema_name} schema - missing key: {e}", file=sys.stderr) - - -def extract_activity(spec): - """Extract Activity inline schema from /activities GET 200 response.""" - _safe_extract( - spec, - ["paths", "/activities", "get", "responses", "200", "content", - "application/json", "schema", "properties", "MediaContainer", - "allOf", 0, "properties", "Activity", "items"], - "Activity", - ) - - -def extract_butler_task(spec): - """Extract ButlerTask inline schema from /butler GET 200 response.""" - _safe_extract( - spec, - ["paths", "/butler", "get", "responses", "200", "content", - "application/json", "schema", "properties", "ButlerTasks", - "properties", "ButlerTask", "items"], - "ButlerTask", - ) - - -def extract_updater_release(spec): - """Extract Release inline schema from /updater/status GET 200 response.""" - _safe_extract( - spec, - ["paths", "/updater/status", "get", "responses", "200", "content", - "application/json", "schema", "properties", "MediaContainer", - "allOf", 0, "properties", "Release", "items"], - "UpdaterRelease", - ) - - -def extract_download_queue(spec): - """Extract DownloadQueue inline schema from POST /downloadQueue 200 response.""" - _safe_extract( - spec, - ["paths", "/downloadQueue", "post", "responses", "200", "content", - "application/json", "schema", "properties", "MediaContainer", - "allOf", 1, "properties", "DownloadQueue"], - "DownloadQueue", - item_key=None, - ) - - -def extract_download_queue_item(spec): - """Extract DownloadQueueItem inline schema from GET /downloadQueue/{queueId}/items.""" - _safe_extract( - spec, - ["paths", "/downloadQueue/{queueId}/items", "get", "responses", "200", - "content", "application/json", "schema", "properties", "MediaContainer", - "allOf", 1, "properties", "DownloadQueueItem", "items"], - "DownloadQueueItem", - ) - - -def extract_media_grabber(spec): - """Extract MediaGrabber inline schema from GET /media/grabbers.""" - _safe_extract( - spec, - ["paths", "/media/grabbers", "get", "responses", "200", "content", - "application/json", "schema", "properties", "MediaContainer", - "allOf", 1, "properties", "MediaGrabber", "items"], - "MediaGrabber", - ) - - -def extract_device_channel(spec): - """Extract DeviceChannel inline schema from GET /media/grabbers/devices/{deviceId}/channels.""" - _safe_extract( - spec, - ["paths", "/media/grabbers/devices/{deviceId}/channels", "get", - "responses", "200", "content", "application/json", "schema", - "properties", "MediaContainer", "allOf", 1, "properties", - "DeviceChannel", "items"], - "DeviceChannel", - ) - - -def main(): - spec = load_spec() - extract_activity(spec) - extract_butler_task(spec) - extract_updater_release(spec) - extract_download_queue(spec) - extract_download_queue_item(spec) - extract_media_grabber(spec) - extract_device_channel(spec) - save_spec(spec) - print(f"Saved {SPEC_PATH}") - - -if __name__ == "__main__": - main() diff --git a/scripts/phase2_backfill.py b/scripts/phase2_backfill.py deleted file mode 100644 index b0b6b89c4..000000000 --- a/scripts/phase2_backfill.py +++ /dev/null @@ -1,746 +0,0 @@ -#!/usr/bin/env python3 -""" -Phase 2: Critical Path Backfill -Adds missing CRITICAL/HIGH priority endpoints and schemas to plex-api-spec.yaml. -""" - -import yaml -from copy import deepcopy - -SPEC_PATH = "plex-api-spec.yaml" - - -def load_spec(): - import os - import sys - if not os.path.exists(SPEC_PATH): - print(f"Error: Specification file not found at {SPEC_PATH}", file=sys.stderr) - sys.exit(1) - try: - with open(SPEC_PATH) as f: - return yaml.safe_load(f) - except yaml.YAMLError as e: - print(f"Error: Failed to parse YAML in {SPEC_PATH}: {e}", file=sys.stderr) - sys.exit(1) - - -def save_spec(spec): - with open(SPEC_PATH, "w") as f: - yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) - - -def add_schemas(spec): - """Add WebSocket/Event schemas and other missing reusable schemas.""" - schemas = spec.setdefault("components", {}).setdefault("schemas", {}) - - schemas["NotificationContainer"] = { - "type": "object", - "properties": { - "type": {"type": "string", "description": "The notification type"}, - "size": {"type": "integer", "description": "Number of notifications"}, - "PlaySessionStateNotification": { - "type": "array", - "items": {"$ref": "#/components/schemas/PlaySessionStateNotification"}, - }, - "StatusNotification": { - "type": "array", - "items": {"$ref": "#/components/schemas/StatusNotification"}, - }, - "ReachabilityNotification": { - "type": "array", - "items": {"$ref": "#/components/schemas/ReachabilityNotification"}, - }, - "TimelineEntry": { - "type": "array", - "items": {"$ref": "#/components/schemas/TimelineEntry"}, - }, - }, - } - - schemas["PlaySessionStateNotification"] = { - "type": "object", - "description": "Real-time playback state change notification", - "properties": { - "sessionKey": {"type": "string"}, - "guid": {"type": "string"}, - "ratingKey": {"type": "string"}, - "url": {"type": "string"}, - "key": {"type": "string"}, - "viewOffset": {"type": "integer"}, - "playQueueItemID": {"type": "integer"}, - "playQueueID": {"type": "integer"}, - "state": {"type": "string", "enum": ["playing", "paused", "stopped"]}, - "transcodeSession": {"type": "string"}, - "controllable": {"type": "string"}, - }, - } - - schemas["StatusNotification"] = { - "type": "object", - "description": "Server status notification (e.g. library scan complete)", - "properties": { - "title": {"type": "string"}, - "description": {"type": "string"}, - "type": {"type": "string"}, - }, - } - - schemas["ReachabilityNotification"] = { - "type": "object", - "description": "Server reachability status change notification", - "properties": { - "status": {"type": "string"}, - }, - } - - schemas["TimelineEntry"] = { - "type": "object", - "description": "A timeline update entry delivered via WebSocket or EventSource", - "properties": { - "itemID": {"type": "integer"}, - "type": {"type": "integer"}, - "title": {"type": "string"}, - "state": {"type": "integer"}, - "playQueueItemID": {"type": "integer"}, - "metadataState": {"type": "string"}, - }, - } - - print("Added event/notification schemas") - - -def add_plex_tv_endpoints(spec): - """Add missing plex.tv v2 authentication and account endpoints.""" - paths = spec.setdefault("paths", {}) - - # Common X-Plex parameter references - x_plex_params = [ - {"$ref": "#/components/parameters/accepts"}, - {"$ref": "#/components/parameters/X-Plex-Client-Identifier"}, - {"$ref": "#/components/parameters/X-Plex-Product"}, - {"$ref": "#/components/parameters/X-Plex-Version"}, - {"$ref": "#/components/parameters/X-Plex-Platform"}, - {"$ref": "#/components/parameters/X-Plex-Platform-Version"}, - {"$ref": "#/components/parameters/X-Plex-Device"}, - {"$ref": "#/components/parameters/X-Plex-Model"}, - {"$ref": "#/components/parameters/X-Plex-Device-Vendor"}, - {"$ref": "#/components/parameters/X-Plex-Device-Name"}, - {"$ref": "#/components/parameters/X-Plex-Marketplace"}, - ] - - # Standard 200 response for simple OK - ok_200 = {"description": "OK"} - bad_request = {"$ref": "#/components/responses/400"} - unauthorized = {"$ref": "#/components/responses/401"} - - # OAuth PIN Flow - paths.setdefault("/pins", {}) - paths["/pins"] = { - "post": { - "operationId": "createOAuthPin", - "summary": "Create OAuth PIN", - "description": "Create a 4-character PIN for device linking via OAuth. The user must visit https://plex.tv/link and enter the PIN to authorize the device.", - "tags": ["Authentication"], - "servers": [{"url": "https://plex.tv/api/v2"}], - "security": [{"clientIdentifier": []}], - "parameters": deepcopy(x_plex_params), - "responses": { - "200": { - "description": "PIN created successfully", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": {"type": "integer"}, - "code": {"type": "string"}, - "product": {"type": "string"}, - "trusted": {"type": "boolean"}, - "qr": {"type": "string"}, - "clientIdentifier": {"type": "string"}, - "expiresIn": {"type": "integer"}, - "createdAt": {"type": "string"}, - "expiresAt": {"type": "string"}, - "authToken": {"type": "string", "nullable": True}, - "newRegistration": {"type": "boolean"}, - }, - } - } - }, - }, - "400": deepcopy(bad_request), - "401": deepcopy(unauthorized), - }, - } - } - - paths.setdefault("/pins/{pinId}", {}) - paths["/pins/{pinId}"] = { - "get": { - "operationId": "getOAuthPin", - "summary": "Get OAuth PIN Status", - "description": "Poll the PIN status. Returns authToken when the user has linked the device.", - "tags": ["Authentication"], - "servers": [{"url": "https://plex.tv/api/v2"}], - "security": [{"clientIdentifier": []}], - "parameters": deepcopy(x_plex_params) - + [ - { - "name": "pinId", - "in": "path", - "required": True, - "schema": {"type": "integer"}, - } - ], - "responses": { - "200": { - "description": "PIN status", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": {"type": "integer"}, - "code": {"type": "string"}, - "product": {"type": "string"}, - "trusted": {"type": "boolean"}, - "qr": {"type": "string"}, - "clientIdentifier": {"type": "string"}, - "expiresIn": {"type": "integer"}, - "createdAt": {"type": "string"}, - "expiresAt": {"type": "string"}, - "authToken": {"type": "string", "nullable": True}, - "newRegistration": {"type": "boolean"}, - "pmsIdentifier": {"type": "string", "nullable": True}, - "pmsVersion": {"type": "string", "nullable": True}, - }, - } - } - }, - }, - "400": deepcopy(bad_request), - "401": deepcopy(unauthorized), - }, - } - } - - # Sign out - paths.setdefault("/users/signout", {}) - paths["/users/signout"] = { - "delete": { - "operationId": "signOut", - "summary": "Sign Out", - "description": "Invalidate the current authentication token.", - "tags": ["Authentication"], - "servers": [{"url": "https://plex.tv/api/v2"}], - "parameters": deepcopy(x_plex_params), - "responses": {"200": ok_200, "400": deepcopy(bad_request)}, - } - } - - # Ping - paths.setdefault("/ping", {}) - paths["/ping"] = { - "get": { - "operationId": "ping", - "summary": "Ping", - "description": "Health / latency check. No authentication required.", - "tags": ["Authentication"], - "servers": [{"url": "https://plex.tv/api/v2"}], - "security": [], - "responses": {"200": ok_200}, - } - } - - # Friends - paths.setdefault("/friends", {}) - paths["/friends"] = { - "get": { - "operationId": "getFriends", - "summary": "Get Friends", - "description": "Get the list of friends and shared users.", - "tags": ["Users"], - "servers": [{"url": "https://plex.tv/api/v2"}], - "parameters": deepcopy(x_plex_params), - "responses": { - "200": { - "description": "List of friends", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "users": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": {"type": "integer"}, - "uuid": {"type": "string"}, - "title": {"type": "string"}, - "username": {"type": "string"}, - "email": {"type": "string"}, - "thumb": {"type": "string"}, - }, - }, - } - }, - } - } - }, - }, - "400": deepcopy(bad_request), - "401": deepcopy(unauthorized), - }, - } - } - - print("Added plex.tv auth/account endpoints") - - -def add_core_pms_endpoints(spec): - """Add critical missing PMS local endpoints.""" - paths = spec.setdefault("paths", {}) - - x_plex_params = [ - {"$ref": "#/components/parameters/accepts"}, - {"$ref": "#/components/parameters/X-Plex-Client-Identifier"}, - {"$ref": "#/components/parameters/X-Plex-Product"}, - {"$ref": "#/components/parameters/X-Plex-Version"}, - {"$ref": "#/components/parameters/X-Plex-Platform"}, - {"$ref": "#/components/parameters/X-Plex-Platform-Version"}, - {"$ref": "#/components/parameters/X-Plex-Device"}, - {"$ref": "#/components/parameters/X-Plex-Model"}, - {"$ref": "#/components/parameters/X-Plex-Device-Vendor"}, - {"$ref": "#/components/parameters/X-Plex-Device-Name"}, - {"$ref": "#/components/parameters/X-Plex-Marketplace"}, - ] - - ok_200 = {"description": "OK"} - - # /clients - paths.setdefault("/clients", {}) - paths["/clients"] = { - "get": { - "operationId": "getClients", - "summary": "Get Clients", - "description": "Get a list of connected Plex clients.", - "tags": ["General"], - "parameters": deepcopy(x_plex_params), - "responses": { - "200": { - "description": "List of clients", - "content": { - "application/json": { - "schema": { - "allOf": [ - {"$ref": "#/components/schemas/MediaContainer"}, - { - "type": "object", - "properties": { - "Server": { - "type": "array", - "items": {"$ref": "#/components/schemas/PlexDevice"}, - } - }, - }, - ] - } - } - }, - } - }, - } - } - - # /accounts - paths.setdefault("/accounts", {}) - paths["/accounts"] = { - "get": { - "operationId": "getSystemAccounts", - "summary": "Get System Accounts", - "description": "Get a list of local system accounts.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x_plex_params), - "responses": {"200": ok_200}, - } - } - - # /devices - paths.setdefault("/devices", {}) - paths["/devices"] = { - "get": { - "operationId": "getSystemDevices", - "summary": "Get System Devices", - "description": "Get a list of local system devices.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x_plex_params), - "responses": {"200": ok_200}, - } - } - - # /servers - paths.setdefault("/servers", {}) - paths["/servers"] = { - "get": { - "operationId": "getLocalServers", - "summary": "Get Local Servers", - "description": "Get a list of local servers.", - "tags": ["General"], - "parameters": deepcopy(x_plex_params), - "responses": {"200": ok_200}, - } - } - - # /library/sections/{sectionId}/onDeck - paths.setdefault("/library/sections/{sectionId}/onDeck", {}) - paths["/library/sections/{sectionId}/onDeck"] = { - "get": { - "operationId": "getOnDeck", - "summary": "Get On Deck", - "description": "Get On Deck items for a library section.", - "tags": ["Library"], - "parameters": deepcopy(x_plex_params) - + [ - { - "name": "sectionId", - "in": "path", - "required": True, - "schema": {"type": "integer"}, - } - ], - "responses": { - "200": { - "description": "On Deck items", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/MediaContainerWithMetadata"} - } - }, - } - }, - } - } - - # /library/sections/{sectionId}/recentlyAdded - paths.setdefault("/library/sections/{sectionId}/recentlyAdded", {}) - paths["/library/sections/{sectionId}/recentlyAdded"] = { - "get": { - "operationId": "getRecentlyAddedBySection", - "summary": "Get Recently Added by Section", - "description": "Get recently added items for a specific library section.", - "tags": ["Library"], - "parameters": deepcopy(x_plex_params) - + [ - { - "name": "sectionId", - "in": "path", - "required": True, - "schema": {"type": "integer"}, - } - ], - "responses": { - "200": { - "description": "Recently added items", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/MediaContainerWithMetadata"} - } - }, - } - }, - } - } - - # /library/recentlyAdded - paths.setdefault("/library/recentlyAdded", {}) - paths["/library/recentlyAdded"] = { - "get": { - "operationId": "getRecentlyAdded", - "summary": "Get Recently Added", - "description": "Get globally recently added items across all libraries.", - "tags": ["Library"], - "parameters": deepcopy(x_plex_params), - "responses": { - "200": { - "description": "Recently added items", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/MediaContainerWithMetadata"} - } - }, - } - }, - } - } - - # /hubs/home/recentlyAdded - paths.setdefault("/hubs/home/recentlyAdded", {}) - paths["/hubs/home/recentlyAdded"] = { - "get": { - "operationId": "getHomeRecentlyAdded", - "summary": "Get Home Recently Added", - "description": "Get hub-centric recently added items.", - "tags": ["Hubs"], - "parameters": deepcopy(x_plex_params), - "responses": { - "200": { - "description": "Recently added hub items", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/MediaContainerWithHubs"} - } - }, - } - }, - } - } - - # /system/agents - paths.setdefault("/system/agents", {}) - paths["/system/agents"] = { - "get": { - "operationId": "getMetadataAgents", - "summary": "Get Metadata Agents", - "description": "Get a list of available metadata agents.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x_plex_params), - "responses": {"200": ok_200}, - } - } - - # /actions/removeFromContinueWatching - paths.setdefault("/actions/removeFromContinueWatching", {}) - paths["/actions/removeFromContinueWatching"] = { - "put": { - "operationId": "removeFromContinueWatching", - "summary": "Remove from Continue Watching", - "description": "Remove an item from the Continue Watching hub.", - "tags": ["General"], - "parameters": deepcopy(x_plex_params) - + [ - { - "name": "ratingKey", - "in": "query", - "required": True, - "schema": {"type": "string"}, - } - ], - "responses": {"200": ok_200}, - } - } - - print("Added core PMS missing endpoints") - - -def add_cloud_provider_endpoints(spec): - """Add Plex Discover / Cloud provider endpoints.""" - paths = spec.setdefault("paths", {}) - - x_plex_params = [ - {"$ref": "#/components/parameters/accepts"}, - {"$ref": "#/components/parameters/X-Plex-Client-Identifier"}, - {"$ref": "#/components/parameters/X-Plex-Product"}, - {"$ref": "#/components/parameters/X-Plex-Version"}, - {"$ref": "#/components/parameters/X-Plex-Platform"}, - {"$ref": "#/components/parameters/X-Plex-Platform-Version"}, - {"$ref": "#/components/parameters/X-Plex-Device"}, - {"$ref": "#/components/parameters/X-Plex-Model"}, - {"$ref": "#/components/parameters/X-Plex-Device-Vendor"}, - {"$ref": "#/components/parameters/X-Plex-Device-Name"}, - {"$ref": "#/components/parameters/X-Plex-Marketplace"}, - ] - - ok_200 = {"description": "OK"} - bad_request = {"$ref": "#/components/responses/400"} - unauthorized = {"$ref": "#/components/responses/401"} - - # Discover search - paths.setdefault("/library/search", {}) - paths["/library/search"] = { - "get": { - "operationId": "searchDiscover", - "summary": "Search Discover", - "description": "Search movies and shows in Plex Discover.", - "tags": ["Provider"], - "servers": [{"url": "https://discover.provider.plex.tv"}], - "parameters": deepcopy(x_plex_params) - + [ - { - "name": "query", - "in": "query", - "schema": {"type": "string"}, - }, - { - "name": "limit", - "in": "query", - "schema": {"type": "integer", "default": 10}, - }, - { - "name": "searchTypes", - "in": "query", - "schema": {"type": "string", "example": "movies,tv"}, - }, - { - "name": "searchProviders", - "in": "query", - "schema": { - "type": "string", - "example": "discover,PLEXAVOD,PLEXTVOD", - }, - }, - { - "name": "includeMetadata", - "in": "query", - "schema": {"type": "integer", "default": 1}, - }, - ], - "responses": { - "200": ok_200, - "400": deepcopy(bad_request), - "401": deepcopy(unauthorized), - }, - } - } - - # Discover watchlist - paths.setdefault("/library/sections/watchlist/all", {}) - paths["/library/sections/watchlist/all"] = { - "get": { - "operationId": "getWatchlist", - "summary": "Get Watchlist", - "description": "Get the user's Plex Discover watchlist.", - "tags": ["Provider"], - "servers": [{"url": "https://discover.provider.plex.tv"}], - "parameters": deepcopy(x_plex_params), - "responses": { - "200": { - "description": "Watchlist items", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/MediaContainerWithMetadata"} - } - }, - }, - "400": deepcopy(bad_request), - "401": deepcopy(unauthorized), - }, - } - } - - # Add to watchlist - paths.setdefault("/actions/addToWatchlist", {}) - paths["/actions/addToWatchlist"] = { - "post": { - "operationId": "addToWatchlist", - "summary": "Add to Watchlist", - "description": "Add an item to the user's Plex Discover watchlist.", - "tags": ["Provider"], - "servers": [{"url": "https://discover.provider.plex.tv"}], - "parameters": deepcopy(x_plex_params) - + [ - { - "name": "uri", - "in": "query", - "required": True, - "schema": {"type": "string"}, - } - ], - "responses": { - "200": ok_200, - "400": deepcopy(bad_request), - "401": deepcopy(unauthorized), - }, - } - } - - # Remove from watchlist - paths.setdefault("/actions/removeFromWatchlist", {}) - paths["/actions/removeFromWatchlist"] = { - "post": { - "operationId": "removeFromWatchlist", - "summary": "Remove from Watchlist", - "description": "Remove an item from the user's Plex Discover watchlist.", - "tags": ["Provider"], - "servers": [{"url": "https://discover.provider.plex.tv"}], - "parameters": deepcopy(x_plex_params) - + [ - { - "name": "uri", - "in": "query", - "required": True, - "schema": {"type": "string"}, - } - ], - "responses": { - "200": ok_200, - "400": deepcopy(bad_request), - "401": deepcopy(unauthorized), - }, - } - } - - print("Added cloud provider endpoints") - - -def add_websocket_path(spec): - """Add the plural WebSocket notification path.""" - paths = spec.setdefault("paths", {}) - - x_plex_params = [ - {"$ref": "#/components/parameters/accepts"}, - {"$ref": "#/components/parameters/X-Plex-Client-Identifier"}, - {"$ref": "#/components/parameters/X-Plex-Product"}, - {"$ref": "#/components/parameters/X-Plex-Version"}, - {"$ref": "#/components/parameters/X-Plex-Platform"}, - {"$ref": "#/components/parameters/X-Plex-Platform-Version"}, - {"$ref": "#/components/parameters/X-Plex-Device"}, - {"$ref": "#/components/parameters/X-Plex-Model"}, - {"$ref": "#/components/parameters/X-Plex-Device-Vendor"}, - {"$ref": "#/components/parameters/X-Plex-Device-Name"}, - {"$ref": "#/components/parameters/X-Plex-Marketplace"}, - ] - - paths.setdefault("/:/websockets/notifications", {}) - paths["/:/websockets/notifications"] = { - "get": { - "operationId": "getWebsocketNotifications", - "summary": "Get WebSocket Notifications", - "description": "WebSocket endpoint for real-time notifications (plural alias). Connect with X-Plex-Token header. Delivers NotificationContainer messages.", - "tags": ["Events"], - "parameters": deepcopy(x_plex_params), - "responses": { - "101": { - "description": "Switching Protocols - WebSocket connection established", - }, - "200": { - "description": "WebSocket messages", - "content": { - "application/octet-stream": { - "schema": {"$ref": "#/components/schemas/NotificationContainer"} - } - }, - }, - }, - } - } - - print("Added WebSocket plural alias path") - - -def main(): - spec = load_spec() - add_schemas(spec) - add_plex_tv_endpoints(spec) - add_core_pms_endpoints(spec) - add_cloud_provider_endpoints(spec) - add_websocket_path(spec) - save_spec(spec) - print(f"Saved {SPEC_PATH}") - - -if __name__ == "__main__": - main() diff --git a/scripts/phase2_backfill_b.py b/scripts/phase2_backfill_b.py deleted file mode 100644 index 15f16bdf3..000000000 --- a/scripts/phase2_backfill_b.py +++ /dev/null @@ -1,583 +0,0 @@ -#!/usr/bin/env python3 -""" -Phase 2b: Additional critical endpoints -""" - -import yaml -from copy import deepcopy - -SPEC_PATH = "plex-api-spec.yaml" - - -def load_spec(): - import os - import sys - if not os.path.exists(SPEC_PATH): - print(f"Error: Specification file not found at {SPEC_PATH}", file=sys.stderr) - sys.exit(1) - try: - with open(SPEC_PATH) as f: - return yaml.safe_load(f) - except yaml.YAMLError as e: - print(f"Error: Failed to parse YAML in {SPEC_PATH}: {e}", file=sys.stderr) - sys.exit(1) - - -def save_spec(spec): - with open(SPEC_PATH, "w") as f: - yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) - - -def get_x_plex_params(): - return [ - {"$ref": "#/components/parameters/accepts"}, - {"$ref": "#/components/parameters/X-Plex-Client-Identifier"}, - {"$ref": "#/components/parameters/X-Plex-Product"}, - {"$ref": "#/components/parameters/X-Plex-Version"}, - {"$ref": "#/components/parameters/X-Plex-Platform"}, - {"$ref": "#/components/parameters/X-Plex-Platform-Version"}, - {"$ref": "#/components/parameters/X-Plex-Device"}, - {"$ref": "#/components/parameters/X-Plex-Model"}, - {"$ref": "#/components/parameters/X-Plex-Device-Vendor"}, - {"$ref": "#/components/parameters/X-Plex-Device-Name"}, - {"$ref": "#/components/parameters/X-Plex-Marketplace"}, - ] - - -def ok_200(): - return {"description": "OK"} - - -def add_plex_tv_sharing(spec): - paths = spec.setdefault("paths", {}) - x = get_x_plex_params() - ok = ok_200() - bad = {"$ref": "#/components/responses/400"} - unauth = {"$ref": "#/components/responses/401"} - - # POST /shared_servers - paths.setdefault("/shared_servers", {}) - paths["/shared_servers"] = { - "post": { - "operationId": "shareServer", - "summary": "Share Server", - "description": "Share a server with a friend or managed user.", - "tags": ["Users"], - "servers": [{"url": "https://plex.tv/api/v2"}], - "parameters": deepcopy(x), - "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, - } - } - - # PUT/DELETE /sharings/{userId} - paths.setdefault("/sharings/{userId}", {}) - paths["/sharings/{userId}"] = { - "put": { - "operationId": "updateShare", - "summary": "Update Share", - "description": "Update friend filters (allowSync, filterMovies, etc.).", - "tags": ["Users"], - "servers": [{"url": "https://plex.tv/api/v2"}], - "parameters": deepcopy(x) - + [ - { - "name": "userId", - "in": "path", - "required": True, - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, - }, - "delete": { - "operationId": "removeShare", - "summary": "Remove Share", - "description": "Remove a share / friend.", - "tags": ["Users"], - "servers": [{"url": "https://plex.tv/api/v2"}], - "parameters": deepcopy(x) - + [ - { - "name": "userId", - "in": "path", - "required": True, - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, - }, - } - - # PUT /home/users/restricted/{userId} - paths.setdefault("/home/users/restricted/{userId}", {}) - paths["/home/users/restricted/{userId}"] = { - "put": { - "operationId": "updateRestrictedUser", - "summary": "Update Restricted User", - "description": "Update restricted (managed) home user settings.", - "tags": ["Users"], - "servers": [{"url": "https://plex.tv/api/v2"}], - "parameters": deepcopy(x) - + [ - { - "name": "userId", - "in": "path", - "required": True, - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, - } - } - - # GET/POST /home/users - paths.setdefault("/home/users", {}) - paths["/home/users"] = { - "get": { - "operationId": "getHomeUsers", - "summary": "Get Home Users", - "description": "Get the list of Plex Home users.", - "tags": ["Users"], - "servers": [{"url": "https://plex.tv/api"}], - "parameters": deepcopy(x), - "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, - }, - "post": { - "operationId": "createHomeUser", - "summary": "Create Home User", - "description": "Create a new Plex Home user.", - "tags": ["Users"], - "servers": [{"url": "https://plex.tv/api"}], - "parameters": deepcopy(x), - "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, - }, - } - - # DELETE/PUT /home/users/{userId} - paths.setdefault("/home/users/{userId}", {}) - paths["/home/users/{userId}"] = { - "delete": { - "operationId": "deleteHomeUser", - "summary": "Delete Home User", - "description": "Remove a Plex Home user.", - "tags": ["Users"], - "servers": [{"url": "https://plex.tv/api"}], - "parameters": deepcopy(x) - + [ - { - "name": "userId", - "in": "path", - "required": True, - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, - }, - "put": { - "operationId": "updateHomeUser", - "summary": "Update Home User", - "description": "Update a Plex Home user.", - "tags": ["Users"], - "servers": [{"url": "https://plex.tv/api"}], - "parameters": deepcopy(x) - + [ - { - "name": "userId", - "in": "path", - "required": True, - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, - }, - } - - # POST /home/users/{id}/switch - paths.setdefault("/home/users/{id}/switch", {}) - paths["/home/users/{id}/switch"] = { - "post": { - "operationId": "switchHomeUser", - "summary": "Switch Home User", - "description": "Switch to a Plex Home user and return a new auth token.", - "tags": ["Authentication"], - "servers": [{"url": "https://plex.tv/api"}], - "parameters": deepcopy(x) - + [ - { - "name": "id", - "in": "path", - "required": True, - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, - } - } - - # POST /servers/{machineId}/shared_servers - paths.setdefault("/servers/{machineId}/shared_servers", {}) - paths["/servers/{machineId}/shared_servers"] = { - "post": { - "operationId": "shareServerLegacy", - "summary": "Share Server (Legacy v1)", - "description": "Share a library with a friend (legacy v1 XML endpoint).", - "tags": ["Users"], - "servers": [{"url": "https://plex.tv/api"}], - "parameters": deepcopy(x) - + [ - { - "name": "machineId", - "in": "path", - "required": True, - "schema": {"type": "string"}, - } - ], - "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, - } - } - - # GET /servers/{machineId} - paths.setdefault("/servers/{machineId}", {}) - paths["/servers/{machineId}"] = { - "get": { - "operationId": "getServerDetails", - "summary": "Get Server Details", - "description": "Get server details for sharing.", - "tags": ["Users"], - "servers": [{"url": "https://plex.tv/api"}], - "parameters": deepcopy(x) - + [ - { - "name": "machineId", - "in": "path", - "required": True, - "schema": {"type": "string"}, - } - ], - "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, - } - } - - # GET /claim/token.json - paths.setdefault("/claim/token.json", {}) - paths["/claim/token.json"] = { - "get": { - "operationId": "getClaimToken", - "summary": "Get Claim Token", - "description": "Get a claim token for new server setup.", - "tags": ["Authentication"], - "servers": [{"url": "https://plex.tv/api"}], - "parameters": deepcopy(x), - "responses": {"200": ok, "400": deepcopy(bad), "401": deepcopy(unauth)}, - } - } - - print("Added plex.tv sharing/home/claim endpoints") - - -def add_core_pms_remaining(spec): - paths = spec.setdefault("paths", {}) - x = get_x_plex_params() - ok = ok_200() - - # GET /system/agents/{agentId} - paths.setdefault("/system/agents/{agentId}", {}) - paths["/system/agents/{agentId}"] = { - "get": { - "operationId": "getMetadataAgentDetails", - "summary": "Get Metadata Agent Details", - "description": "Get details and settings for a specific metadata agent.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x) - + [ - { - "name": "agentId", - "in": "path", - "required": True, - "schema": {"type": "string"}, - } - ], - "responses": {"200": ok}, - } - } - - # GET /system/settings - paths.setdefault("/system/settings", {}) - paths["/system/settings"] = { - "get": { - "operationId": "getSystemSettings", - "summary": "Get System Settings", - "description": "Get system-level settings.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x), - "responses": {"200": ok}, - } - } - - # GET /system/updates - paths.setdefault("/system/updates", {}) - paths["/system/updates"] = { - "get": { - "operationId": "checkForSystemUpdates", - "summary": "Check for System Updates", - "description": "Check for available PMS updates.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x), - "responses": {"200": ok}, - } - } - - # GET /diagnostics - paths.setdefault("/diagnostics", {}) - paths["/diagnostics"] = { - "get": { - "operationId": "getDiagnostics", - "summary": "Get Diagnostics", - "description": "Get server diagnostics overview.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x), - "responses": {"200": ok}, - } - } - - # GET /diagnostics/databases - paths.setdefault("/diagnostics/databases", {}) - paths["/diagnostics/databases"] = { - "get": { - "operationId": "downloadDatabaseDiagnostics", - "summary": "Download Database Diagnostics", - "description": "Download server database diagnostics bundle.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x), - "responses": {"200": ok}, - } - } - - # GET /diagnostics/logs - paths.setdefault("/diagnostics/logs", {}) - paths["/diagnostics/logs"] = { - "get": { - "operationId": "downloadLogBundle", - "summary": "Download Log Bundle", - "description": "Download server logs bundle.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x), - "responses": {"200": ok}, - } - } - - # GET /statistics/bandwidth - paths.setdefault("/statistics/bandwidth", {}) - paths["/statistics/bandwidth"] = { - "get": { - "operationId": "getBandwidthStatistics", - "summary": "Get Bandwidth Statistics", - "description": "Get dashboard bandwidth data.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x) - + [ - { - "name": "timespan", - "in": "query", - "schema": {"type": "integer", "minimum": 1, "maximum": 6}, - } - ], - "responses": {"200": ok}, - } - } - - # GET /statistics/resources - paths.setdefault("/statistics/resources", {}) - paths["/statistics/resources"] = { - "get": { - "operationId": "getResourceStatistics", - "summary": "Get Resource Statistics", - "description": "Get dashboard resource data.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x), - "responses": {"200": ok}, - } - } - - # GET /services/browse - paths.setdefault("/services/browse", {}) - paths["/services/browse"] = { - "get": { - "operationId": "browseFilesystem", - "summary": "Browse Filesystem", - "description": "Browse filesystem paths accessible to the server.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x) - + [ - { - "name": "includeFiles", - "in": "query", - "schema": {"type": "boolean"}, - } - ], - "responses": {"200": ok}, - } - } - - # GET /services/browse/{base64path} - paths.setdefault("/services/browse/{base64path}", {}) - paths["/services/browse/{base64path}"] = { - "get": { - "operationId": "browseFilesystemPath", - "summary": "Browse Filesystem Path", - "description": "Browse a specific filesystem path.", - "tags": ["General"], - "security": [{"token": ["admin"]}], - "parameters": deepcopy(x) - + [ - { - "name": "base64path", - "in": "path", - "required": True, - "schema": {"type": "string"}, - } - ], - "responses": {"200": ok}, - } - } - - # GET /sync - paths.setdefault("/sync", {}) - paths["/sync"] = { - "get": { - "operationId": "getSyncStatus", - "summary": "Get Sync Status", - "description": "Get sync status overview.", - "tags": ["General"], - "parameters": deepcopy(x), - "responses": {"200": ok}, - } - } - - # GET /sync/items - paths.setdefault("/sync/items", {}) - paths["/sync/items"] = { - "get": { - "operationId": "getSyncItems", - "summary": "Get Sync Items", - "description": "Get sync items list.", - "tags": ["General"], - "parameters": deepcopy(x), - "responses": {"200": ok}, - } - } - - # GET /sync/items/{syncId} - paths.setdefault("/sync/items/{syncId}", {}) - paths["/sync/items/{syncId}"] = { - "get": { - "operationId": "getSyncItem", - "summary": "Get Sync Item", - "description": "Get sync item details.", - "tags": ["General"], - "parameters": deepcopy(x) - + [ - { - "name": "syncId", - "in": "path", - "required": True, - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok}, - } - } - - # GET /sync/queue - paths.setdefault("/sync/queue", {}) - paths["/sync/queue"] = { - "get": { - "operationId": "getSyncQueue", - "summary": "Get Sync Queue", - "description": "Get sync queue.", - "tags": ["General"], - "parameters": deepcopy(x), - "responses": {"200": ok}, - } - } - - # GET /sync/transcodeQueue - paths.setdefault("/sync/transcodeQueue", {}) - paths["/sync/transcodeQueue"] = { - "get": { - "operationId": "getSyncTranscodeQueue", - "summary": "Get Sync Transcode Queue", - "description": "Get sync transcode queue status.", - "tags": ["General"], - "parameters": deepcopy(x), - "responses": {"200": ok}, - } - } - - # PUT /sync/refreshSynclists - paths.setdefault("/sync/refreshSynclists", {}) - paths["/sync/refreshSynclists"] = { - "put": { - "operationId": "refreshSyncLists", - "summary": "Refresh Sync Lists", - "description": "Force PMS to download new SyncList from plex.tv.", - "tags": ["General"], - "parameters": deepcopy(x), - "responses": {"200": ok}, - } - } - - # PUT /sync/refreshContent - paths.setdefault("/sync/refreshContent", {}) - paths["/sync/refreshContent"] = { - "put": { - "operationId": "refreshSyncContent", - "summary": "Refresh Sync Content", - "description": "Force PMS to refresh content for known SyncLists.", - "tags": ["General"], - "parameters": deepcopy(x), - "responses": {"200": ok}, - } - } - - # GET /:/progress - paths.setdefault("/:/progress", {}) - paths["/:/progress"] = { - "get": { - "operationId": "updateProgress", - "summary": "Update Progress", - "description": "Updates watch progress for an item.", - "tags": ["General"], - "parameters": deepcopy(x) - + [ - {"name": "key", "in": "query", "required": True, "schema": {"type": "string"}}, - {"name": "identifier", "in": "query", "schema": {"type": "string"}}, - {"name": "time", "in": "query", "schema": {"type": "integer"}}, - {"name": "state", "in": "query", "schema": {"type": "string"}}, - ], - "responses": {"200": ok}, - } - } - - print("Added remaining core PMS endpoints") - - -def main(): - spec = load_spec() - add_plex_tv_sharing(spec) - add_core_pms_remaining(spec) - save_spec(spec) - print(f"Saved {SPEC_PATH}") - - -if __name__ == "__main__": - main() diff --git a/scripts/phase2b_client_control.py b/scripts/phase2b_client_control.py deleted file mode 100644 index 60ca19aa1..000000000 --- a/scripts/phase2b_client_control.py +++ /dev/null @@ -1,562 +0,0 @@ -#!/usr/bin/env python3 -""" -Phase 2b: Client Remote-Control Protocol & Query Parameters -""" - -import yaml -from copy import deepcopy - -SPEC_PATH = "plex-api-spec.yaml" - - -def load_spec(): - with open(SPEC_PATH, "r") as f: - return yaml.safe_load(f) - - -def save_spec(spec): - with open(SPEC_PATH, "w") as f: - yaml.dump(spec, f, default_flow_style=False, sort_keys=False, allow_unicode=True) - - -def get_x_plex_params(): - return [ - {"$ref": "#/components/parameters/accepts"}, - {"$ref": "#/components/parameters/X-Plex-Client-Identifier"}, - {"$ref": "#/components/parameters/X-Plex-Product"}, - {"$ref": "#/components/parameters/X-Plex-Version"}, - {"$ref": "#/components/parameters/X-Plex-Platform"}, - {"$ref": "#/components/parameters/X-Plex-Platform-Version"}, - {"$ref": "#/components/parameters/X-Plex-Device"}, - {"$ref": "#/components/parameters/X-Plex-Model"}, - {"$ref": "#/components/parameters/X-Plex-Device-Vendor"}, - {"$ref": "#/components/parameters/X-Plex-Device-Name"}, - {"$ref": "#/components/parameters/X-Plex-Marketplace"}, - ] - - -def ok_200(): - return {"description": "OK"} - - -def add_client_control_endpoints(spec): - """Add the Plex Client Remote-Control Protocol endpoints.""" - paths = spec.setdefault("paths", {}) - x = get_x_plex_params() - ok = ok_200() - - # Base params for all player endpoints - player_params = deepcopy(x) + [ - { - "name": "X-Plex-Target-Client-Identifier", - "in": "header", - "description": "The client identifier of the target device to control. If omitted, the command is sent to the default/active client.", - "schema": {"type": "string"}, - } - ] - - # Simple playback commands (POST, no body) - simple_commands = [ - ("play", "Play", "Start playback on the client"), - ("pause", "Pause", "Pause playback on the client"), - ("stop", "Stop", "Stop playback on the client"), - ("stepForward", "Step Forward", "Step forward one frame"), - ("stepBack", "Step Back", "Step back one frame"), - ("mute", "Mute", "Mute the client audio"), - ("unmute", "Unmute", "Unmute the client audio"), - ("refreshPlayQueue", "Refresh Play Queue", "Refresh the play queue on the client"), - ] - - for cmd, summary, desc in simple_commands: - path = f"/player/playback/{cmd}" - paths.setdefault(path, {}) - paths[path] = { - "post": { - "operationId": f"player{cmd.title().replace('_', '')}", - "summary": f"Player {summary}", - "description": desc, - "tags": ["Playback"], - "parameters": deepcopy(player_params), - "responses": {"200": ok}, - } - } - - # Commands with query params - paths.setdefault("/player/playback/seek", {}) - paths["/player/playback/seek"] = { - "post": { - "operationId": "playerSeek", - "summary": "Player Seek", - "description": "Seek to a specific time in the current playback.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "offset", - "in": "query", - "description": "Target offset in milliseconds", - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/skipTo", {}) - paths["/player/playback/skipTo"] = { - "post": { - "operationId": "playerSkipTo", - "summary": "Player Skip To", - "description": "Skip to a specific item in the play queue.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "key", - "in": "query", - "description": "The key of the item to skip to", - "schema": {"type": "string"}, - } - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/skipBy", {}) - paths["/player/playback/skipBy"] = { - "post": { - "operationId": "playerSkipBy", - "summary": "Player Skip By", - "description": "Skip forward or backward by a number of items.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "offset", - "in": "query", - "description": "Number of items to skip (positive for forward, negative for backward)", - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/setParameters", {}) - paths["/player/playback/setParameters"] = { - "post": { - "operationId": "playerSetParameters", - "summary": "Player Set Parameters", - "description": "Set shuffle, repeat, and volume parameters.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "shuffle", - "in": "query", - "schema": {"type": "integer", "enum": [0, 1]}, - }, - { - "name": "repeat", - "in": "query", - "schema": {"type": "integer", "enum": [0, 1, 2]}, - }, - { - "name": "volume", - "in": "query", - "schema": {"type": "integer", "minimum": 0, "maximum": 100}, - }, - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/setStreams", {}) - paths["/player/playback/setStreams"] = { - "post": { - "operationId": "playerSetStreams", - "summary": "Player Set Streams", - "description": "Set active audio, subtitle, and video streams.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "audioStreamID", - "in": "query", - "schema": {"type": "integer"}, - }, - { - "name": "subtitleStreamID", - "in": "query", - "schema": {"type": "integer"}, - }, - { - "name": "videoStreamID", - "in": "query", - "schema": {"type": "integer"}, - }, - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/subtitleStream", {}) - paths["/player/playback/subtitleStream"] = { - "post": { - "operationId": "playerSubtitleStream", - "summary": "Player Subtitle Stream", - "description": "Change the active subtitle stream.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "streamID", - "in": "query", - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/audioStream", {}) - paths["/player/playback/audioStream"] = { - "post": { - "operationId": "playerAudioStream", - "summary": "Player Audio Stream", - "description": "Change the active audio stream.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "streamID", - "in": "query", - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/videoStream", {}) - paths["/player/playback/videoStream"] = { - "post": { - "operationId": "playerVideoStream", - "summary": "Player Video Stream", - "description": "Change the active video stream.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "streamID", - "in": "query", - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/volume", {}) - paths["/player/playback/volume"] = { - "post": { - "operationId": "playerVolume", - "summary": "Player Volume", - "description": "Set the client volume.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "level", - "in": "query", - "schema": {"type": "integer", "minimum": 0, "maximum": 100}, - } - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/setTextStream", {}) - paths["/player/playback/setTextStream"] = { - "post": { - "operationId": "playerSetTextStream", - "summary": "Player Set Text Stream", - "description": "Set the active text stream.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "streamID", - "in": "query", - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/setRating", {}) - paths["/player/playback/setRating"] = { - "post": { - "operationId": "playerSetRating", - "summary": "Player Set Rating", - "description": "Rate the currently playing item.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "rating", - "in": "query", - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/setViewOffset", {}) - paths["/player/playback/setViewOffset"] = { - "post": { - "operationId": "playerSetViewOffset", - "summary": "Player Set View Offset", - "description": "Set the resume offset for the current item.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "offset", - "in": "query", - "schema": {"type": "integer"}, - } - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/setState", {}) - paths["/player/playback/setState"] = { - "post": { - "operationId": "playerSetState", - "summary": "Player Set State", - "description": "Set the playback state directly.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "state", - "in": "query", - "schema": {"type": "string", "enum": ["playing", "paused", "stopped"]}, - } - ], - "responses": {"200": ok}, - } - } - - paths.setdefault("/player/playback/playMedia", {}) - paths["/player/playback/playMedia"] = { - "post": { - "operationId": "playerPlayMedia", - "summary": "Player Play Media", - "description": "Play a specific media item on the client.", - "tags": ["Playback"], - "parameters": deepcopy(player_params) - + [ - { - "name": "key", - "in": "query", - "description": "The key of the media item to play", - "schema": {"type": "string"}, - }, - { - "name": "offset", - "in": "query", - "schema": {"type": "integer"}, - }, - { - "name": "machineIdentifier", - "in": "query", - "schema": {"type": "string"}, - }, - ], - "responses": {"200": ok}, - } - } - - # Player timeline poll - paths.setdefault("/player/timeline/poll", {}) - paths["/player/timeline/poll"] = { - "get": { - "operationId": "playerPollTimeline", - "summary": "Player Poll Timeline", - "description": "Poll the client for current playback timeline.", - "tags": ["Playback"], - "parameters": deepcopy(player_params), - "responses": {"200": ok}, - } - } - - # Client resources - paths.setdefault("/player/resources", {}) - paths["/player/resources"] = { - "get": { - "operationId": "getClientResources", - "summary": "Get Client Resources", - "description": "Get client capabilities and device info.", - "tags": ["Playback"], - "parameters": deepcopy(player_params), - "responses": {"200": ok}, - } - } - - print(f"Added {len([p for p in paths if p.startswith('/player/')])} client control endpoints") - - -def add_query_params(spec): - """Add critical missing query parameters to existing endpoints.""" - - # Common include/exclude params - include_markers = { - "name": "includeMarkers", - "in": "query", - "description": "Include intro/credits markers in the response", - "schema": {"type": "boolean"}, - } - include_guids = { - "name": "includeGuids", - "in": "query", - "description": "Include external GUIDs (e.g. TMDB, TVDB) in the response", - "schema": {"type": "boolean"}, - } - include_chapters = { - "name": "includeChapters", - "in": "query", - "description": "Include chapter data in the response", - "schema": {"type": "boolean"}, - } - include_external_media = { - "name": "includeExternalMedia", - "in": "query", - "description": "Include external/online media in the response", - "schema": {"type": "boolean"}, - } - include_extras = { - "name": "includeExtras", - "in": "query", - "description": "Include trailers, behind-the-scenes, and other extras", - "schema": {"type": "boolean"}, - } - include_related = { - "name": "includeRelated", - "in": "query", - "description": "Include related items in the response", - "schema": {"type": "boolean"}, - } - include_on_deck = { - "name": "includeOnDeck", - "in": "query", - "description": "Include On Deck status in the response", - "schema": {"type": "boolean"}, - } - include_popular_leaves = { - "name": "includePopularLeaves", - "in": "query", - "description": "Include popular episodes in the response", - "schema": {"type": "boolean"}, - } - include_reviews = { - "name": "includeReviews", - "in": "query", - "description": "Include user reviews in the response", - "schema": {"type": "boolean"}, - } - include_stations = { - "name": "includeStations", - "in": "query", - "description": "Include radio station data in the response", - "schema": {"type": "boolean"}, - } - check_files = { - "name": "checkFiles", - "in": "query", - "description": "Verify file existence on disk", - "schema": {"type": "boolean"}, - } - exclude_elements = { - "name": "excludeElements", - "in": "query", - "description": "Comma-separated list of elements to exclude from the response", - "schema": {"type": "string"}, - } - exclude_fields = { - "name": "excludeFields", - "in": "query", - "description": "Comma-separated list of fields to exclude from the response", - "schema": {"type": "string"}, - } - include_collections = { - "name": "includeCollections", - "in": "query", - "description": "Include collection results in search hubs", - "schema": {"type": "boolean"}, - } - - # Add to /library/metadata/{ids} GET - meta_get = spec["paths"]["/library/metadata/{ids}"]["get"] - existing_params = meta_get.get("parameters", []) - new_params = [ - include_markers, include_guids, include_chapters, include_external_media, - include_extras, include_related, include_on_deck, include_popular_leaves, - include_reviews, include_stations, check_files, exclude_elements, exclude_fields, - ] - for p in new_params: - if not any(ep.get("name") == p["name"] for ep in existing_params): - existing_params.append(p) - print("Added query params to /library/metadata/{ids}") - - # Add to /library/sections/{sectionId}/all GET - section_all = spec["paths"]["/library/sections/{sectionId}/all"]["get"] - existing_params = section_all.get("parameters", []) - new_params = [ - include_guids, include_external_media, include_extras, include_related, - include_on_deck, include_popular_leaves, include_reviews, include_stations, - check_files, exclude_elements, exclude_fields, - ] - for p in new_params: - if not any(ep.get("name") == p["name"] for ep in existing_params): - existing_params.append(p) - print("Added query params to /library/sections/{sectionId}/all") - - # Add to /hubs/search GET - hubs_search = spec["paths"]["/hubs/search"]["get"] - existing_params = hubs_search.get("parameters", []) - if not any(ep.get("name") == "includeCollections" for ep in existing_params): - existing_params.append(include_collections) - print("Added query params to /hubs/search") - - # Add to /hubs/search/voice GET - hubs_voice = spec["paths"]["/hubs/search/voice"]["get"] - existing_params = hubs_voice.get("parameters", []) - if not any(ep.get("name") == "includeCollections" for ep in existing_params): - existing_params.append(include_collections) - print("Added query params to /hubs/search/voice") - - # Add to /status/sessions/history/all GET - history = spec["paths"]["/status/sessions/history/all"]["get"] - existing_params = history.get("parameters", []) - new_params = [exclude_elements, exclude_fields] - for p in new_params: - if not any(ep.get("name") == p["name"] for ep in existing_params): - existing_params.append(p) - print("Added query params to /status/sessions/history/all") - - -def main(): - spec = load_spec() - add_client_control_endpoints(spec) - add_query_params(spec) - save_spec(spec) - print(f"Saved {SPEC_PATH}") - - -if __name__ == "__main__": - main() From 3aa682b5406f681449986e4485dbc27f6cd0914a Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 19:29:09 -0500 Subject: [PATCH 17/26] Update discovery workflow to use Arbiter native commands - Replace deleted Python scripts with arbiter CLI subcommands - Build arbiter from source in CI - Start PMS and proxy separately in workflow steps - Use generate-traffic --output and diff --output for artifact collection --- .github/workflows/discovery.yml | 79 ++++++++++++++++++++++++++++----- 1 file changed, 69 insertions(+), 10 deletions(-) diff --git a/.github/workflows/discovery.yml b/.github/workflows/discovery.yml index c3cfe2ce7..ca5dde135 100644 --- a/.github/workflows/discovery.yml +++ b/.github/workflows/discovery.yml @@ -17,7 +17,7 @@ jobs: discover: runs-on: ubuntu-latest steps: - - name: Checkout + - name: Checkout plex-api-spec uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false @@ -26,26 +26,85 @@ jobs: run: | git clone https://github.com/LukasParke/arbiter.git ../arbiter - - name: Set up Python - uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 + - name: Set up Node.js + uses: actions/setup-node@v4 with: - python-version: '3.12' + node-version: '24' - - name: Install dependencies + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: latest + + - name: Build Arbiter run: | - python -m pip install --upgrade pip - pip install pyyaml + cd ../arbiter + pnpm install --frozen-lockfile + pnpm run build - name: Set up Docker Compose uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2320ee5c88db75466b73 # v3.10.0 - - name: Run discovery pipeline + - name: Start Plex Media Server run: | - cd scripts/discovery - python run_discovery.py + docker compose up -d pms + # Wait for PMS to be healthy + for i in {1..60}; do + if curl -sf http://localhost:32400/identity > /dev/null 2>&1; then + echo "PMS is ready" + break + fi + echo "Waiting for PMS... ($i/60)" + sleep 5 + done env: PLEX_CLAIM_TOKEN: ${{ secrets.PLEX_CLAIM_TOKEN }} + - name: Start Arbiter Proxy + run: | + cd ../arbiter + node dist/src/cli.js start \ + --target http://localhost:32400 \ + --port 8080 \ + --docs-port 9000 \ + --db-path /tmp/arbiter.db \ + --verbose & + PROXY_PID=$! + echo "PROXY_PID=$PROXY_PID" >> $GITHUB_ENV + # Wait for proxy + for i in {1..30}; do + if curl -sf http://localhost:8080/identity > /dev/null 2>&1; then + echo "Proxy is ready" + break + fi + echo "Waiting for proxy... ($i/30)" + sleep 1 + done + + - name: Generate Traffic + run: | + cd ../arbiter + node dist/src/cli.js generate-traffic \ + --target http://localhost:8080 \ + --output /tmp/traffic.jsonl + + - name: Stop Arbiter Proxy + run: | + kill $PROXY_PID || true + sleep 2 + + - name: Run Diff + run: | + cd ../arbiter + node dist/src/cli.js diff \ + --spec ./plex-api-spec/plex-api-spec.yaml \ + --traffic /tmp/traffic.jsonl \ + --output /tmp/diff_report.json + + - name: Stop Plex Media Server + if: always() + run: docker compose down + - name: Upload diff report if: always() uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 From 00231f6b19e1ec38db84b5b5f7d9fe2564d6eb24 Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 20:06:09 -0500 Subject: [PATCH 18/26] Fix CI: speakeasy and vacuum installation - Replace sdk-generation-action (requires API key) with direct speakeasy CLI install via official install script - Replace unreliable curl download with gh release download for vacuum, using authenticated GitHub API --- .github/workflows/lint.yml | 12 ++++++++---- .gitignore | 1 + plex-api-spec.yaml | 23 +++++++++-------------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 7cf48fff7..c51305463 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -27,9 +27,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: speakeasy-api/sdk-generation-action@v15 - with: - speakeasy_version: latest + - name: Install Speakeasy + run: | + curl -fsSL https://raw.githubusercontent.com/speakeasy-api/speakeasy/main/install.sh | sh + speakeasy --version - run: speakeasy lint openapi -s plex-api-spec.yaml vacuum: @@ -41,9 +42,12 @@ jobs: - name: Install Vacuum run: | - curl -fsSL https://github.com/daveshanley/vacuum/releases/latest/download/vacuum_linux_amd64.tar.gz | tar -xz + gh release download --repo daveshanley/vacuum --pattern '*linux_x86_64.tar.gz' + tar -xzf vacuum_*_linux_x86_64.tar.gz sudo mv vacuum /usr/local/bin/ vacuum version + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Lint with Vacuum run: | diff --git a/.gitignore b/.gitignore index a14702c40..b77366ad7 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json # Finder (MacOS) folder config .DS_Store +report-prefix*.json diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index be9f7171d..e4879ddde 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -4214,7 +4214,6 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" - x-speakeasy-retries-name: plextv-auth-retry /pins.xml: post: operationId: createLegacyPin @@ -7062,7 +7061,6 @@ paths: application/json: schema: $ref: "#/components/schemas/UnauthorizedErrorResponse" - x-speakeasy-retries-name: plextv-auth-retry /users/signout: delete: operationId: signOut @@ -7089,7 +7087,6 @@ paths: description: OK '400': $ref: "#/components/responses/400" - x-speakeasy-retries-name: plextv-auth-retry /webhooks: get: operationId: getWebhooks @@ -14441,7 +14438,6 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" - x-speakeasy-retries-name: plextv-auth-retry /playlists/{playlistId}: delete: operationId: deletePlaylist @@ -22578,13 +22574,12 @@ components: type: boolean example: true x-speakeasy-retries: - - name: plextv-auth-retry - backoff: - exponent: 2 - initialInterval: 1000 - maxElapsedTime: 300000 - maxInterval: 30000 - type: exponential - statusCodes: - - 429 - strategy: backoff + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff From 809923d7d434c349d7b4396fc0444979e50e81df Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 20:54:37 -0500 Subject: [PATCH 19/26] Add agent swarm review findings --- AGENT_SWARM_REVIEW.md | 197 ++++++++++++++++++++++++++++++++++++++++ DOCUMENTATION_REVIEW.md | 62 +++++++++++++ 2 files changed, 259 insertions(+) create mode 100644 AGENT_SWARM_REVIEW.md create mode 100644 DOCUMENTATION_REVIEW.md diff --git a/AGENT_SWARM_REVIEW.md b/AGENT_SWARM_REVIEW.md new file mode 100644 index 000000000..8e71e2fb7 --- /dev/null +++ b/AGENT_SWARM_REVIEW.md @@ -0,0 +1,197 @@ +# Agent Swarm Review — Plex API Specification + +**PR:** [#117](https://github.com/LukasParke/plex-api-spec/pull/117) +**Branch:** `feature/arbiter-discovery-pipeline` +**Reviewers:** 4 specialized subagents (OpenAPI Purist, SDK DevEx Critic, API Design Purist, Documentation QA Nitpicker) + +--- + +## Executive Summary + +The spec is structurally sound and CI-clean, but carries significant debt from documenting a real-world, organically-grown API. The three highest-impact issues are: + +1. **~237 operations lack error responses** — SDKs get untyped errors +2. **HTTP method misuse** — GETs mutate state, RPC-style paths abound +3. **5 undefined tags + tag fragmentation** — SDKs generate broken service classes + +--- + +## 🔴 Critical Issues (Fix Before Merge) + +### 1. ~237 Operations Missing Error Responses +- **Reviewer:** OpenAPI Purist, SDK DevEx Critic +- **Problem:** ~60% of operations only define `200` success responses. No `4xx`/`5xx` coverage means generated SDKs throw generic, untyped errors. +- **Fix:** Add `$ref` to existing `components/responses/400`, `401`, `403`, `404` on every authenticated endpoint. At minimum `400` + `401`. + +### 2. GET with Side Effects +- **Reviewer:** API Design Purist +- **Problem:** `GET /:/progress` updates watch progress. `GET /library/sections/{sectionId}/emptyTrash` permanently deletes items. Browsers/crawlers may prefetch these. +- **Fix:** Mark as deprecated in spec; document that clients MUST use `POST` or `DELETE`. + +### 3. Malformed Path Parameter +- **Reviewer:** SDK DevEx Critic +- **Problem:** `DELETE /library/streams/{streamId}.{ext}` declares parameter as `streamId}.{ext` — broken path parsing. +- **Fix:** Correct parameter declaration to `{streamId}` and handle `.ext` as part of path or separate param. + +### 4. 3 Kebab-Case `operationId`s +- **Reviewer:** SDK DevEx Critic +- **Problem:** `get-server-resources`, `get-users`, `post-users-sign-in-data` produce invalid method names in most languages. +- **Fix:** Rename to `getServerResources`, `getUsers`, `postUsersSignInData`. + +### 5. 5 `operationId`s Contradict Their HTTP Method +- **Reviewer:** SDK DevEx Critic +- **Problem:** `GET /library/metadata/{ids}/subtitles` → `addSubtitles`; `PUT /library/collections/.../items/...` → `deleteCollectionItem`. +- **Fix:** Audit and rename to semantically correct IDs. + +### 6. Response Component Missing Root `type` +- **Reviewer:** OpenAPI Purist +- **Problem:** `components.responses.slash-get-responses-200` declares `properties` without `type: object`. +- **Fix:** Add `type: object` at line ~18657. + +### 7. Schema Properties Missing `type` +- **Reviewer:** OpenAPI Purist +- **Problem:** `MediaSubscription` properties (`Directory`, `Playlist`, `Video`) have `additionalProperties: true` but no `type: object`. +- **Fix:** Add `type: object` to each. + +### 8. 5 Undefined Tags +- **Reviewer:** OpenAPI Purist, SDK DevEx Critic +- **Problem:** `Authentication`, `Playback`, `Playlists`, `Plex`, `Users` are used in operations but missing from the global `tags` array. +- **Fix:** Add tag definitions with descriptions to root `tags`. + +### 9. Duplicate Global Parameters +- **Reviewer:** OpenAPI Purist +- **Problem:** 16 transcode/timeline operations redeclare `X-Plex-*` headers already injected by `x-speakeasy-globals`. +- **Fix:** Remove duplicate parameter declarations. + +--- + +## 🟠 High-Priority Issues (Fix Soon) + +### 10. RPC-Style Action Paths +- **Reviewer:** API Design Purist +- **Problem:** `/actions/addToWatchlist`, `/player/playback/mute`, `/library/sections/{id}/emptyTrash`, `/status/sessions/terminate` embed verbs in paths. +- **Note:** Inherited from Plex's architecture. Document as legacy; consider `deprecated: true` where alternatives exist. + +### 11. Resource IDs in Query Parameters +- **Reviewer:** API Design Purist +- **Problem:** `DELETE /playlists?ratingKey={ratingKey}`, `POST /status/sessions/terminate?sessionId={sessionId}` pass identifiers as query params. +- **Fix:** Use path params where possible; document current behavior as legacy. + +### 12. 5 Unused Schemas +- **Reviewer:** OpenAPI Purist +- **Problem:** `Collection`, `Feature`, `PlayQueueResponse`, `ProviderFeature`, `UpdaterStatus` defined but never `$ref`'d. +- **Fix:** Wire into operations or delete. + +### 13. 146 Error Responses Return `text/html` with No Schema +- **Reviewer:** SDK DevEx Critic +- **Problem:** `400`, `403`, `404` responses are `text/html: {}` with no schema. +- **Fix:** Define a reusable `Error` schema and apply it to all error responses. + +### 14. Inconsistent Pagination +- **Reviewer:** API Design Purist +- **Problem:** Three mechanisms: `count`, `limit`, `X-Plex-Container-Start`/`X-Plex-Container-Size`. +- **Fix:** Standardize on one pair and reuse component parameters. + +### 15. `accepts` Header Defaults to XML +- **Reviewer:** SDK DevEx Critic +- **Problem:** PMS endpoints return XML by default. JSON requested via custom `accepts` param. +- **Fix:** Document clearly; consider overriding default per-operation where known. + +### 16. 20 Unstructured `200` Responses +- **Reviewer:** SDK DevEx Critic +- **Problem:** Bare `type: object` or `type: string` — zero autocomplete in SDKs. +- **Fix:** Add proper schemas, even if partial. + +### 17. Unnecessary Single-Item `allOf` +- **Reviewer:** OpenAPI Purist +- **Problem:** 7 instances of `allOf: [{ $ref: ... }]` — redundant indirection. +- **Fix:** Replace with direct `$ref`. + +### 18. Duplicate Inline Request Body +- **Reviewer:** OpenAPI Purist, SDK DevEx Critic +- **Problem:** `PUT /pins/link` defines same `{authToken, pin}` body twice (JSON + form-urlencoded). +- **Fix:** Extract to `components/schemas/LinkPinRequest`. + +### 19. 18 Duplicate Enum Sets +- **Reviewer:** OpenAPI Purist +- **Problem:** `(0, 1)` repeated 14 times, `('lan', 'wan', 'cellular')` 4 times, etc. +- **Fix:** Extract to reusable schemas. + +### 20. Invalid Examples +- **Reviewer:** OpenAPI Purist +- **Problem:** 21 violations — `example: 135` on `type: string`, pattern mismatches, case mismatches. +- **Fix:** Correct to match schema constraints. + +--- + +## 🟡 Medium-Priority Issues + +### 21. Path Parameter Naming Inconsistency +- **Reviewer:** API Design Purist +- **Problem:** `{id}`, `{userId}`, `{uuid}` used for same concept across endpoints. +- **Fix:** Standardize per resource type. + +### 22. Tag Fragmentation +- **Reviewer:** API Design Purist, SDK DevEx Critic +- **Problem:** `Playlist` vs `Playlists` vs `Library Playlists`; `Collections` vs `Library Collections`. +- **Fix:** Consolidate to singular consistent tags. + +### 23. `type` Used as Query Parameter (15+ times) +- **Reviewer:** SDK DevEx Critic +- **Problem:** Reserved word in most languages. +- **Fix:** Add `x-speakeasy-name-override` or rename. + +### 24. No 201 Created for Resource Creation +- **Reviewer:** API Design Purist +- **Problem:** Only 1 `201` in entire spec. Creation endpoints return `200`. +- **Fix:** Return `201 Created` with `Location` header. + +### 25. Weak Auth Scoping +- **Reviewer:** API Design Purist +- **Problem:** Only `admin` and `shared user` scopes. Many admin-only endpoints inherit broad `[shared user, admin]`. +- **Fix:** Audit every endpoint for minimum required scope. + +### 26. Missing `required` Arrays +- **Reviewer:** OpenAPI Purist +- **Problem:** 47 response schemas + 4 request bodies lack `required`. +- **Fix:** Audit and add. + +### 27. 63 Schemas Lack Descriptions +- **Reviewer:** OpenAPI Purist +- **Problem:** `Activity`, `BoolInt`, `ButlerTask`, `Channel`, etc. +- **Fix:** Add descriptions for generated SDK docs. + +### 28. 9 Operations Share Identical Summaries +- **Reviewer:** SDK DevEx Critic +- **Problem:** `GET` and `POST` `/library/optimize` both called `"Optimize Library"`. +- **Fix:** Distinguish by HTTP method in summary. + +--- + +## ✅ Positive Findings + +- **All 154 `$ref`s resolve** — no broken references +- **All 404 `operationId`s are unique** +- **No trailing slash inconsistency** +- **No `type: array` without `items`** +- **No `nullable: true` misuse** — correctly uses OAS 3.1 `type: ["string", "null"]` +- **Security schemes fully utilized** +- **All path parameters declared** +- **CI passes** — prettier, speakeasy, vacuum all green + +--- + +## Recommended Fix Order + +1. **P0:** Add error responses to all operations +2. **P0:** Fix 3 kebab-case `operationId`s +3. **P0:** Fix malformed path parameter +4. **P0:** Add 5 missing global tag definitions +5. **P1:** Delete/wire up 5 unused schemas +6. **P1:** Fix `type: object` omissions +7. **P1:** Remove duplicate parameters from transcode ops +8. **P2:** Flatten single-item `allOf` wrappers +9. **P2:** Extract duplicated enums to reusable schemas +10. **P2:** Fix 21 invalid examples +11. **P3:** Add `required` arrays +12. **P3:** Add descriptions to 63 schemas diff --git a/DOCUMENTATION_REVIEW.md b/DOCUMENTATION_REVIEW.md new file mode 100644 index 000000000..90e75c5d9 --- /dev/null +++ b/DOCUMENTATION_REVIEW.md @@ -0,0 +1,62 @@ +# Documentation-Only Review — Plex API Specification + +**PR:** [#117](https://github.com/LukasParke/plex-api-spec/pull/117) +**Scope:** Issues we can fix in the spec itself (excludes Plex's actual API behavior) + +--- + +## Critical (Fix Before Merge) + +| # | Issue | Location | Suggested Fix | +|---|-------|----------|---------------| +| 1 | **~237 operations missing error responses** | Global (~60% of ops) | Add `$ref` to `components/responses/400`, `401`, `403`, `404` on every operation. At minimum `400` + `401` for authenticated endpoints. | +| 2 | **3 kebab-case `operationId`s** | `get-server-resources`, `get-users`, `post-users-sign-in-data` | Rename to `getServerResources`, `getUsers`, `postUsersSignInData`. | +| 3 | **5 `operationId`s contradict their HTTP method** | e.g., `GET /library/metadata/{ids}/subtitles` -> `addSubtitles` | Audit and rename to semantically correct IDs (e.g., `getSubtitles`). | +| 4 | **Malformed path parameter declaration** | `DELETE /library/streams/{streamId}.{ext}` declares `streamId}.{ext` | Correct to `{streamId}` and handle `.ext` appropriately. | +| 5 | **Response component missing `type: object`** | `components.responses.slash-get-responses-200` (~line 18657) | Add `type: object` to the schema. | +| 6 | **Schema properties missing `type`** | `MediaSubscription` properties (`Directory`, `Playlist`, `Video`) | Add `type: object` to each property. | +| 7 | **5 undefined tags in global `tags` array** | `Authentication`, `Playback`, `Playlists`, `Plex`, `Users` | Add tag definitions with descriptions to root `tags`. | +| 8 | **Duplicate global parameter declarations** | 16 transcode/timeline operations | Remove duplicate `X-Plex-*` param declarations already covered by `x-speakeasy-globals`. | + +## High Priority + +| # | Issue | Location | Suggested Fix | +|---|-------|----------|---------------| +| 9 | **146 error responses return `text/html` with no schema** | Global | Define a reusable `Error` schema and apply it to all `4xx`/`5xx` responses. | +| 10 | **5 unused schemas** | `Collection`, `Feature`, `PlayQueueResponse`, `ProviderFeature`, `UpdaterStatus` | Either wire them into operations via `$ref` or delete them. | +| 11 | **20 unstructured `200` responses** | e.g., `POST /auth/jwk`, `GET /geoip` | Add proper schemas (even partial ones) instead of bare `type: object` or `type: string`. | +| 12 | **Duplicate inline request body** | `PUT /pins/link` (JSON + form-urlencoded) | Extract to `components/schemas/LinkPinRequest` and `$ref` from both media types. | +| 13 | **Unnecessary single-item `allOf`** | 7 instances (e.g., `LibrarySection` date fields, `/activities`, `/updater/status`) | Replace `allOf: [{ $ref: ... }]` with direct `$ref`. | +| 14 | **18 duplicate enum sets** | `(0,1)` x14, `('lan','wan','cellular')` x4, etc. | Extract to reusable schemas (e.g., `BoolInt`, `NetworkType`, `StreamProtocol`). | +| 15 | **21 invalid examples** | e.g., `example: 135` on `type: string`, pattern mismatches | Correct example values to match schema constraints. | +| 16 | **`allOf` subschemas missing `type`** | `GET /resources` params `includeHttps`, `includeRelay`, `includeIPv6` | Add `type: integer` to inline subschemas. | +| 17 | **`PlexDateTime` unusual type syntax** | `components.schemas.PlexDateTime` | Change `type: [integer]` to `type: integer`. | +| 18 | **Tag fragmentation** | `Playlist` vs `Playlists` vs `Library Playlists`; `Collections` vs `Library Collections` | Consolidate to a single tag per domain. | +| 19 | **Path parameter naming inconsistency** | `{id}` vs `{userId}` vs `{uuid}` for same concept | Standardize per resource type (e.g., always `{userId}`). | +| 20 | **Security override inconsistency** | Some admin-only endpoints declare `security: [token: [admin]]`, others inherit global | Audit every endpoint and explicitly declare minimum required scope. | + +## Medium Priority + +| # | Issue | Location | Suggested Fix | +|---|-------|----------|---------------| +| 21 | **9 operations share identical summaries** | e.g., `GET` and `POST` `/library/optimize` both `"Optimize Library"` | Distinguish by HTTP method: `"Get Library Optimization Status"` / `"Optimize Library"`. | +| 22 | **`ids` path parameter has no description** | 28 paths using `{ids}` | Add description explaining it accepts comma-separated IDs. | +| 23 | **Vague one-word summaries** | `"Ping"`, `"Get Home"`, `"Upload"` | Expand to descriptive sentences. | +| 24 | **63 schemas lack descriptions** | `Activity`, `BoolInt`, `ButlerTask`, `Channel`, etc. | Add `description` to each schema for generated SDK docs. | +| 25 | **Missing `required` arrays** | 47 response schemas + 4 request bodies | Audit and add `required` for fields the server always returns/expects. | +| 26 | **`type` query parameter is a reserved word** | 15+ operations | Add `x-speakeasy-name-override` to rename in generated SDKs. | +| 27 | **`composite` parameter lacks description** | Global component parameter | Add a description explaining its purpose. | +| 28 | **Response `401` uses inline schema** | `components.responses.401` | Extract to `components.schemas.UnauthorizedErrorResponse` for consistency with `BadRequestErrorResponse`. | +| 29 | **Missing `x-speakeasy-retries` on rate-limited endpoints** | plex.tv auth endpoints (`/pins`, `/auth/token`, etc.) | Add retry config since docs warn about rate limits. | +| 30 | **Missing `x-speakeasy-pagination` metadata** | 2 operations flagged by Speakeasy | Add pagination extension where pagination is supported. | +| 31 | **786 description duplications** | Many responses use identical `"OK"` descriptions | Use `$ref` to shared response components or vary descriptions. | +| 32 | **556+ missing examples** | Pervasive across parameters and responses | Add `example` to every parameter and response media type. | + +## Positive Findings + +- All 154 `$ref`s resolve correctly +- All 404 `operationId`s are unique +- No `nullable: true` misuse (proper OAS 3.1 style) +- No `type: array` without `items` +- No trailing slash inconsistency +- CI passes cleanly (prettier, speakeasy, vacuum) From 0dd25a78aca62c4154cfaf0b71668eb7807dcf3a Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 22:05:32 -0500 Subject: [PATCH 20/26] Fix all documented spec gaps from agent swarm review - Fix 3 kebab-case operationIds (get-server-resources -> getServerResources, etc.) - Fix contradictory operationIds (addSubtitles -> getSubtitles, deleteCollectionItem -> updateCollectionItem, getTransientToken -> createTransientToken) - Add type: object to slash-get-responses-200 and MediaSubscription properties - Add 5 missing global tags (Authentication, Playback, Playlists, Plex, Users) - Fix PlexDateTime type: [integer] -> type: integer - Flatten 6 single-item allOf wrappers - Create reusable Error schema and wire to 401 response - Add 400+401 error responses to 237 operations - Wire up 5 unused schemas (Collection, Feature, PlayQueueResponse, ProviderFeature, UpdaterStatus) - Add x-speakeasy-name-override to 16 type parameters - Add x-speakeasy-retries to 6 rate-limited plex.tv auth endpoints - Fix allOf subschemas missing type in GET /resources params - Distinguish GET/POST summaries on 4 endpoints - Add description to ids path parameters - Add description to composite parameter - Fix invalid example values - Expand vague one-word summaries (Ping, Get Home, Upload) --- plex-api-spec.yaml | 1239 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 1159 insertions(+), 80 deletions(-) diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index e4879ddde..be5a12411 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -95,6 +95,8 @@ tags: Activities are associated with HTTP replies via a special `X-Plex-Activity` header which contains the UUID of the activity. Activities are optional cancellable. If cancellable, they may be cancelled via the `DELETE` endpoint. + - name: Authentication + description: Plex Authentication operations - name: Butler description: The butler is responsible for running periodic tasks. Some tasks run daily, others every few days, and some weekly. These includes database maintenance, metadata updating, thumbnail generation, media analysis, and other tasks. - name: Collections @@ -176,8 +178,14 @@ tags: You can visualize the play queue as a sliding window in the complete list of media queued for playback. This model is important when scaling to larger play queues (e.g. shuffling 40,000 audio tracks). The client only needs visibility into small areas of the queue at any given time, and the server can optimize access in this fashion. All created play queues will have an empty "Up Next" area - unless the item is an album and no `key` is provided. In this case the "Up Next" area will be populated by the contents of the album. This is to allow queueing of multiple albums - since the 'Add to Up Next' will insert after all the tracks. This means that If you're creating a PQ from an album, you can only shuffle it if you set `key`. This is due to the above implicit queueing of albums when no `key` is provided as well as the current limitation that you cannot shuffle a PQ with an "Up Next" area. The play queue window advances as the server receives timeline requests. The client needs to retrieve the play queue as the “now playing” item changes. There is no play queue API to update the playing item. + - name: Playback + description: Plex Playback operations - name: Playlist description: Media playlists that can be created and played back + - name: Playlists + description: Plex Playlists operations + - name: Plex + description: Plex Plex operations - name: Preferences description: API Operations against the Preferences - name: Provider @@ -202,6 +210,8 @@ tags: description: |- This describes the API for searching and applying updates to the Plex Media Server. Updates to the status can be observed via the Event API. + - name: Users + description: Plex Users operations x-tagGroups: - name: Server tags: @@ -262,6 +272,10 @@ paths: type: array items: $ref: "#/components/schemas/Directory" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /:/eventsource/notifications: get: operationId: getNotifications @@ -302,6 +316,10 @@ paths: schema: type: string format: binary + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /:/prefs: get: operationId: getAllPreferences @@ -316,6 +334,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSettings" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" put: operationId: setPreferences summary: Set preferences @@ -426,6 +448,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /:/rate: put: operationId: setRating @@ -795,6 +821,10 @@ paths: schema: type: string format: binary + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /:/websockets/notifications: get: operationId: getWebsocketNotifications @@ -823,6 +853,10 @@ paths: application/octet-stream: schema: $ref: "#/components/schemas/NotificationContainer" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /accounts: get: operationId: getSystemAccounts @@ -848,6 +882,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /actions/addToWatchlist: post: operationId: addToWatchlist @@ -912,6 +950,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /actions/removeFromWatchlist: post: operationId: removeFromWatchlist @@ -961,13 +1003,16 @@ paths: type: object properties: MediaContainer: - allOf: - - type: object - properties: - Activity: - type: array - items: - $ref: "#/components/schemas/Activity" + type: object + properties: + Activity: + type: array + items: + $ref: "#/components/schemas/Activity" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /api/resources: get: operationId: getLegacyResources @@ -984,6 +1029,10 @@ paths: application/xml: schema: type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /api/users/: get: operationId: getLegacyUsers @@ -1000,6 +1049,10 @@ paths: application/xml: schema: type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /api/v2/user/webhooks: get: operationId: getUserWebhooks @@ -1016,6 +1069,10 @@ paths: application/json: schema: $ref: "#/components/schemas/WebhookPayload" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: addUserWebhook summary: Add User Webhook @@ -1144,6 +1201,16 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" + x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff /auth/token: post: operationId: exchangeJWTToken @@ -1181,6 +1248,16 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" + x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff /butler: delete: operationId: stopTasks @@ -1194,6 +1271,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" get: operationId: getTasks summary: Get all Butler tasks @@ -1218,6 +1299,10 @@ paths: type: array items: $ref: "#/components/schemas/ButlerTask" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: startTasks summary: Start all Butler tasks @@ -1236,6 +1321,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /claim/token.json: get: operationId: getClaimToken @@ -1264,6 +1353,16 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" + x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff /clients: get: operationId: getClients @@ -1297,6 +1396,10 @@ paths: type: array items: $ref: "#/components/schemas/PlexDevice" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /cloud_server: get: operationId: getCloudServer @@ -1354,6 +1457,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /diagnostics: get: operationId: getDiagnostics @@ -1379,6 +1486,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /diagnostics/databases: get: operationId: downloadDatabaseDiagnostics @@ -1404,6 +1515,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /diagnostics/logs: get: operationId: downloadLogBundle @@ -1429,6 +1544,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /downloadQueue: post: operationId: createDownloadQueue @@ -1456,6 +1575,10 @@ paths: type: array items: $ref: "#/components/schemas/DownloadQueue" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /features: get: operationId: getFeatures @@ -1471,7 +1594,13 @@ paths: content: application/json: schema: - type: object + allOf: + - type: object + - $ref: "#/components/schemas/Feature" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /friends: get: operationId: getFriends @@ -1557,7 +1686,7 @@ paths: /home: get: operationId: getHome - summary: Get Home + summary: Get home hubs tags: - Users description: Get Plex Home user list. @@ -1566,10 +1695,14 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /home/users: get: operationId: getHomeUsers - summary: Get Home Users + summary: Get home hubs Users tags: - Users description: Get the list of Plex Home users. @@ -1665,6 +1798,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /hubs/continueWatching: get: operationId: getContinueWatching @@ -1697,6 +1834,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /hubs/continueWatching/items: get: operationId: getContinueWatchingItems @@ -1726,10 +1867,14 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /hubs/home/recentlyAdded: get: operationId: getHomeRecentlyAdded - summary: Get Home Recently Added + summary: Get home hubs Recently Added tags: - Hubs description: Get the recently added hub for the home screen. @@ -1755,6 +1900,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /hubs/items: get: operationId: getHubItems @@ -1834,6 +1983,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /hubs/search: get: operationId: searchHubs @@ -1997,6 +2150,10 @@ paths: version: description: The full version string of the PMS type: string + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /ip: get: operationId: getIP @@ -2046,6 +2203,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/all: get: operationId: getLibraryItems @@ -2082,6 +2243,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/caches: delete: operationId: deleteCaches @@ -2095,6 +2260,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/clean/bundles: put: operationId: cleanBundles @@ -2108,6 +2277,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/collections: post: operationId: createCollection @@ -2143,11 +2316,11 @@ paths: type: string responses: '200': - description: OK + description: The created collection content: application/json: schema: - $ref: "#/components/schemas/MediaContainerWithMetadata" + $ref: "#/components/schemas/Collection" '400': description: The uri is missing for a smart collection or the section could not be found content: @@ -2214,6 +2387,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/matches: get: operationId: getLibraryMatches @@ -2316,10 +2493,14 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/optimize: get: operationId: optimizeLibrary - summary: Optimize Library + summary: Get Optimize Library tags: - Library description: Optimize the database globally across all library sections. @@ -2341,6 +2522,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: optimizeLibraryPost summary: Optimize Library @@ -2365,6 +2550,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" put: operationId: optimizeDatabase summary: Optimize the Database @@ -2394,6 +2583,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/randomArtwork: get: operationId: getRandomArtwork @@ -2434,6 +2627,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithArtwork" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/recentlyAdded: get: operationId: getRecentlyAddedGlobal @@ -2463,6 +2660,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/search: get: operationId: searchDiscover @@ -2532,6 +2733,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/all: get: operationId: getSections @@ -2568,6 +2773,10 @@ paths: title1: description: Typically just "Plex Library" type: string + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: addSection summary: Add a library section @@ -2601,6 +2810,7 @@ paths: required: true schema: type: integer + x-speakeasy-name-override: mediaType - name: scanner description: The scanner this section should use in: query @@ -2672,6 +2882,10 @@ paths: responses: '200': $ref: "#/components/responses/LibrarySections" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/prefs: get: operationId: getSectionsPrefs @@ -2700,6 +2914,7 @@ paths: required: true schema: type: integer + x-speakeasy-name-override: mediaType - name: agent description: The metadata agent in use in: query @@ -2833,6 +3048,10 @@ paths: thumb: description: The URL to a thumbnail for this tag type: string + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/dvrs: get: operationId: listDVRs @@ -2867,6 +3086,10 @@ paths: application/json: schema: $ref: "#/components/schemas/DVRResponse" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: createDVR summary: Create a DVR @@ -2911,6 +3134,10 @@ paths: responses: '200': $ref: "#/components/responses/dvrRequestHandler_slash-get-responses-200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/epg/channelmap: get: operationId: computeChannelMap @@ -3065,6 +3292,10 @@ paths: type: array items: $ref: "#/components/schemas/EPGCountry" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/epg/guide: get: operationId: getEPGGuide @@ -3078,6 +3309,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/epg/languages: get: operationId: getAllLanguages @@ -3111,6 +3346,10 @@ paths: type: array items: $ref: "#/components/schemas/EPGLanguage" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/epg/lineup: get: operationId: getLineup @@ -3238,6 +3477,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/recordings: get: operationId: getDVRRecordings @@ -3263,6 +3506,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/sessions: get: operationId: getSessions @@ -3297,6 +3544,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /log: post: operationId: writeLog @@ -3371,6 +3622,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /log/networked: post: operationId: enablePapertrail @@ -3459,6 +3714,10 @@ paths: type: array items: $ref: "#/components/schemas/MediaGrabber" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /media/grabbers/devices: get: operationId: listDevices @@ -3485,6 +3744,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: addDevice summary: Add a device @@ -3553,6 +3816,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /media/providers: get: operationId: listProviders @@ -3566,15 +3833,21 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - type: object + allOf: + - type: object properties: - Provider: - type: array - items: - $ref: "#/components/schemas/Provider" + MediaContainer: + type: object + properties: + Provider: + type: array + items: + $ref: "#/components/schemas/Provider" + - $ref: "#/components/schemas/ProviderFeature" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: addProvider summary: Add a media provider @@ -3614,6 +3887,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /media/subscriptions: get: operationId: getAllSubscriptions @@ -3709,6 +3986,7 @@ paths: schema: type: integer example: 2 + x-speakeasy-name-override: mediaType - name: hints description: "Hints describing what we're looking for. Note: The hint `ratingKey` is required for downloading from a PMS remote." in: query @@ -3850,6 +4128,7 @@ paths: in: query schema: type: string + x-speakeasy-name-override: mediaType - name: targetLibrarySectionID description: Target library section ID. in: query @@ -3939,6 +4218,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /myplex/account: get: operationId: getMyPlexAccount @@ -3952,6 +4235,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /myplex/claim: post: operationId: claimServer @@ -3995,6 +4282,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /photo/:/transcode: get: operationId: transcodeImage @@ -4145,7 +4436,7 @@ paths: /ping: get: operationId: ping - summary: Ping + summary: Ping the server tags: - Authentication description: Health / latency check. No authentication required. @@ -4155,6 +4446,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /pins: post: operationId: createOAuthPin @@ -4214,6 +4509,16 @@ paths: $ref: "#/components/responses/400" '401': $ref: "#/components/responses/401" + x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff /pins.xml: post: operationId: createLegacyPin @@ -4230,6 +4535,20 @@ paths: application/xml: schema: type: object + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff /pins/link: put: operationId: linkOAuthPin @@ -4260,6 +4579,20 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" + x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff /player/playback/audioStream: post: operationId: playerAudioStream @@ -4291,6 +4624,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/mute: post: operationId: playerMute @@ -4318,6 +4655,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/pause: post: operationId: playerPause @@ -4345,6 +4686,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/play: post: operationId: playerPlay @@ -4372,6 +4717,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/playMedia: post: operationId: playerPlayMedia @@ -4412,6 +4761,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/refreshPlayQueue: post: operationId: playerRefreshplayqueue @@ -4439,6 +4792,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/seek: post: operationId: playerSeek @@ -4471,6 +4828,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/setParameters: post: operationId: playerSetParameters @@ -4519,6 +4880,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/setRating: post: operationId: playerSetRating @@ -4550,6 +4915,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/setState: post: operationId: playerSetState @@ -4585,6 +4954,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/setStreams: post: operationId: playerSetStreams @@ -4624,6 +4997,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/setTextStream: post: operationId: playerSetTextStream @@ -4655,6 +5032,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/setViewOffset: post: operationId: playerSetViewOffset @@ -4686,6 +5067,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/skipBy: post: operationId: playerSkipBy @@ -4718,6 +5103,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/skipTo: post: operationId: playerSkipTo @@ -4750,6 +5139,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/stepBack: post: operationId: playerStepback @@ -4777,6 +5170,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/stepForward: post: operationId: playerStepforward @@ -4804,6 +5201,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/stop: post: operationId: playerStop @@ -4831,6 +5232,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/subtitleStream: post: operationId: playerSubtitleStream @@ -4862,6 +5267,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/unmute: post: operationId: playerUnmute @@ -4889,6 +5298,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/videoStream: post: operationId: playerVideoStream @@ -4920,6 +5333,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/playback/volume: post: operationId: playerVolume @@ -4953,6 +5370,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/resources: get: operationId: getClientResources @@ -4980,6 +5401,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /player/timeline/poll: get: operationId: playerPollTimeline @@ -5007,6 +5432,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /playlists: delete: operationId: deletePlaylistByRatingKey @@ -5038,6 +5467,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" get: operationId: listPlaylists summary: List playlists @@ -5071,6 +5504,7 @@ paths: in: query schema: type: integer + x-speakeasy-name-override: mediaType responses: '200': description: OK @@ -5087,6 +5521,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: createPlaylist summary: Create a Playlist @@ -5127,7 +5565,7 @@ paths: /playlists/upload: post: operationId: uploadPlaylist - summary: Upload + summary: Upload media art tags: - Library Playlists description: Imports m3u playlists by passing a path on the server to scan for m3u-formatted playlist files, or a path to a single playlist file. @@ -5207,6 +5645,7 @@ paths: - audio - video - photo + x-speakeasy-name-override: mediaType - name: key description: The key of the first item to play, defaults to the first in the play queue. in: query @@ -5289,9 +5728,13 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithPlayQueue" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /resources: get: - operationId: get-server-resources + operationId: getServerResources summary: Get Server Resources tags: - Plex @@ -5307,7 +5750,8 @@ paths: schema: allOf: - $ref: "#/components/schemas/BoolInt" - - default: 0 + - type: integer + default: 0 example: 1 - name: includeRelay description: |- @@ -5317,7 +5761,8 @@ paths: schema: allOf: - $ref: "#/components/schemas/BoolInt" - - default: 0 + - type: integer + default: 0 example: 1 - name: includeIPv6 description: Include IPv6 entries in the results @@ -5325,7 +5770,8 @@ paths: schema: allOf: - $ref: "#/components/schemas/BoolInt" - - default: 0 + - type: integer + default: 0 example: 1 responses: '200': @@ -5396,7 +5842,7 @@ paths: text/html: {} /security/token: post: - operationId: getTransientToken + operationId: createTransientToken summary: Get Transient Tokens tags: - General @@ -5423,6 +5869,7 @@ paths: type: string enum: - delegation + x-speakeasy-name-override: mediaType - name: scope description: The value `all` is the only supported `scope` parameter. in: query @@ -5573,6 +6020,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /services/browse: get: operationId: browseFilesystem @@ -5603,6 +6054,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /services/ultrablur/colors: get: operationId: getColors @@ -5805,6 +6260,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /statistics/resources: get: operationId: getResourceStatistics @@ -5830,6 +6289,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /status/sessions: get: operationId: listSessions @@ -5875,6 +6338,10 @@ paths: User: $ref: "#/components/schemas/User" - $ref: "#/components/schemas/Metadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /status/sessions/background: get: operationId: getBackgroundTasks @@ -5902,6 +6369,10 @@ paths: type: array items: $ref: "#/components/schemas/TranscodeJob" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /status/sessions/history/all: get: operationId: listPlaybackHistory @@ -6022,6 +6493,10 @@ paths: type: array items: $ref: "#/components/schemas/PlaybackHistoryMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /status/sessions/terminate: post: operationId: terminateSession @@ -6094,6 +6569,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /sync/items: get: operationId: getSyncItems @@ -6116,6 +6595,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /sync/queue: get: operationId: getSyncQueue @@ -6138,6 +6621,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /sync/refreshContent: put: operationId: refreshSyncContent @@ -6160,6 +6647,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /sync/refreshSynclists: put: operationId: refreshSyncLists @@ -6182,6 +6673,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /sync/transcodeQueue: get: operationId: getSyncTranscodeQueue @@ -6204,6 +6699,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /system/agents: get: operationId: getMetadataAgents @@ -6229,6 +6728,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /system/settings: get: operationId: getSystemSettings @@ -6254,6 +6757,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /system/updates: get: operationId: checkForSystemUpdates @@ -6279,6 +6786,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /transcode/sessions: get: operationId: getTranscodeSessions @@ -6292,6 +6803,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /updater/apply: put: operationId: applyUpdates @@ -6367,6 +6882,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /updater/status: get: operationId: getUpdatesStatus @@ -6383,11 +6902,11 @@ paths: content: application/json: schema: - type: object - properties: - MediaContainer: - allOf: - - type: object + allOf: + - type: object + properties: + MediaContainer: + type: object properties: autoUpdateVersion: description: The version of the updater (currently `1`) @@ -6408,6 +6927,11 @@ paths: status: description: The current error code (`0` means no error) type: integer + - $ref: "#/components/schemas/UpdaterStatus" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /user: get: operationId: getTokenDetails @@ -6478,7 +7002,7 @@ paths: $ref: "#/components/responses/401" /users: get: - operationId: get-users + operationId: getUsers summary: Get list of all connected users tags: - Users @@ -6897,7 +7421,7 @@ paths: $ref: "#/components/responses/401" /users/signin: post: - operationId: post-users-sign-in-data + operationId: postUsersSignInData summary: Get User Sign In Data tags: - Authentication @@ -6937,7 +7461,7 @@ paths: default: false verificationCode: type: string - example: 123456 + example: '123456' required: - login - password @@ -7327,7 +7851,7 @@ paths: - embedded - segmented - unknown - example: Burn + example: burn - name: maxVideoBitrate description: Client-side maximum video bitrate cap in kbps in: query @@ -7412,6 +7936,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDecision" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /{transcodeType}/:/transcode/universal/fallback: post: operationId: triggerFallback @@ -7629,7 +8157,7 @@ paths: - embedded - segmented - unknown - example: Burn + example: burn - name: maxVideoBitrate description: Client-side maximum video bitrate cap in kbps in: query @@ -7974,6 +8502,10 @@ paths: type: array items: $ref: "#/components/schemas/DownloadQueue" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /downloadQueue/{queueId}/add: post: operationId: addDownloadQueueItems @@ -8057,6 +8589,10 @@ paths: type: array items: $ref: "#/components/schemas/AddedQueueItem" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /downloadQueue/{queueId}/items: get: operationId: listDownloadQueueItems @@ -8102,6 +8638,10 @@ paths: type: array items: $ref: "#/components/schemas/DownloadQueueItem" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /downloads/{channel}.json: get: operationId: getPlexDownloads @@ -8728,7 +9268,7 @@ paths: /library/metadata/{id}/arts: post: operationId: uploadArt - summary: Upload Art + summary: Upload media art Art tags: - Library description: Upload custom background art for a metadata item. @@ -8764,6 +9304,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{id}/children: get: operationId: getMetadataChildren @@ -8798,6 +9342,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{id}/computePath: get: operationId: computeSonicPath @@ -8832,6 +9380,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{id}/grandchildren: get: operationId: getMetadataGrandchildren @@ -8866,6 +9418,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{id}/grandparent: get: operationId: getMetadataGrandparent @@ -8900,6 +9456,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{id}/nearest: get: operationId: getNearestMetadata @@ -8954,6 +9514,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{id}/onDeck: get: operationId: getMetadataOnDeck @@ -8988,6 +9552,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{id}/parent: get: operationId: getMetadataParent @@ -9022,10 +9590,14 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{id}/posters: post: operationId: uploadPoster - summary: Upload Poster + summary: Upload media art Poster tags: - Library description: Upload a custom poster image for a metadata item. @@ -9061,6 +9633,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{id}/reviews: get: operationId: getMetadataReviews @@ -9091,6 +9667,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}: delete: operationId: deleteMetadataItem @@ -9114,6 +9694,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9149,6 +9730,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9271,6 +9853,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" put: operationId: editMetadataItem summary: Edit a metadata item @@ -9293,6 +9879,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9334,6 +9921,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9341,6 +9929,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/allLeaves: get: operationId: getAllItemLeaves @@ -9361,6 +9953,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9381,6 +9974,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/analyze: put: operationId: analyzeMetadata @@ -9404,6 +10001,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9423,6 +10021,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/chapterThumbs: put: operationId: generateThumbs @@ -9446,6 +10048,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9458,6 +10061,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/credits: put: operationId: detectCredits @@ -9481,6 +10088,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9498,6 +10106,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/extras: get: operationId: getExtras @@ -9518,6 +10130,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9538,6 +10151,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: addExtras summary: Add to an item's extras @@ -9558,6 +10175,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Marketplace" - $ref: "#/components/parameters/title" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9600,6 +10218,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9621,6 +10240,10 @@ paths: schema: type: string format: binary + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/index: put: operationId: startBifGeneration @@ -9644,6 +10267,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9656,6 +10280,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/intro: put: operationId: detectIntros @@ -9679,6 +10307,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9698,6 +10327,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/marker: post: operationId: createMarker @@ -9718,6 +10351,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9728,6 +10362,7 @@ paths: required: true schema: type: integer + x-speakeasy-name-override: mediaType - name: startTimeOffset description: The start time of the marker in: query @@ -9786,6 +10421,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9807,6 +10443,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/matches: put: operationId: listMatches @@ -9830,6 +10470,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9870,6 +10511,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/merge: put: operationId: mergeItems @@ -9893,6 +10538,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9907,6 +10553,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/prefs: put: operationId: setItemPreferences @@ -9930,6 +10580,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9941,6 +10592,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/refresh: put: operationId: refreshItemsMetadata @@ -9964,6 +10619,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -9986,6 +10642,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/related: get: operationId: getRelatedItems @@ -10006,6 +10666,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -10017,6 +10678,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/similar: get: operationId: listSimilar @@ -10038,6 +10703,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Marketplace" - $ref: "#/components/parameters/count" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -10049,6 +10715,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/split: put: operationId: splitItem @@ -10072,6 +10742,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -10079,10 +10750,14 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/subtitles: get: - operationId: addSubtitles - summary: Add subtitles + operationId: getSubtitles + summary: Get subtitles tags: - Library description: Add a subtitle to a metadata item @@ -10102,6 +10777,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -10145,6 +10821,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/tree: get: operationId: getItemTree @@ -10165,6 +10845,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -10176,6 +10857,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithNestedMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/unmatch: put: operationId: unmatch @@ -10199,6 +10884,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -10206,6 +10892,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/users/top: get: operationId: listTopUsers @@ -10229,6 +10919,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -10250,6 +10941,10 @@ paths: type: array items: $ref: "#/components/schemas/TopUserAccount" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/voiceActivity: put: operationId: detectVoiceActivity @@ -10273,6 +10968,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -10292,6 +10988,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/augmentations/{augmentationId}: get: operationId: getAugmentationStatus @@ -10484,6 +11184,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" get: operationId: getLibraryDetails summary: Get a library section by id @@ -10564,6 +11268,10 @@ paths: type: string viewMode: type: integer + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" put: operationId: editSection summary: Edit a library section @@ -10673,6 +11381,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/albums: get: operationId: getAlbums @@ -10750,6 +11462,10 @@ paths: title1: Music title2: By Album viewGroup: album + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/all: get: operationId: listContent @@ -10788,6 +11504,7 @@ paths: in: query schema: type: integer + x-speakeasy-name-override: mediaType - name: sort description: Sort key and direction (e.g. addedAt:desc, titleSort) in: query @@ -10995,6 +11712,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" put: operationId: updateItems summary: Set the fields of the filtered items @@ -11068,6 +11789,7 @@ paths: in: query schema: type: string + x-speakeasy-name-override: mediaType - name: filters description: The filters to apply to determine which items should be modified in: query @@ -11254,6 +11976,10 @@ paths: thumb: /:/resources/show.png title1: TV Shows viewGroup: show + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/analyze: put: operationId: startAnalysis @@ -11285,6 +12011,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/artists: get: operationId: getSectionArtists @@ -11320,6 +12050,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/arts: get: operationId: getArts @@ -11352,6 +12086,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithArtwork" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/autocomplete: get: operationId: autocomplete @@ -11385,6 +12123,7 @@ paths: in: query schema: type: integer + x-speakeasy-name-override: mediaType - name: field.query description: The "field" stands in for any field, the value is a partial string for matching in: query @@ -11444,6 +12183,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/byDecade: get: operationId: getByDecade @@ -11478,6 +12221,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/byFolder: get: operationId: getByFolder @@ -11512,6 +12259,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/byResolution: get: operationId: getByResolution @@ -11546,6 +12297,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/byYear: get: operationId: getByYear @@ -11580,6 +12335,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/categories: get: operationId: getCategories @@ -11612,6 +12371,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithArtwork" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/clips: get: operationId: getSectionClips @@ -11647,6 +12410,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/cluster: get: operationId: getCluster @@ -11679,6 +12446,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithArtwork" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/collections: get: operationId: getCollections @@ -11721,6 +12492,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/common: get: operationId: getCommon @@ -11754,6 +12529,7 @@ paths: in: query schema: type: integer + x-speakeasy-name-override: mediaType responses: '200': description: OK @@ -11824,6 +12600,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/edit: get: operationId: getSectionEdit @@ -11854,6 +12634,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" put: operationId: editLibrarySection summary: Edit Section @@ -11883,10 +12667,14 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/emptyTrash: get: operationId: emptyTrash - summary: Empty Trash + summary: Get Empty Trash tags: - Library description: Permanently remove items from the trash for a library section. @@ -11913,6 +12701,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: emptyTrashPost summary: Empty Trash @@ -11942,6 +12734,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" put: operationId: emptyTrashPut summary: Empty section trash @@ -11972,6 +12768,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/episodes: get: operationId: getSectionEpisodes @@ -12007,6 +12807,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/filters: get: operationId: getSectionFilters @@ -12042,6 +12846,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/firstCharacters: get: operationId: getFirstCharacters @@ -12073,6 +12881,7 @@ paths: in: query schema: type: integer + x-speakeasy-name-override: mediaType - name: sort description: The metadata type to filter on in: query @@ -12103,6 +12912,10 @@ paths: size: description: The number of items starting with this character type: integer + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/hubs: get: operationId: getLibrarySectionHubs @@ -12137,6 +12950,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/indexes: delete: operationId: deleteIndexes @@ -12168,6 +12985,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/intros: delete: operationId: deleteIntros @@ -12199,6 +13020,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/label: get: operationId: getSectionLabels @@ -12229,6 +13054,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/location: get: operationId: getFolders @@ -12278,6 +13107,10 @@ paths: type: string key: type: string + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/match: get: operationId: matchSectionItems @@ -12308,6 +13141,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/moment: get: operationId: listMoments @@ -12340,6 +13177,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithArtwork" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/move: put: operationId: moveSection @@ -12370,6 +13211,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/movies: get: operationId: getSectionMovies @@ -12405,6 +13250,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/nearest: get: operationId: getSonicallySimilar @@ -12435,6 +13284,7 @@ paths: in: query schema: type: integer + x-speakeasy-name-override: mediaType - name: values description: The music analysis to center the search. Typically obtained from the `musicAnalysis` of a track in: query @@ -12463,6 +13313,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/newest: get: operationId: getNewestForSection @@ -12497,6 +13351,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/onDeck: get: operationId: getOnDeckForSection @@ -12528,10 +13386,14 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/optimize: get: operationId: optimizeSection - summary: Optimize Section + summary: Get Optimize Section tags: - Library description: Optimize the database for a specific library section. @@ -12558,6 +13420,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: optimizeSectionPost summary: Optimize Section @@ -12587,6 +13453,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/photos: get: operationId: getSectionPhotos @@ -12622,6 +13492,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/playlists: get: operationId: getSectionPlaylists @@ -12656,6 +13530,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/prefs: get: operationId: getSectionPreferences @@ -12692,6 +13570,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSettings" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" put: operationId: setSectionPreferences summary: Set section prefs @@ -12730,6 +13612,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/recentlyAdded: get: operationId: getRecentlyAddedForSection @@ -12761,6 +13647,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/refresh: delete: operationId: cancelRefresh @@ -12792,9 +13682,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" get: operationId: refreshSection - summary: Refresh Section + summary: Get Refresh Section tags: - Library description: Trigger a metadata refresh for a library section. @@ -12822,6 +13716,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: refreshSectionPost summary: Refresh Section @@ -12862,6 +13760,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/search: get: operationId: searchSection @@ -12896,6 +13798,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/settings: get: operationId: getSectionSettings @@ -12926,6 +13832,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/shows: get: operationId: getSectionShows @@ -12961,6 +13871,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/sorts: get: operationId: getAvailableSorts @@ -12993,6 +13907,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSorts" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/tags: get: operationId: getSectionTags @@ -13023,6 +13941,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/timeline: get: operationId: getSectionTimeline @@ -13053,6 +13975,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/unmatch: get: operationId: unmatchSectionItems @@ -13083,6 +14009,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/sections/{sectionId}/unwatched: get: operationId: getUnwatchedForSection @@ -13117,6 +14047,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/streams/{streamId}/levels: get: operationId: getStreamLevels @@ -13247,6 +14181,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" get: operationId: getDVR summary: Get a single DVR @@ -13287,6 +14225,10 @@ paths: application/json: schema: $ref: "#/components/schemas/DVRResponse" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" patch: operationId: patchDVRSettings summary: Update DVR Settings @@ -13317,6 +14259,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" put: operationId: updateDVRSettings summary: Update DVR Settings @@ -13347,6 +14293,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/dvrs/{dvrId}/channels: get: operationId: getDVRChannels @@ -13378,6 +14328,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/dvrs/{dvrId}/guide: get: operationId: getDVRGuide @@ -13409,6 +14363,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/dvrs/{dvrId}/lineups: delete: operationId: deleteLineup @@ -13459,6 +14417,10 @@ paths: application/json: schema: $ref: "#/components/schemas/DVRResponse" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" put: operationId: addLineup summary: Add a DVR Lineup @@ -13508,6 +14470,10 @@ paths: application/json: schema: $ref: "#/components/schemas/DVRResponse" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/dvrs/{dvrId}/prefs: put: operationId: setDVRPreferences @@ -13562,6 +14528,10 @@ paths: application/json: schema: $ref: "#/components/schemas/DVRResponse" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/dvrs/{dvrId}/recordings: get: operationId: getDVRRecordingsByDVR @@ -13593,6 +14563,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/dvrs/{dvrId}/reloadGuide: delete: operationId: stopDVRReload @@ -13624,6 +14598,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: reloadGuide summary: Tell a DVR to reload program guide @@ -13661,6 +14639,10 @@ paths: type: string content: text/html: {} + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/sessions/{sessionId}: delete: operationId: deleteLiveTVSession @@ -13692,6 +14674,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" get: operationId: getLiveTVSession summary: Get a single session @@ -13732,6 +14718,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /media/grabbers/devices/{deviceId}: delete: operationId: removeDevice @@ -13948,6 +14938,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /media/grabbers/devices/{deviceId}/channels: get: operationId: getDevicesChannels @@ -14047,6 +15041,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /media/grabbers/devices/{deviceId}/scan: delete: operationId: stopScan @@ -14079,6 +15077,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" post: operationId: scan summary: Tell a device to scan for channels @@ -14121,6 +15123,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /media/grabbers/operations/{operationId}: delete: operationId: cancelGrab @@ -14674,6 +15680,7 @@ paths: type: array items: type: integer + x-speakeasy-name-override: mediaType responses: '200': description: OK @@ -14789,7 +15796,11 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: "#/components/responses/slash-post-responses-200" + description: The play queue + content: + application/json: + schema: + $ref: "#/components/schemas/PlayQueueResponse" '400': $ref: "#/components/responses/400" '404': @@ -14876,6 +15887,10 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /playQueues/{playQueueId}/reset: put: operationId: resetPlayQueue @@ -15078,6 +16093,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /sharings/{userId}: delete: operationId: removeShare @@ -15252,6 +16271,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /system/agents/{agentId}: get: operationId: getMetadataAgentDetails @@ -15282,6 +16305,10 @@ paths: responses: '200': description: OK + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /user/{uuid}/settings/opt_outs: get: operationId: getUserOptOuts @@ -15510,7 +16537,7 @@ paths: - embedded - segmented - unknown - example: Burn + example: burn - name: maxVideoBitrate description: Client-side maximum video bitrate cap in kbps in: query @@ -15770,6 +16797,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" get: operationId: getDownloadQueueItems summary: Get download queue items @@ -15827,6 +16858,10 @@ paths: type: array items: $ref: "#/components/schemas/DownloadQueueItem" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /downloadQueue/{queueId}/items/{itemId}/restart: post: operationId: restartProcessingDownloadQueueItems @@ -15871,6 +16906,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /hubs/sections/{sectionId}/manage/{identifier}: delete: operationId: deleteCustomHub @@ -16021,8 +17060,8 @@ paths: text/html: {} /library/collections/{collectionId}/items/{itemId}: put: - operationId: deleteCollectionItem - summary: Delete an item from a collection + operationId: updateCollectionItem + summary: Update an item in a collection tags: - Library Collections description: Delete an item from a collection @@ -16187,6 +17226,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -16211,6 +17251,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" put: operationId: updateItemArtwork summary: Set an item's artwork, theme, etc @@ -16232,6 +17276,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -16256,6 +17301,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/marker/{marker}: delete: operationId: deleteMarker @@ -16276,6 +17325,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -16315,6 +17365,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -16331,6 +17382,7 @@ paths: required: true schema: type: integer + x-speakeasy-name-override: mediaType - name: startTimeOffset description: The start time of the marker in: query @@ -16382,6 +17434,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -16537,6 +17590,10 @@ paths: responses: '200': $ref: "#/components/responses/200" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/streams/{streamId}.{ext}: delete: operationId: deleteStream @@ -16797,6 +17854,10 @@ paths: type: array items: $ref: "#/components/schemas/DVR" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" put: operationId: addDeviceToDVR summary: Add a device to an existing DVR @@ -16856,6 +17917,10 @@ paths: type: array items: $ref: "#/components/schemas/DVR" + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /livetv/epg/countries/{country}/{epgId}/lineups: get: operationId: getCountriesLineups @@ -17606,6 +18671,10 @@ paths: schema: type: string format: binary + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts: get: operationId: getHLSSegment @@ -17651,6 +18720,10 @@ paths: schema: type: string format: binary + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/metadata/{ids}/{element}/{timestamp}: get: operationId: getItemArtwork @@ -17671,6 +18744,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -17705,6 +18779,10 @@ paths: schema: type: string format: binary + '400': + $ref: "#/components/responses/400" + '401': + $ref: "#/components/responses/401" /library/parts/{partId}/{changestamp}/{filename}: get: operationId: getMediaPart @@ -18278,7 +19356,7 @@ components: - embedded - segmented - unknown - example: Burn + example: burn subtitleSize: name: subtitleSize description: Percentage of original subtitle size to use when burning subtitles (100 is equivalent to original size, 50 is half, ect) @@ -18502,25 +19580,7 @@ components: content: application/json: schema: - properties: - errors: - items: - properties: - code: - example: 1001 - format: int32 - type: integer - message: - example: User could not be authenticated - type: string - x-speakeasy-error-message: true - status: - example: 401 - format: int32 - type: integer - type: object - type: array - type: object + $ref: "#/components/schemas/Error" '403': description: Forbidden content: @@ -18699,6 +19759,7 @@ components: viewMode: type: integer type: object + type: object slash-post-responses-200: description: OK content: @@ -19250,6 +20311,26 @@ components: type: string national: type: boolean + Error: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: integer + format: int32 + example: 1001 + message: + type: string + example: User could not be authenticated + x-speakeasy-error-message: true + status: + type: integer + format: int32 + example: 401 Feature: type: object properties: @@ -19408,11 +20489,9 @@ components: content: type: boolean contentChangedAt: - allOf: - - $ref: "#/components/schemas/PlexDateTime" + $ref: "#/components/schemas/PlexDateTime" createdAt: - allOf: - - $ref: "#/components/schemas/PlexDateTime" + $ref: "#/components/schemas/PlexDateTime" directory: type: boolean filters: @@ -19438,15 +20517,13 @@ components: description: Indicates whether this library section is currently scanning type: boolean scannedAt: - allOf: - - $ref: "#/components/schemas/PlexDateTime" + $ref: "#/components/schemas/PlexDateTime" scanner: type: string thumb: $ref: "#/components/schemas/Thumb" updatedAt: - allOf: - - $ref: "#/components/schemas/PlexDateTime" + $ref: "#/components/schemas/PlexDateTime" uuid: description: The universally unique identifier for the library. type: string @@ -20113,6 +21190,7 @@ components: type: integer Directory: description: Media Matching Hints + type: object additionalProperties: true durationTotal: description: Only included if `includeStorage` is specified @@ -20129,6 +21207,7 @@ components: $ref: "#/components/schemas/MediaGrabOperation" Playlist: description: Media Matching Hints + type: object additionalProperties: true Setting: type: array @@ -20145,6 +21224,7 @@ components: type: integer Video: description: Media Matching Hints + type: object additionalProperties: true MediaType: description: |- @@ -20837,8 +21917,7 @@ components: type: integer PlexDateTime: description: Unix epoch datetime in seconds - type: - - integer + type: integer format: int64 example: 1556281940 PlexDateTimeISO: From a4b4ba93b1100e723ac2413cf85516ddb99d9ba2 Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 22:39:39 -0500 Subject: [PATCH 21/26] fix: Complete schema coverage for all 404 operations - Add SuccessResponse, BinaryResponse schemas for empty/binary responses - Create 16 new response schemas for plex.tv auth/account/device endpoints - Wire all 86 no-content 200 responses to appropriate MediaContainer*/concrete schemas - Fix all 146 error responses with proper text/html string schemas - Fix 3 request body schemas (auth/jwk, auth/token, log) - Remove unused GenericResponse schema - 0 speakeasy errors, 0 warnings; vacuum score 25/100 - 112 total schemas, 404 operations, 0 gaps --- plex-api-spec.yaml | 4117 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 3943 insertions(+), 174 deletions(-) diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index be5a12411..159c46f0f 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -274,8 +274,16 @@ paths: $ref: "#/components/schemas/Directory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /:/eventsource/notifications: get: operationId: getNotifications @@ -318,8 +326,16 @@ paths: format: binary '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /:/prefs: get: operationId: getAllPreferences @@ -336,8 +352,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithSettings" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string put: operationId: setPreferences summary: Set preferences @@ -368,14 +392,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: Attempt to set a preferences that doesn't exist content: - text/html: {} + text/html: + schema: + type: string '403': description: Attempt to set a preferences that doesn't exist content: - text/html: {} + text/html: + schema: + type: string /:/prefs/get: get: operationId: getPreference @@ -410,7 +442,9 @@ paths: '404': description: No preference with the provided name found. content: - text/html: {} + text/html: + schema: + type: string /:/progress: get: operationId: getProgress @@ -448,10 +482,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/ProgressResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /:/rate: put: operationId: setRating @@ -502,14 +548,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: Bad Request. Can occur when parameters are of the wrong type, missing, or if the `ratedAt` is in the future content: - text/html: {} + text/html: + schema: + type: string '404': description: Indicates that no library with the provide identifier can be found or no item can be found with the rating key content: - text/html: {} + text/html: + schema: + type: string /:/scrobble: put: operationId: markPlayed @@ -552,14 +606,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: Bad Request. Can occur when parameters are of the wrong type, or missing content: - text/html: {} + text/html: + schema: + type: string '404': description: Indicates that no library with the provide identifier can be found or no item can be found with the rating key content: - text/html: {} + text/html: + schema: + type: string /:/timeline: post: operationId: report @@ -731,6 +793,10 @@ paths: type: string '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string /:/unscrobble: put: operationId: unscrobble @@ -773,14 +839,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: Bad Request. Can occur when parameters are of the wrong type, or missing content: - text/html: {} + text/html: + schema: + type: string '404': description: Indicates that no library with the provide identifier can be found or no item can be found with the rating key content: - text/html: {} + text/html: + schema: + type: string /:/websocket/notifications: get: operationId: connectWebSocket @@ -823,8 +897,16 @@ paths: format: binary '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /:/websockets/notifications: get: operationId: getWebsocketNotifications @@ -855,8 +937,16 @@ paths: $ref: "#/components/schemas/NotificationContainer" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /accounts: get: operationId: getSystemAccounts @@ -882,10 +972,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /actions/addToWatchlist: post: operationId: addToWatchlist @@ -915,10 +1017,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /actions/removeFromContinueWatching: put: operationId: removeFromContinueWatching @@ -950,10 +1064,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /actions/removeFromWatchlist: post: operationId: removeFromWatchlist @@ -983,10 +1109,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /activities: get: operationId: listActivities @@ -1011,8 +1149,16 @@ paths: $ref: "#/components/schemas/Activity" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /api/resources: get: operationId: getLegacyResources @@ -1028,11 +1174,19 @@ paths: content: application/xml: schema: - type: object + $ref: "#/components/schemas/MediaContainerWithDevice" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /api/users/: get: operationId: getLegacyUsers @@ -1048,11 +1202,19 @@ paths: content: application/xml: schema: - type: object + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /api/v2/user/webhooks: get: operationId: getUserWebhooks @@ -1071,8 +1233,16 @@ paths: $ref: "#/components/schemas/WebhookPayload" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: addUserWebhook summary: Add User Webhook @@ -1096,10 +1266,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /auth/jwk: post: operationId: registerDeviceJWK @@ -1125,18 +1307,26 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/JWKRegistrationRequest" responses: '200': description: OK content: application/json: schema: - type: object + $ref: "#/components/schemas/AuthTokenResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /auth/keys: get: operationId: getAuthKeys @@ -1164,11 +1354,19 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/AuthKeysResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /auth/nonce: get: operationId: getAuthNonce @@ -1196,11 +1394,19 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/AuthNonceResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string x-speakeasy-retries: backoff: exponent: 2 @@ -1236,18 +1442,26 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/TokenExchangeRequest" responses: '200': description: OK content: application/json: schema: - type: object + $ref: "#/components/schemas/AuthTokenResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string x-speakeasy-retries: backoff: exponent: 2 @@ -1271,10 +1485,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string get: operationId: getTasks summary: Get all Butler tasks @@ -1301,8 +1527,16 @@ paths: $ref: "#/components/schemas/ButlerTask" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: startTasks summary: Start all Butler tasks @@ -1321,10 +1555,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /claim/token.json: get: operationId: getClaimToken @@ -1349,10 +1595,22 @@ paths: responses: '200': description: OK - '400': - $ref: "#/components/responses/400" + content: + application/json: + schema: + $ref: "#/components/schemas/ClaimTokenResponse" + '400': + $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string x-speakeasy-retries: backoff: exponent: 2 @@ -1398,8 +1656,16 @@ paths: $ref: "#/components/schemas/PlexDevice" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /cloud_server: get: operationId: getCloudServer @@ -1427,11 +1693,19 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/CloudServerResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /devices: get: operationId: getSystemDevices @@ -1457,10 +1731,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDevice" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /diagnostics: get: operationId: getDiagnostics @@ -1486,10 +1772,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /diagnostics/databases: get: operationId: downloadDatabaseDiagnostics @@ -1515,10 +1813,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /diagnostics/logs: get: operationId: downloadLogBundle @@ -1544,10 +1854,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /downloadQueue: post: operationId: createDownloadQueue @@ -1577,8 +1899,16 @@ paths: $ref: "#/components/schemas/DownloadQueue" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /features: get: operationId: getFeatures @@ -1599,8 +1929,16 @@ paths: - $ref: "#/components/schemas/Feature" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /friends: get: operationId: getFriends @@ -1649,8 +1987,16 @@ paths: type: string '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /geoip: get: operationId: getGeoIP @@ -1678,11 +2024,19 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/GeoIPResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /home: get: operationId: getHome @@ -1695,10 +2049,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithHubs" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /home/users: get: operationId: getHomeUsers @@ -1723,10 +2089,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: createHomeUser summary: Create Home User @@ -1750,10 +2128,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /hubs: get: operationId: getAllHubs @@ -1800,8 +2190,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithHubs" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /hubs/continueWatching: get: operationId: getContinueWatching @@ -1836,8 +2234,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithHubs" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /hubs/continueWatching/items: get: operationId: getContinueWatchingItems @@ -1869,8 +2275,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /hubs/home/recentlyAdded: get: operationId: getHomeRecentlyAdded @@ -1902,8 +2316,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithHubs" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /hubs/items: get: operationId: getHubItems @@ -1950,7 +2372,9 @@ paths: '404': description: The specified hub could not be found content: - text/html: {} + text/html: + schema: + type: string /hubs/promoted: get: operationId: getPromotedHubs @@ -1985,8 +2409,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithHubs" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /hubs/search: get: operationId: searchHubs @@ -2057,11 +2489,15 @@ paths: '400': description: A required parameter was not given, the wrong type, or wrong value content: - text/html: {} + text/html: + schema: + type: string '404': description: Search restrictions result in no possible items found (such as searching no sections) content: - text/html: {} + text/html: + schema: + type: string /hubs/search/voice: get: operationId: voiceSearchHubs @@ -2118,7 +2554,9 @@ paths: '400': description: A required parameter was not given, the wrong type, or wrong value content: - text/html: {} + text/html: + schema: + type: string /identity: get: operationId: getIdentity @@ -2152,8 +2590,16 @@ paths: type: string '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /ip: get: operationId: getIP @@ -2181,11 +2627,19 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/IPResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library: get: operationId: getRootLibrary @@ -2205,8 +2659,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/all: get: operationId: getLibraryItems @@ -2245,8 +2707,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/caches: delete: operationId: deleteCaches @@ -2260,10 +2730,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/clean/bundles: put: operationId: cleanBundles @@ -2277,10 +2759,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/collections: post: operationId: createCollection @@ -2324,7 +2818,9 @@ paths: '400': description: The uri is missing for a smart collection or the section could not be found content: - text/html: {} + text/html: + schema: + type: string /library/file: post: operationId: ingestTransientItem @@ -2389,8 +2885,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" - '401': - $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/matches: get: operationId: getLibraryMatches @@ -2495,8 +2999,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/optimize: get: operationId: optimizeLibrary @@ -2522,10 +3034,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: optimizeLibraryPost summary: Optimize Library @@ -2550,10 +3074,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string put: operationId: optimizeDatabase summary: Optimize the Database @@ -2583,10 +3119,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/randomArtwork: get: operationId: getRandomArtwork @@ -2629,8 +3177,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithArtwork" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/recentlyAdded: get: operationId: getRecentlyAddedGlobal @@ -2662,8 +3218,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/search: get: operationId: searchDiscover @@ -2712,10 +3276,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/: get: operationId: getLibrarySectionsFallback @@ -2735,8 +3311,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/all: get: operationId: getSections @@ -2775,8 +3359,16 @@ paths: type: string '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: addSection summary: Add a library section @@ -2865,10 +3457,16 @@ paths: responses: '200': $ref: "#/components/responses/slash-get-responses-200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: Section cannot be created due to bad parameters in request content: - text/html: {} + text/html: + schema: + type: string /library/sections/all/refresh: delete: operationId: stopAllRefreshes @@ -2882,10 +3480,22 @@ paths: responses: '200': $ref: "#/components/responses/LibrarySections" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/prefs: get: operationId: getSectionsPrefs @@ -2923,10 +3533,16 @@ paths: responses: '200': $ref: "#/components/responses/LibrarySections" + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithSettings" '400': description: type not provided or not an integer content: - text/html: {} + text/html: + schema: + type: string /library/sections/refresh: post: operationId: refreshSectionsMetadata @@ -2957,10 +3573,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '503': description: Server cannot refresh a music library when not signed in content: - text/html: {} + text/html: + schema: + type: string /library/sections/watchlist/all: get: operationId: getWatchlist @@ -2991,8 +3613,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/tags: get: operationId: getTags @@ -3050,8 +3680,16 @@ paths: type: string '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/dvrs: get: operationId: listDVRs @@ -3088,8 +3726,16 @@ paths: $ref: "#/components/schemas/DVRResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: createDVR summary: Create a DVR @@ -3134,10 +3780,22 @@ paths: responses: '200': $ref: "#/components/responses/dvrRequestHandler_slash-get-responses-200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/epg/channelmap: get: operationId: computeChannelMap @@ -3209,11 +3867,15 @@ paths: '404': description: No device or provider with the identifier was found content: - text/html: {} + text/html: + schema: + type: string '500': description: Failed to compute channel map content: - text/html: {} + text/html: + schema: + type: string /livetv/epg/channels: get: operationId: getChannels @@ -3258,7 +3920,9 @@ paths: '404': description: No provider with the identifier was found content: - text/html: {} + text/html: + schema: + type: string /livetv/epg/countries: get: operationId: getCountries @@ -3294,8 +3958,16 @@ paths: $ref: "#/components/schemas/EPGCountry" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/epg/guide: get: operationId: getEPGGuide @@ -3309,10 +3981,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/epg/languages: get: operationId: getAllLanguages @@ -3348,8 +4032,16 @@ paths: $ref: "#/components/schemas/EPGLanguage" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/epg/lineup: get: operationId: getLineup @@ -3389,14 +4081,22 @@ paths: description: The activity of the reload process schema: type: string + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithLineup" '404': description: No device or provider with the identifier was found content: - text/html: {} + text/html: + schema: + type: string '500': description: Could not get device's channels content: - text/html: {} + text/html: + schema: + type: string /livetv/epg/lineupchannels: get: operationId: getLineupChannels @@ -3451,7 +4151,9 @@ paths: '404': description: No provider with the identifier was found content: - text/html: {} + text/html: + schema: + type: string /livetv/epg/search: get: operationId: searchEPG @@ -3477,10 +4179,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/recordings: get: operationId: getDVRRecordings @@ -3506,10 +4220,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/sessions: get: operationId: getSessions @@ -3546,8 +4272,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /log: post: operationId: writeLog @@ -3562,12 +4296,22 @@ paths: description: Line separated list of log items required: true content: - text/plain: {} + text/plain: + schema: + $ref: "#/components/schemas/LogMessageRequest" responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string put: operationId: writeMessage summary: Logging a single-line message to the Plex Media Server log @@ -3622,11 +4366,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" - '401': - $ref: "#/components/responses/401" - /log/networked: + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string + /log/networked: post: operationId: enablePapertrail summary: Enabling Papertrail @@ -3659,10 +4415,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '403': description: User doesn't have permission content: - text/html: {} + text/html: + schema: + type: string /media/grabbers: get: operationId: getAvailableGrabbers @@ -3716,8 +4478,16 @@ paths: $ref: "#/components/schemas/MediaGrabber" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /media/grabbers/devices: get: operationId: listDevices @@ -3746,8 +4516,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithDevice" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: addDevice summary: Add a device @@ -3784,6 +4562,10 @@ paths: $ref: "#/components/schemas/MediaContainerWithDevice" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string /media/grabbers/devices/discover: get: operationId: discoverDevices @@ -3818,8 +4600,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithDevice" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /media/providers: get: operationId: listProviders @@ -3846,8 +4636,16 @@ paths: - $ref: "#/components/schemas/ProviderFeature" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: addProvider summary: Add a media provider @@ -3875,8 +4673,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string /media/providers/refresh: post: operationId: refreshProviders @@ -3887,10 +4693,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /media/subscriptions: get: operationId: getAllSubscriptions @@ -3949,7 +4767,9 @@ paths: '403': description: User cannot access DVR on this server content: - text/html: {} + text/html: + schema: + type: string post: operationId: createSubscription summary: Create a subscription @@ -4042,14 +4862,22 @@ paths: $ref: "#/components/schemas/MediaSubscription" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '403': description: User cannot access DVR on this server content: - text/html: {} + text/html: + schema: + type: string '409': description: An subscription with the same parameters already exists content: - text/html: {} + text/html: + schema: + type: string /media/subscriptions/process: post: operationId: processSubscriptions @@ -4066,11 +4894,15 @@ paths: schema: type: string content: - text/html: {} + text/html: + schema: + $ref: "#/components/schemas/SuccessResponse" '403': description: User cannot access DVR on this server content: - text/html: {} + text/html: + schema: + type: string /media/subscriptions/scheduled: get: operationId: getScheduledRecordings @@ -4097,7 +4929,9 @@ paths: '403': description: User cannot access DVR on this server content: - text/html: {} + text/html: + schema: + type: string /media/subscriptions/template: get: operationId: getTemplate @@ -4192,7 +5026,9 @@ paths: '403': description: User cannot access DVR on this server content: - text/html: {} + text/html: + schema: + type: string /music/:/transcode: get: operationId: transcodeMusic @@ -4218,10 +5054,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /myplex/account: get: operationId: getMyPlexAccount @@ -4235,10 +5083,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/UserPlexAccount" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /myplex/claim: post: operationId: claimServer @@ -4264,11 +5124,19 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/ClaimTokenResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /myplex/refreshReachability: put: operationId: refreshReachability @@ -4282,10 +5150,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /photo/:/transcode: get: operationId: transcodeImage @@ -4429,10 +5309,22 @@ paths: format: binary '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '403': $ref: "#/components/responses/403" + content: + text/html: + schema: + type: string '404': $ref: "#/components/responses/404" + content: + text/html: + schema: + type: string /ping: get: operationId: ping @@ -4446,10 +5338,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /pins: post: operationId: createOAuthPin @@ -4507,8 +5411,16 @@ paths: type: boolean '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string x-speakeasy-retries: backoff: exponent: 2 @@ -4534,11 +5446,19 @@ paths: content: application/xml: schema: - type: object + $ref: "#/components/schemas/LegacyPinResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string x-speakeasy-retries: backoff: exponent: 2 @@ -4579,10 +5499,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string x-speakeasy-retries: backoff: exponent: 2 @@ -4624,10 +5556,22 @@ paths: responses: '200': description: OK + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/mute: post: operationId: playerMute @@ -4655,10 +5599,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/pause: post: operationId: playerPause @@ -4686,10 +5642,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/play: post: operationId: playerPlay @@ -4717,10 +5685,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/playMedia: post: operationId: playerPlayMedia @@ -4761,10 +5741,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/refreshPlayQueue: post: operationId: playerRefreshplayqueue @@ -4792,10 +5784,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/seek: post: operationId: playerSeek @@ -4828,10 +5832,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/setParameters: post: operationId: playerSetParameters @@ -4880,10 +5896,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/setRating: post: operationId: playerSetRating @@ -4915,10 +5943,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/setState: post: operationId: playerSetState @@ -4954,10 +5994,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/setStreams: post: operationId: playerSetStreams @@ -4997,10 +6049,22 @@ paths: responses: '200': description: OK + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/setTextStream: post: operationId: playerSetTextStream @@ -5032,10 +6096,22 @@ paths: responses: '200': description: OK + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/setViewOffset: post: operationId: playerSetViewOffset @@ -5067,10 +6143,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/skipBy: post: operationId: playerSkipBy @@ -5103,10 +6191,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/skipTo: post: operationId: playerSkipTo @@ -5139,10 +6239,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/stepBack: post: operationId: playerStepback @@ -5170,10 +6282,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/stepForward: post: operationId: playerStepforward @@ -5201,10 +6325,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/stop: post: operationId: playerStop @@ -5232,10 +6368,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/subtitleStream: post: operationId: playerSubtitleStream @@ -5267,10 +6415,22 @@ paths: responses: '200': description: OK + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/unmute: post: operationId: playerUnmute @@ -5298,10 +6458,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/videoStream: post: operationId: playerVideoStream @@ -5333,10 +6505,22 @@ paths: responses: '200': description: OK + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/playback/volume: post: operationId: playerVolume @@ -5370,10 +6554,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/resources: get: operationId: getClientResources @@ -5401,10 +6597,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDevice" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /player/timeline/poll: get: operationId: playerPollTimeline @@ -5432,10 +6640,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /playlists: delete: operationId: deletePlaylistByRatingKey @@ -5467,10 +6687,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string get: operationId: listPlaylists summary: List playlists @@ -5523,8 +6755,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: createPlaylist summary: Create a Playlist @@ -5562,6 +6802,10 @@ paths: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string /playlists/upload: post: operationId: uploadPlaylist @@ -5598,12 +6842,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '403': $ref: "#/components/responses/200" + content: + text/html: + schema: + type: string '500': description: The playlist could not be imported content: - text/html: {} + text/html: + schema: + type: string /playQueues: post: operationId: createPlayQueue @@ -5699,6 +6953,10 @@ paths: $ref: "#/components/schemas/MediaContainerWithPlayQueue" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string /playQueues/1: get: operationId: getConversionQueue @@ -5730,8 +6988,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithPlayQueue" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /resources: get: operationId: getServerResources @@ -5784,6 +7050,10 @@ paths: $ref: "#/components/schemas/PlexDevice" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. content: @@ -5835,11 +7105,15 @@ paths: '400': description: A query param is missing or the wrong value content: - text/html: {} + text/html: + schema: + type: string '403': description: Invalid or no token provided or a transient token could not be created content: - text/html: {} + text/html: + schema: + type: string /security/token: post: operationId: createTransientToken @@ -5897,11 +7171,15 @@ paths: '400': description: A query param is missing or the wrong value content: - text/html: {} + text/html: + schema: + type: string '403': description: Invalid or no token provided or a transient token could not be created content: - text/html: {} + text/html: + schema: + type: string /server: get: operationId: getUserServer @@ -5929,11 +7207,19 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/ConnectionInfo" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /server/access_tokens: get: operationId: getServerAccessTokens @@ -5961,11 +7247,19 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/ServerAccessTokensResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /server/users/features: get: operationId: getServerUserFeatures @@ -5993,11 +7287,19 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/ServerUserFeaturesResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /servers: get: operationId: getLocalServers @@ -6020,10 +7322,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /services/browse: get: operationId: browseFilesystem @@ -6054,10 +7368,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /services/ultrablur/colors: get: operationId: getColors @@ -6103,11 +7429,15 @@ paths: '404': description: The image url could not be found. content: - text/html: {} + text/html: + schema: + type: string '500': description: The server was unable to successfully extract the UltraBlur colors. content: - text/html: {} + text/html: + schema: + type: string /services/ultrablur/image: get: operationId: getImage @@ -6184,7 +7514,9 @@ paths: '400': description: Requested width and height parameters are out of bounds (maximum 3840 x 2160) content: - text/html: {} + text/html: + schema: + type: string /shared_servers: post: operationId: shareServer @@ -6209,10 +7541,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /statistics/bandwidth: get: operationId: getBandwidthStatistics @@ -6260,10 +7604,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /statistics/resources: get: operationId: getResourceStatistics @@ -6289,10 +7645,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /status/sessions: get: operationId: listSessions @@ -6340,8 +7708,16 @@ paths: - $ref: "#/components/schemas/Metadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /status/sessions/background: get: operationId: getBackgroundTasks @@ -6371,8 +7747,16 @@ paths: $ref: "#/components/schemas/TranscodeJob" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /status/sessions/history/all: get: operationId: listPlaybackHistory @@ -6495,8 +7879,16 @@ paths: $ref: "#/components/schemas/PlaybackHistoryMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /status/sessions/terminate: post: operationId: terminateSession @@ -6535,18 +7927,28 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '401': description: Server does not have the feature enabled content: - text/html: {} + text/html: + schema: + type: string '403': description: sessionId is empty content: - text/html: {} + text/html: + schema: + type: string '404': description: Session not found content: - text/html: {} + text/html: + schema: + type: string /sync: get: operationId: getSyncStatus @@ -6569,10 +7971,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithStatus" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /sync/items: get: operationId: getSyncItems @@ -6595,10 +8009,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /sync/queue: get: operationId: getSyncQueue @@ -6621,10 +8047,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /sync/refreshContent: put: operationId: refreshSyncContent @@ -6647,10 +8085,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /sync/refreshSynclists: put: operationId: refreshSyncLists @@ -6673,10 +8123,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /sync/transcodeQueue: get: operationId: getSyncTranscodeQueue @@ -6699,10 +8161,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /system/agents: get: operationId: getMetadataAgents @@ -6728,10 +8202,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /system/settings: get: operationId: getSystemSettings @@ -6757,10 +8243,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /system/updates: get: operationId: checkForSystemUpdates @@ -6786,10 +8284,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /transcode/sessions: get: operationId: getTranscodeSessions @@ -6803,10 +8313,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /updater/apply: put: operationId: applyUpdates @@ -6843,15 +8365,21 @@ paths: '200': description: The update process started correctly content: - text/html: {} + text/html: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: This system cannot install updates content: - text/html: {} + text/html: + schema: + type: string '500': description: The update process failed to start content: - text/html: {} + text/html: + schema: + type: string /updater/check: put: operationId: checkUpdates @@ -6882,10 +8410,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /updater/status: get: operationId: getUpdatesStatus @@ -6930,8 +8470,16 @@ paths: - $ref: "#/components/schemas/UpdaterStatus" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /user: get: operationId: getTokenDetails @@ -6996,10 +8544,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /users: get: operationId: getUsers @@ -7354,11 +8914,19 @@ paths: content: application/xml: schema: - type: object + $ref: "#/components/schemas/UserPlexAccount" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /users/account.json: get: operationId: getAccountJSON @@ -7386,11 +8954,19 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/UserPlexAccount" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /users/password: post: operationId: changePassword @@ -7415,10 +8991,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /users/signin: post: operationId: postUsersSignInData @@ -7609,8 +9197,16 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string /webhooks: get: operationId: getWebhooks @@ -7641,8 +9237,16 @@ paths: $ref: "#/components/schemas/WebhookPayload" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: addWebhook summary: Add Webhook @@ -7666,10 +9270,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /{transcodeType}/:/transcode/universal/decision: get: operationId: makeDecision @@ -7938,8 +9554,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithDecision" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /{transcodeType}/:/transcode/universal/fallback: post: operationId: triggerFallback @@ -7964,18 +9588,28 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '404': description: Session ID does not exist content: - text/html: {} + text/html: + schema: + type: string '412': description: Transcode could not fallback content: - text/html: {} + text/html: + schema: + type: string '500': description: Transcode failed to fallback content: - text/html: {} + text/html: + schema: + type: string /{transcodeType}/:/transcode/universal/subtitles: get: operationId: transcodeSubtitles @@ -8240,6 +9874,8 @@ paths: description: Transcoded subtitle file content: text/srt: + schema: + $ref: "#/components/schemas/BinaryResponse" example: | 1 00:00:02,499 --> 00:00:06,416 @@ -8292,10 +9928,22 @@ paths: [BUNNY SNORES] '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '403': $ref: "#/components/responses/403" + content: + text/html: + schema: + type: string '404': $ref: "#/components/responses/404" + content: + text/html: + schema: + type: string /activities/{activityId}: delete: operationId: cancelActivity @@ -8328,14 +9976,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: Activity is not cancellable content: - text/html: {} + text/html: + schema: + type: string '404': description: No activity with the provided id is found content: - text/html: {} + text/html: + schema: + type: string /butler/{butlerTask}: delete: operationId: stopTask @@ -8390,10 +10046,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '404': description: No task with this name was found or no task with this name was running content: - text/html: {} + text/html: + schema: + type: string post: operationId: startTask summary: Start a single Butler task @@ -8448,15 +10110,21 @@ paths: '200': description: Task started content: - text/html: {} + text/html: + schema: + $ref: "#/components/schemas/SuccessResponse" '202': description: Task is already running content: - text/html: {} + text/html: + schema: + type: string '404': description: No task with this name was found content: - text/html: {} + text/html: + schema: + type: string /downloadQueue/{queueId}: get: operationId: getDownloadQueue @@ -8504,8 +10172,16 @@ paths: $ref: "#/components/schemas/DownloadQueue" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /downloadQueue/{queueId}/add: post: operationId: addDownloadQueueItems @@ -8591,8 +10267,16 @@ paths: $ref: "#/components/schemas/AddedQueueItem" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /downloadQueue/{queueId}/items: get: operationId: listDownloadQueueItems @@ -8640,8 +10324,16 @@ paths: $ref: "#/components/schemas/DownloadQueueItem" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /downloads/{channel}.json: get: operationId: getPlexDownloads @@ -8674,11 +10366,19 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/PlexDownloadsResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /home/users/{id}/switch: post: operationId: switchHomeUser @@ -8708,10 +10408,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /home/users/{userId}: delete: operationId: deleteHomeUser @@ -8741,10 +10453,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string put: operationId: updateHomeUser summary: Update Home User @@ -8773,10 +10497,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /home/users/restricted/{userId}: put: operationId: updateRestrictedUser @@ -8806,10 +10542,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /hubs/metadata/{metadataId}: get: operationId: getMetadataHubs @@ -8844,10 +10592,16 @@ paths: responses: '200': $ref: "#/components/responses/responses-200" + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithHubs" '400': description: No metadata with that id or permission is denied content: - text/html: {} + text/html: + schema: + type: string /hubs/metadata/{metadataId}/postplay: get: operationId: getPostplayHubs @@ -8882,10 +10636,16 @@ paths: responses: '200': $ref: "#/components/responses/responses-200" + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithHubs" '400': description: No metadata with that id or permission is denied content: - text/html: {} + text/html: + schema: + type: string /hubs/metadata/{metadataId}/related: get: operationId: getRelatedHubs @@ -8920,10 +10680,16 @@ paths: responses: '200': $ref: "#/components/responses/responses-200" + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithHubs" '400': description: No metadata with that id or permission is denied content: - text/html: {} + text/html: + schema: + type: string /hubs/sections/{sectionId}: get: operationId: getSectionHubs @@ -8974,7 +10740,9 @@ paths: '400': description: No section with that id or permission is denied content: - text/html: {} + text/html: + schema: + type: string /hubs/sections/{sectionId}/manage: delete: operationId: resetSectionDefaults @@ -9006,12 +10774,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '403': $ref: "#/components/responses/403" + content: + text/html: + schema: + type: string '404': description: Section id was not found content: - text/html: {} + text/html: + schema: + type: string get: operationId: listHubs summary: Get hubs @@ -9072,10 +10850,16 @@ paths: $ref: "#/components/schemas/ManagedHub" '403': $ref: "#/components/responses/403" + content: + text/html: + schema: + type: string '404': description: Section id was not found content: - text/html: {} + text/html: + schema: + type: string post: operationId: createCustomHub summary: Create a custom hub @@ -9127,16 +10911,28 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: A hub could not be created with this metadata item content: - text/html: {} + text/html: + schema: + type: string '403': $ref: "#/components/responses/403" + content: + text/html: + schema: + type: string '404': description: Section id or metadata item was not found content: - text/html: {} + text/html: + schema: + type: string /hubs/sections/{sectionId}/manage/move: put: operationId: moveHub @@ -9179,12 +10975,22 @@ paths: responses: '200': $ref: "#/components/responses/get-responses-200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '403': $ref: "#/components/responses/403" + content: + text/html: + schema: + type: string '404': description: Section id was not found content: - text/html: {} + text/html: + schema: + type: string /library/collections/{collectionId}/items: get: operationId: getCollectionItems @@ -9220,7 +11026,9 @@ paths: '404': description: Collection not found content: - text/html: {} + text/html: + schema: + type: string put: operationId: addCollectionItems summary: Add items to a collection @@ -9264,7 +11072,9 @@ paths: '404': description: Collection not found content: - text/html: {} + text/html: + schema: + type: string /library/metadata/{id}/arts: post: operationId: uploadArt @@ -9304,10 +11114,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{id}/children: get: operationId: getMetadataChildren @@ -9344,8 +11166,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{id}/computePath: get: operationId: computeSonicPath @@ -9382,8 +11212,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{id}/grandchildren: get: operationId: getMetadataGrandchildren @@ -9420,8 +11258,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{id}/grandparent: get: operationId: getMetadataGrandparent @@ -9458,8 +11304,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{id}/nearest: get: operationId: getNearestMetadata @@ -9516,8 +11370,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{id}/onDeck: get: operationId: getMetadataOnDeck @@ -9554,8 +11416,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{id}/parent: get: operationId: getMetadataParent @@ -9592,8 +11462,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{id}/posters: post: operationId: uploadPoster @@ -9633,10 +11511,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{id}/reviews: get: operationId: getMetadataReviews @@ -9667,10 +11557,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}: delete: operationId: deleteMetadataItem @@ -9707,10 +11609,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: Media items could not be deleted content: - text/html: {} + text/html: + schema: + type: string get: operationId: getMetadataItem summary: Get a metadata item @@ -9855,8 +11763,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string put: operationId: editMetadataItem summary: Edit a metadata item @@ -9894,10 +11810,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: Media items could not be deleted content: - text/html: {} + text/html: + schema: + type: string /library/metadata/{ids}/addetect: put: operationId: detectAds @@ -9929,10 +11851,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/allLeaves: get: operationId: getAllItemLeaves @@ -9976,8 +11910,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/analyze: put: operationId: analyzeMetadata @@ -10021,10 +11963,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/chapterThumbs: put: operationId: generateThumbs @@ -10061,10 +12015,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/credits: put: operationId: detectCredits @@ -10106,10 +12072,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/extras: get: operationId: getExtras @@ -10153,8 +12131,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: addExtras summary: Add to an item's extras @@ -10194,10 +12180,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '404': description: Either the metadata item is not present or the extra could not be added content: - text/html: {} + text/html: + schema: + type: string /library/metadata/{ids}/file: get: operationId: getFile @@ -10242,8 +12234,16 @@ paths: format: binary '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/index: put: operationId: startBifGeneration @@ -10280,10 +12280,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/intro: put: operationId: detectIntros @@ -10327,10 +12339,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/marker: post: operationId: createMarker @@ -10397,7 +12421,9 @@ paths: '400': description: Request parameters are bad, such as an `endTimeOffset` prior to the `startTimeOffset` content: - text/html: {} + text/html: + schema: + type: string /library/metadata/{ids}/match: put: operationId: matchItem @@ -10443,10 +12469,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/matches: put: operationId: listMatches @@ -10513,8 +12551,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/merge: put: operationId: mergeItems @@ -10553,10 +12599,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/prefs: put: operationId: setItemPreferences @@ -10592,10 +12650,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/refresh: put: operationId: refreshItemsMetadata @@ -10642,10 +12712,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/related: get: operationId: getRelatedItems @@ -10680,8 +12762,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithHubs" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/similar: get: operationId: listSimilar @@ -10717,8 +12807,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/split: put: operationId: splitItem @@ -10750,10 +12848,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/subtitles: get: operationId: getSubtitles @@ -10821,10 +12931,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/tree: get: operationId: getItemTree @@ -10859,8 +12981,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithNestedMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/unmatch: put: operationId: unmatch @@ -10892,10 +13022,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/users/top: get: operationId: listTopUsers @@ -10943,8 +13085,16 @@ paths: $ref: "#/components/schemas/TopUserAccount" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/{ids}/voiceActivity: put: operationId: detectVoiceActivity @@ -10988,10 +13138,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/metadata/augmentations/{augmentationId}: get: operationId: getAugmentationStatus @@ -11028,11 +13190,15 @@ paths: '401': description: This augmentation is not owned by the requesting user content: - text/html: {} + text/html: + schema: + type: string '404': description: No augmentation found content: - text/html: {} + text/html: + schema: + type: string /library/parts/{partId}: put: operationId: setStreamSelection @@ -11076,10 +13242,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: One of the audio or subtitle streams does not belong to this part content: - text/html: {} + text/html: + schema: + type: string /library/people/{personId}: get: operationId: getPerson @@ -11114,6 +13286,10 @@ paths: $ref: "#/components/schemas/MediaContainerWithTags" '404': $ref: "#/components/responses/404" + content: + text/html: + schema: + type: string /library/people/{personId}/media: get: operationId: listPersonMedia @@ -11148,6 +13324,10 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '404': $ref: "#/components/responses/404" + content: + text/html: + schema: + type: string /library/sections/{sectionId}: delete: operationId: deleteLibrarySection @@ -11184,10 +13364,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string get: operationId: getLibraryDetails summary: Get a library section by id @@ -11270,8 +13462,16 @@ paths: type: integer '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string put: operationId: editSection summary: Edit a library section @@ -11347,10 +13547,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: Section cannot be created due to bad parameters in request content: - text/html: {} + text/html: + schema: + type: string /library/sections/{sectionId}/agents: get: operationId: getSectionAgents @@ -11381,10 +13587,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/albums: get: operationId: getAlbums @@ -11464,8 +13682,16 @@ paths: viewGroup: album '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/all: get: operationId: listContent @@ -11714,8 +13940,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string put: operationId: updateItems summary: Set the fields of the filtered items @@ -11853,18 +14087,28 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': description: The set of parameters are inconsistent or invalid values content: - text/html: {} + text/html: + schema: + type: string '404': description: A required item could not be found content: - text/html: {} + text/html: + schema: + type: string '409': description: Rename of a collection to a name that's already taken content: - text/html: {} + text/html: + schema: + type: string /library/sections/{sectionId}/allLeaves: get: operationId: getAllLeaves @@ -11978,8 +14222,16 @@ paths: viewGroup: show '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/analyze: put: operationId: startAnalysis @@ -12011,10 +14263,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/artists: get: operationId: getSectionArtists @@ -12052,8 +14316,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/arts: get: operationId: getArts @@ -12088,8 +14360,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithArtwork" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/autocomplete: get: operationId: autocomplete @@ -12148,7 +14428,9 @@ paths: '400': description: A paramater is either invalid or missing content: - text/html: {} + text/html: + schema: + type: string /library/sections/{sectionId}/byContentRating: get: operationId: getByContentRating @@ -12185,8 +14467,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/byDecade: get: operationId: getByDecade @@ -12223,8 +14513,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/byFolder: get: operationId: getByFolder @@ -12261,8 +14559,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/byResolution: get: operationId: getByResolution @@ -12299,8 +14605,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/byYear: get: operationId: getByYear @@ -12337,8 +14651,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/categories: get: operationId: getCategories @@ -12373,8 +14695,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithArtwork" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/clips: get: operationId: getSectionClips @@ -12412,8 +14742,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/cluster: get: operationId: getCluster @@ -12448,8 +14786,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithArtwork" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/collections: get: operationId: getCollections @@ -12494,8 +14840,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/common: get: operationId: getCommon @@ -12548,8 +14902,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '404': $ref: "#/components/responses/404" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/computePath: get: operationId: getSonicPath @@ -12602,8 +14964,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/edit: get: operationId: getSectionEdit @@ -12634,10 +15004,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string put: operationId: editLibrarySection summary: Edit Section @@ -12667,10 +15049,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/emptyTrash: get: operationId: emptyTrash @@ -12701,10 +15095,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: emptyTrashPost summary: Empty Trash @@ -12734,10 +15140,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string put: operationId: emptyTrashPut summary: Empty section trash @@ -12768,10 +15186,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/episodes: get: operationId: getSectionEpisodes @@ -12809,8 +15239,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/filters: get: operationId: getSectionFilters @@ -12848,8 +15286,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/firstCharacters: get: operationId: getFirstCharacters @@ -12914,8 +15360,16 @@ paths: type: integer '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/hubs: get: operationId: getLibrarySectionHubs @@ -12952,8 +15406,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithHubs" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/indexes: delete: operationId: deleteIndexes @@ -12985,10 +15447,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/intros: delete: operationId: deleteIntros @@ -13020,10 +15494,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/label: get: operationId: getSectionLabels @@ -13054,10 +15540,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithTags" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/location: get: operationId: getFolders @@ -13109,8 +15607,16 @@ paths: type: string '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/match: get: operationId: matchSectionItems @@ -13141,10 +15647,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/moment: get: operationId: listMoments @@ -13179,8 +15697,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithArtwork" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/move: put: operationId: moveSection @@ -13211,10 +15737,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/movies: get: operationId: getSectionMovies @@ -13252,8 +15790,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/nearest: get: operationId: getSonicallySimilar @@ -13315,8 +15861,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/newest: get: operationId: getNewestForSection @@ -13353,8 +15907,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/onDeck: get: operationId: getOnDeckForSection @@ -13388,8 +15950,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/optimize: get: operationId: optimizeSection @@ -13420,10 +15990,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: optimizeSectionPost summary: Optimize Section @@ -13453,10 +16035,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/photos: get: operationId: getSectionPhotos @@ -13494,8 +16088,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/playlists: get: operationId: getSectionPlaylists @@ -13532,8 +16134,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/prefs: get: operationId: getSectionPreferences @@ -13572,8 +16182,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithSettings" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string put: operationId: setSectionPreferences summary: Set section prefs @@ -13612,10 +16230,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/recentlyAdded: get: operationId: getRecentlyAddedForSection @@ -13649,8 +16279,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/refresh: delete: operationId: cancelRefresh @@ -13682,10 +16320,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string get: operationId: refreshSection summary: Get Refresh Section @@ -13716,10 +16366,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: refreshSectionPost summary: Refresh Section @@ -13760,10 +16422,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/search: get: operationId: searchSection @@ -13800,8 +16474,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/settings: get: operationId: getSectionSettings @@ -13832,10 +16514,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/shows: get: operationId: getSectionShows @@ -13873,8 +16567,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/sorts: get: operationId: getAvailableSorts @@ -13909,8 +16611,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithSorts" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/tags: get: operationId: getSectionTags @@ -13941,10 +16651,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithTags" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/timeline: get: operationId: getSectionTimeline @@ -13975,10 +16697,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/unmatch: get: operationId: unmatchSectionItems @@ -14009,10 +16743,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/sections/{sectionId}/unwatched: get: operationId: getUnwatchedForSection @@ -14049,8 +16795,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /library/streams/{streamId}/levels: get: operationId: getStreamLevels @@ -14103,8 +16857,16 @@ paths: type: string '403': $ref: "#/components/responses/responses-403" + content: + text/html: + schema: + type: string '404': $ref: "#/components/responses/responses-404" + content: + text/html: + schema: + type: string /library/streams/{streamId}/loudness: get: operationId: getStreamLoudness @@ -14145,11 +16907,15 @@ paths: '403': description: The media is not accessible to the user content: - text/html: {} + text/html: + schema: + type: string '404': description: The stream doesn't exist, or the loudness feature is not available on this PMS content: - text/html: {} + text/html: + schema: + type: string /livetv/dvrs/{dvrId}: delete: operationId: deleteDVR @@ -14181,10 +16947,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string get: operationId: getDVR summary: Get a single DVR @@ -14227,8 +17005,16 @@ paths: $ref: "#/components/schemas/DVRResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string patch: operationId: patchDVRSettings summary: Update DVR Settings @@ -14259,10 +17045,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string put: operationId: updateDVRSettings summary: Update DVR Settings @@ -14293,10 +17091,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/dvrs/{dvrId}/channels: get: operationId: getDVRChannels @@ -14328,10 +17138,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/dvrs/{dvrId}/guide: get: operationId: getDVRGuide @@ -14363,10 +17185,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/dvrs/{dvrId}/lineups: delete: operationId: deleteLineup @@ -14419,8 +17253,16 @@ paths: $ref: "#/components/schemas/DVRResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string put: operationId: addLineup summary: Add a DVR Lineup @@ -14472,8 +17314,16 @@ paths: $ref: "#/components/schemas/DVRResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/dvrs/{dvrId}/prefs: put: operationId: setDVRPreferences @@ -14530,8 +17380,16 @@ paths: $ref: "#/components/schemas/DVRResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/dvrs/{dvrId}/recordings: get: operationId: getDVRRecordingsByDVR @@ -14563,10 +17421,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/dvrs/{dvrId}/reloadGuide: delete: operationId: stopDVRReload @@ -14598,10 +17468,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: reloadGuide summary: Tell a DVR to reload program guide @@ -14638,11 +17520,21 @@ paths: schema: type: string content: - text/html: {} + text/html: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /livetv/sessions/{sessionId}: delete: operationId: deleteLiveTVSession @@ -14674,10 +17566,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string get: operationId: getLiveTVSession summary: Get a single session @@ -14720,8 +17624,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /media/grabbers/devices/{deviceId}: delete: operationId: removeDevice @@ -14779,7 +17691,9 @@ paths: '404': description: Device not found content: - text/html: {} + text/html: + schema: + type: string get: operationId: getDeviceDetails summary: Get device details @@ -14817,7 +17731,9 @@ paths: '404': description: Device not found content: - text/html: {} + text/html: + schema: + type: string put: operationId: modifyDevice summary: Enable or disable a device @@ -14879,7 +17795,9 @@ paths: '404': description: Device not found content: - text/html: {} + text/html: + schema: + type: string /media/grabbers/devices/{deviceId}/channelmap: put: operationId: setChannelmap @@ -14940,8 +17858,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithDevice" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /media/grabbers/devices/{deviceId}/channels: get: operationId: getDevicesChannels @@ -14999,7 +17925,9 @@ paths: '404': description: Device not found content: - text/html: {} + text/html: + schema: + type: string /media/grabbers/devices/{deviceId}/prefs: put: operationId: setDevicePreferences @@ -15041,10 +17969,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /media/grabbers/devices/{deviceId}/scan: delete: operationId: stopScan @@ -15079,8 +18019,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithDevice" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string post: operationId: scan summary: Tell a device to scan for channels @@ -15125,8 +18073,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithDevice" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /media/grabbers/operations/{operationId}: delete: operationId: cancelGrab @@ -15157,12 +18113,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '403': description: User is not owner of the grab and not the admin content: - text/html: {} + text/html: + schema: + type: string '404': $ref: "#/components/responses/404" + content: + text/html: + schema: + type: string /media/providers/{provider}: delete: operationId: deleteMediaProvider @@ -15191,12 +18157,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '403': description: Cannot delete a provider which is a child of another provider content: - text/html: {} + text/html: + schema: + type: string /media/subscriptions/{subscriptionId}: delete: operationId: deleteSubscription @@ -15224,14 +18200,28 @@ paths: responses: '200': $ref: "#/components/responses/200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '403': description: User cannot access DVR on this server or cannot access this subscription content: - text/html: {} + text/html: + schema: + type: string '404': $ref: "#/components/responses/404" + content: + text/html: + schema: + type: string get: operationId: getSubscription summary: Get a single subscription @@ -15274,12 +18264,22 @@ paths: $ref: "#/components/schemas/MediaContainerWithSubscription" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '403': description: User cannot access DVR on this server or cannot access this subscription content: - text/html: {} + text/html: + schema: + type: string '404': $ref: "#/components/responses/404" + content: + text/html: + schema: + type: string put: operationId: editSubscriptionPreferences summary: Edit a subscription @@ -15319,12 +18319,22 @@ paths: $ref: "#/components/schemas/MediaContainerWithSubscription" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '403': description: User cannot access DVR on this server or cannot access this subscription content: - text/html: {} + text/html: + schema: + type: string '404': $ref: "#/components/responses/404" + content: + text/html: + schema: + type: string /media/subscriptions/{subscriptionId}/move: put: operationId: reorderSubscription @@ -15366,12 +18376,22 @@ paths: $ref: "#/components/schemas/MediaContainerWithSubscription" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '403': description: User cannot access DVR on this server or cannot access this subscription content: - text/html: {} + text/html: + schema: + type: string '404': $ref: "#/components/responses/404" + content: + text/html: + schema: + type: string /pins/{pinId}: get: operationId: getOAuthPin @@ -15442,8 +18462,16 @@ paths: type: boolean '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /playlists/{playlistId}: delete: operationId: deletePlaylist @@ -15475,7 +18503,9 @@ paths: '404': description: Playlist not found (or user may not have permission to access playlist) content: - text/html: {} + text/html: + schema: + type: string get: operationId: getPlaylist summary: Retrieve Playlist @@ -15512,7 +18542,9 @@ paths: '404': description: Playlist not found (or user may not have permission to access playlist) content: - text/html: {} + text/html: + schema: + type: string put: operationId: updatePlaylist summary: Editing a Playlist @@ -15543,7 +18575,9 @@ paths: '404': description: Playlist not found (or user may not have permission to access playlist) content: - text/html: {} + text/html: + schema: + type: string /playlists/{playlistId}/generators: get: operationId: getPlaylistGenerators @@ -15613,7 +18647,9 @@ paths: '404': description: Playlist not found (or user may not have permission to access playlist) or generator not found content: - text/html: {} + text/html: + schema: + type: string /playlists/{playlistId}/items: delete: operationId: clearPlaylistItems @@ -15642,12 +18678,22 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '404': description: Playlist not found (or user may not have permission to access playlist) content: - text/html: {} + text/html: + schema: + type: string get: operationId: getPlaylistItems summary: Retrieve Playlist Contents @@ -15700,7 +18746,9 @@ paths: '404': description: Playlist not found (or user may not have permission to access playlist) content: - text/html: {} + text/html: + schema: + type: string put: operationId: addPlaylistItems summary: Adding to a Playlist @@ -15738,12 +18786,22 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '404': description: Playlist not found (or user may not have permission to access playlist) content: - text/html: {} + text/html: + schema: + type: string /playQueues/{playQueueId}: get: operationId: getPlayQueue @@ -15803,10 +18861,16 @@ paths: $ref: "#/components/schemas/PlayQueueResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '404': description: Play queue not found content: - text/html: {} + text/html: + schema: + type: string put: operationId: addToPlayQueue summary: Add a generator or playlist to a play queue @@ -15849,12 +18913,22 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '404': description: Play queue not found content: - text/html: {} + text/html: + schema: + type: string /playQueues/{playQueueId}/items: delete: operationId: clearPlayQueue @@ -15889,8 +18963,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /playQueues/{playQueueId}/reset: put: operationId: resetPlayQueue @@ -15919,12 +19001,22 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '404': description: Play queue not found content: - text/html: {} + text/html: + schema: + type: string /playQueues/{playQueueId}/shuffle: put: operationId: shuffle @@ -15959,10 +19051,16 @@ paths: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '404': description: Play queue not found or current item not found content: - text/html: {} + text/html: + schema: + type: string /playQueues/{playQueueId}/unshuffle: put: operationId: unshuffle @@ -15991,12 +19089,22 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '404': description: Play queue not found or current item not found content: - text/html: {} + text/html: + schema: + type: string /servers/{machineId}: get: operationId: getServerDetails @@ -16026,10 +19134,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/ServerConfiguration" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /servers/{machineId}/shared_servers: post: operationId: shareServerLegacy @@ -16059,10 +19179,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /services/browse/{base64path}: get: operationId: browseFilesystemPath @@ -16093,10 +19225,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /sharings/{userId}: delete: operationId: removeShare @@ -16126,10 +19270,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string put: operationId: updateShare summary: Update Share @@ -16158,10 +19314,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /status/sessions/history/{historyId}: delete: operationId: deleteHistory @@ -16209,7 +19377,9 @@ paths: '404': description: History item not found content: - text/html: {} + text/html: + schema: + type: string get: operationId: getHistoryItem summary: Get Single History Item @@ -16240,10 +19410,16 @@ paths: responses: '200': $ref: "#/components/responses/historyAll-get-responses-200" + content: + application/json: + schema: + $ref: "#/components/schemas/PlaybackHistoryMetadata" '404': description: History item not found content: - text/html: {} + text/html: + schema: + type: string /sync/items/{syncId}: get: operationId: getSyncItem @@ -16271,10 +19447,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /system/agents/{agentId}: get: operationId: getMetadataAgentDetails @@ -16305,10 +19493,22 @@ paths: responses: '200': description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /user/{uuid}/settings/opt_outs: get: operationId: getUserOptOuts @@ -16341,11 +19541,19 @@ paths: content: application/json: schema: - type: object + $ref: "#/components/schemas/UserOptOutsResponse" '400': $ref: "#/components/responses/400" + content: + text/html: + schema: + type: string '401': $ref: "#/components/responses/401" + content: + text/html: + schema: + type: string /{transcodeType}/:/transcode/universal/start.{extension}: get: operationId: startTranscodeSession @@ -16620,11 +19828,15 @@ paths: description: MPD file (see ISO/IEC 23009-1:2022), m3u8 file (see RFC 8216), or binary http stream content: application/vnd.apple.mpegurl: + schema: + $ref: "#/components/schemas/BinaryResponse" example: | #EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3538000,RESOLUTION=1280x720,FRAME-RATE=60.000000 session/32635662-0d05-4acd-8f72-512cc64396d4/base/index.m3u8 text/html: + schema: + $ref: "#/components/schemas/BinaryResponse" example: | Date: Wed, 3 Jun 2026 22:50:16 -0500 Subject: [PATCH 22/26] chore: Remove review markdown files --- AGENT_SWARM_REVIEW.md | 197 - DOCUMENTATION_REVIEW.md | 62 - .../capture/traffic-20260603-224738.jsonl | 40 + .../Plex Media Server/.LocalAdminToken | 1 + .../Plex Media Server/Cache/Flags.dat | Bin 0 -> 5024 bytes .../Plex Media Server/Cache/Privacy.dat | Bin 0 -> 8464 bytes .../Cache/UpdateChannels.dat | Bin 0 -> 160 bytes .../Plex Media Server/Codecs/.device-id | 1 + .../Crash Reports/.RateLimit.json | 4 + .../com.plexapp.agents.fanarttv.log | 73 + .../com.plexapp.agents.htbackdrops.log | 64 + .../com.plexapp.agents.imdb.log | 71 + .../com.plexapp.agents.imdb.log.1 | 63 + .../com.plexapp.agents.lastfm.log | 74 + .../com.plexapp.agents.localmedia.log | 83 + .../com.plexapp.agents.localmedia.log.1 | 78 + .../com.plexapp.agents.localmedia.log.2 | 77 + .../com.plexapp.agents.lyricfind.log | 63 + .../com.plexapp.agents.movieposterdb.log | 63 + .../com.plexapp.agents.none.log | 75 + .../com.plexapp.agents.plexthememusic.log | 63 + .../com.plexapp.agents.themoviedb.log | 71 + .../com.plexapp.agents.thetvdb.log | 81 + .../PMS Plugin Logs/com.plexapp.system.log | 775 ++ .../org.musicbrainz.agents.music.log | 66 + .../Logs/Plex Crash Uploader.log | 4 + .../Logs/Plex Media Server.log | 6660 +++++++++++++++++ .../Logs/Plex Tuner Service.log | 27 + .../HTTP.system/CacheInfo | 1 + .../HTTP.system/CacheInfo | 1 + .../com.plexapp.agents.fanarttv/HTTPCookies | 4 + .../com.plexapp.agents.fanarttv/StoredValues | 1 + .../HTTPCookies | 4 + .../StoredValues | 1 + .../Data/com.plexapp.agents.imdb/HTTPCookies | 4 + .../Data/com.plexapp.agents.imdb/StoredValues | 1 + .../com.plexapp.agents.lastfm/HTTPCookies | 4 + .../com.plexapp.agents.lastfm/StoredValues | 1 + .../com.plexapp.agents.localmedia/HTTPCookies | 4 + .../StoredValues | 1 + .../com.plexapp.agents.lyricfind/HTTPCookies | 4 + .../com.plexapp.agents.lyricfind/StoredValues | 1 + .../HTTPCookies | 4 + .../StoredValues | 1 + .../Data/com.plexapp.agents.none/HTTPCookies | 4 + .../Data/com.plexapp.agents.none/StoredValues | 1 + .../HTTPCookies | 4 + .../StoredValues | 1 + .../com.plexapp.agents.themoviedb/HTTPCookies | 4 + .../StoredValues | 1 + .../com.plexapp.agents.thetvdb/HTTPCookies | 4 + .../com.plexapp.agents.thetvdb/StoredValues | 1 + .../Data/com.plexapp.system/Dict | 1756 +++++ .../Data/com.plexapp.system/HTTPCookies | 4 + .../Data/com.plexapp.system/StoredValues | 1 + .../org.musicbrainz.agents.music/HTTPCookies | 4 + .../org.musicbrainz.agents.music/StoredValues | 1 + .../com.plexapp.plugins.library.blobs.db | Bin 0 -> 365568 bytes .../Databases/com.plexapp.plugins.library.db | Bin 0 -> 370688 bytes .../com.plexapp.agents.imdb/Movies.xml | 6 + .../com.plexapp.agents.lastfm/Albums.xml | 8 + .../com.plexapp.agents.lastfm/Artists.xml | 8 + .../com.plexapp.agents.localmedia/Albums.xml | 6 + .../com.plexapp.agents.localmedia/Artists.xml | 6 + .../com.plexapp.agents.localmedia/Movies.xml | 5 + .../TV Shows.xml | 6 + .../com.plexapp.agents.none/Albums.xml | 7 + .../com.plexapp.agents.none/Artists.xml | 7 + .../com.plexapp.agents.none/Movies.xml | 7 + .../com.plexapp.agents.none/TV Shows.xml | 7 + .../com.plexapp.agents.themoviedb/Movies.xml | 6 + .../com.plexapp.agents.thetvdb/TV Shows.xml | 8 + .../org.musicbrainz.agents.music/Albums.xml | 7 + .../org.musicbrainz.agents.music/Artists.xml | 7 + .../tv.plex.agents.music/Albums.xml | 8 + .../tv.plex.agents.music/Artists.xml | 7 + .../Preferences/com.plexapp.agents.imdb.xml | 15 + .../com.plexapp.agents.localmedia.xml | 4 + .../Plex Media Server/Preferences.xml | 2 + .../Plex Media Server/Setup Plex.html | 136 + 80 files changed, 10673 insertions(+), 259 deletions(-) delete mode 100644 AGENT_SWARM_REVIEW.md delete mode 100644 DOCUMENTATION_REVIEW.md create mode 100644 test-data/capture/traffic-20260603-224738.jsonl create mode 100644 test-data/config/Library/Application Support/Plex Media Server/.LocalAdminToken create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Cache/Flags.dat create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Cache/Privacy.dat create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Cache/UpdateChannels.dat create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Codecs/.device-id create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Crash Reports/.RateLimit.json create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.fanarttv.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.htbackdrops.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log.1 create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lastfm.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.1 create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.2 create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lyricfind.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.movieposterdb.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.none.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.plexthememusic.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.themoviedb.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.thetvdb.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.system.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/org.musicbrainz.agents.music.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Crash Uploader.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Media Server.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Tuner Service.log create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.imdb/HTTP.system/CacheInfo create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.localmedia/HTTP.system/CacheInfo create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/Dict create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/HTTPCookies create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/StoredValues create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.blobs.db create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.imdb/Movies.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Albums.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Artists.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Albums.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Artists.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Movies.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/TV Shows.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Albums.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Artists.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Movies.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/TV Shows.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.themoviedb/Movies.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.thetvdb/TV Shows.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Albums.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Artists.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Albums.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Artists.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.imdb.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.localmedia.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Preferences.xml create mode 100644 test-data/config/Library/Application Support/Plex Media Server/Setup Plex.html diff --git a/AGENT_SWARM_REVIEW.md b/AGENT_SWARM_REVIEW.md deleted file mode 100644 index 8e71e2fb7..000000000 --- a/AGENT_SWARM_REVIEW.md +++ /dev/null @@ -1,197 +0,0 @@ -# Agent Swarm Review — Plex API Specification - -**PR:** [#117](https://github.com/LukasParke/plex-api-spec/pull/117) -**Branch:** `feature/arbiter-discovery-pipeline` -**Reviewers:** 4 specialized subagents (OpenAPI Purist, SDK DevEx Critic, API Design Purist, Documentation QA Nitpicker) - ---- - -## Executive Summary - -The spec is structurally sound and CI-clean, but carries significant debt from documenting a real-world, organically-grown API. The three highest-impact issues are: - -1. **~237 operations lack error responses** — SDKs get untyped errors -2. **HTTP method misuse** — GETs mutate state, RPC-style paths abound -3. **5 undefined tags + tag fragmentation** — SDKs generate broken service classes - ---- - -## 🔴 Critical Issues (Fix Before Merge) - -### 1. ~237 Operations Missing Error Responses -- **Reviewer:** OpenAPI Purist, SDK DevEx Critic -- **Problem:** ~60% of operations only define `200` success responses. No `4xx`/`5xx` coverage means generated SDKs throw generic, untyped errors. -- **Fix:** Add `$ref` to existing `components/responses/400`, `401`, `403`, `404` on every authenticated endpoint. At minimum `400` + `401`. - -### 2. GET with Side Effects -- **Reviewer:** API Design Purist -- **Problem:** `GET /:/progress` updates watch progress. `GET /library/sections/{sectionId}/emptyTrash` permanently deletes items. Browsers/crawlers may prefetch these. -- **Fix:** Mark as deprecated in spec; document that clients MUST use `POST` or `DELETE`. - -### 3. Malformed Path Parameter -- **Reviewer:** SDK DevEx Critic -- **Problem:** `DELETE /library/streams/{streamId}.{ext}` declares parameter as `streamId}.{ext` — broken path parsing. -- **Fix:** Correct parameter declaration to `{streamId}` and handle `.ext` as part of path or separate param. - -### 4. 3 Kebab-Case `operationId`s -- **Reviewer:** SDK DevEx Critic -- **Problem:** `get-server-resources`, `get-users`, `post-users-sign-in-data` produce invalid method names in most languages. -- **Fix:** Rename to `getServerResources`, `getUsers`, `postUsersSignInData`. - -### 5. 5 `operationId`s Contradict Their HTTP Method -- **Reviewer:** SDK DevEx Critic -- **Problem:** `GET /library/metadata/{ids}/subtitles` → `addSubtitles`; `PUT /library/collections/.../items/...` → `deleteCollectionItem`. -- **Fix:** Audit and rename to semantically correct IDs. - -### 6. Response Component Missing Root `type` -- **Reviewer:** OpenAPI Purist -- **Problem:** `components.responses.slash-get-responses-200` declares `properties` without `type: object`. -- **Fix:** Add `type: object` at line ~18657. - -### 7. Schema Properties Missing `type` -- **Reviewer:** OpenAPI Purist -- **Problem:** `MediaSubscription` properties (`Directory`, `Playlist`, `Video`) have `additionalProperties: true` but no `type: object`. -- **Fix:** Add `type: object` to each. - -### 8. 5 Undefined Tags -- **Reviewer:** OpenAPI Purist, SDK DevEx Critic -- **Problem:** `Authentication`, `Playback`, `Playlists`, `Plex`, `Users` are used in operations but missing from the global `tags` array. -- **Fix:** Add tag definitions with descriptions to root `tags`. - -### 9. Duplicate Global Parameters -- **Reviewer:** OpenAPI Purist -- **Problem:** 16 transcode/timeline operations redeclare `X-Plex-*` headers already injected by `x-speakeasy-globals`. -- **Fix:** Remove duplicate parameter declarations. - ---- - -## 🟠 High-Priority Issues (Fix Soon) - -### 10. RPC-Style Action Paths -- **Reviewer:** API Design Purist -- **Problem:** `/actions/addToWatchlist`, `/player/playback/mute`, `/library/sections/{id}/emptyTrash`, `/status/sessions/terminate` embed verbs in paths. -- **Note:** Inherited from Plex's architecture. Document as legacy; consider `deprecated: true` where alternatives exist. - -### 11. Resource IDs in Query Parameters -- **Reviewer:** API Design Purist -- **Problem:** `DELETE /playlists?ratingKey={ratingKey}`, `POST /status/sessions/terminate?sessionId={sessionId}` pass identifiers as query params. -- **Fix:** Use path params where possible; document current behavior as legacy. - -### 12. 5 Unused Schemas -- **Reviewer:** OpenAPI Purist -- **Problem:** `Collection`, `Feature`, `PlayQueueResponse`, `ProviderFeature`, `UpdaterStatus` defined but never `$ref`'d. -- **Fix:** Wire into operations or delete. - -### 13. 146 Error Responses Return `text/html` with No Schema -- **Reviewer:** SDK DevEx Critic -- **Problem:** `400`, `403`, `404` responses are `text/html: {}` with no schema. -- **Fix:** Define a reusable `Error` schema and apply it to all error responses. - -### 14. Inconsistent Pagination -- **Reviewer:** API Design Purist -- **Problem:** Three mechanisms: `count`, `limit`, `X-Plex-Container-Start`/`X-Plex-Container-Size`. -- **Fix:** Standardize on one pair and reuse component parameters. - -### 15. `accepts` Header Defaults to XML -- **Reviewer:** SDK DevEx Critic -- **Problem:** PMS endpoints return XML by default. JSON requested via custom `accepts` param. -- **Fix:** Document clearly; consider overriding default per-operation where known. - -### 16. 20 Unstructured `200` Responses -- **Reviewer:** SDK DevEx Critic -- **Problem:** Bare `type: object` or `type: string` — zero autocomplete in SDKs. -- **Fix:** Add proper schemas, even if partial. - -### 17. Unnecessary Single-Item `allOf` -- **Reviewer:** OpenAPI Purist -- **Problem:** 7 instances of `allOf: [{ $ref: ... }]` — redundant indirection. -- **Fix:** Replace with direct `$ref`. - -### 18. Duplicate Inline Request Body -- **Reviewer:** OpenAPI Purist, SDK DevEx Critic -- **Problem:** `PUT /pins/link` defines same `{authToken, pin}` body twice (JSON + form-urlencoded). -- **Fix:** Extract to `components/schemas/LinkPinRequest`. - -### 19. 18 Duplicate Enum Sets -- **Reviewer:** OpenAPI Purist -- **Problem:** `(0, 1)` repeated 14 times, `('lan', 'wan', 'cellular')` 4 times, etc. -- **Fix:** Extract to reusable schemas. - -### 20. Invalid Examples -- **Reviewer:** OpenAPI Purist -- **Problem:** 21 violations — `example: 135` on `type: string`, pattern mismatches, case mismatches. -- **Fix:** Correct to match schema constraints. - ---- - -## 🟡 Medium-Priority Issues - -### 21. Path Parameter Naming Inconsistency -- **Reviewer:** API Design Purist -- **Problem:** `{id}`, `{userId}`, `{uuid}` used for same concept across endpoints. -- **Fix:** Standardize per resource type. - -### 22. Tag Fragmentation -- **Reviewer:** API Design Purist, SDK DevEx Critic -- **Problem:** `Playlist` vs `Playlists` vs `Library Playlists`; `Collections` vs `Library Collections`. -- **Fix:** Consolidate to singular consistent tags. - -### 23. `type` Used as Query Parameter (15+ times) -- **Reviewer:** SDK DevEx Critic -- **Problem:** Reserved word in most languages. -- **Fix:** Add `x-speakeasy-name-override` or rename. - -### 24. No 201 Created for Resource Creation -- **Reviewer:** API Design Purist -- **Problem:** Only 1 `201` in entire spec. Creation endpoints return `200`. -- **Fix:** Return `201 Created` with `Location` header. - -### 25. Weak Auth Scoping -- **Reviewer:** API Design Purist -- **Problem:** Only `admin` and `shared user` scopes. Many admin-only endpoints inherit broad `[shared user, admin]`. -- **Fix:** Audit every endpoint for minimum required scope. - -### 26. Missing `required` Arrays -- **Reviewer:** OpenAPI Purist -- **Problem:** 47 response schemas + 4 request bodies lack `required`. -- **Fix:** Audit and add. - -### 27. 63 Schemas Lack Descriptions -- **Reviewer:** OpenAPI Purist -- **Problem:** `Activity`, `BoolInt`, `ButlerTask`, `Channel`, etc. -- **Fix:** Add descriptions for generated SDK docs. - -### 28. 9 Operations Share Identical Summaries -- **Reviewer:** SDK DevEx Critic -- **Problem:** `GET` and `POST` `/library/optimize` both called `"Optimize Library"`. -- **Fix:** Distinguish by HTTP method in summary. - ---- - -## ✅ Positive Findings - -- **All 154 `$ref`s resolve** — no broken references -- **All 404 `operationId`s are unique** -- **No trailing slash inconsistency** -- **No `type: array` without `items`** -- **No `nullable: true` misuse** — correctly uses OAS 3.1 `type: ["string", "null"]` -- **Security schemes fully utilized** -- **All path parameters declared** -- **CI passes** — prettier, speakeasy, vacuum all green - ---- - -## Recommended Fix Order - -1. **P0:** Add error responses to all operations -2. **P0:** Fix 3 kebab-case `operationId`s -3. **P0:** Fix malformed path parameter -4. **P0:** Add 5 missing global tag definitions -5. **P1:** Delete/wire up 5 unused schemas -6. **P1:** Fix `type: object` omissions -7. **P1:** Remove duplicate parameters from transcode ops -8. **P2:** Flatten single-item `allOf` wrappers -9. **P2:** Extract duplicated enums to reusable schemas -10. **P2:** Fix 21 invalid examples -11. **P3:** Add `required` arrays -12. **P3:** Add descriptions to 63 schemas diff --git a/DOCUMENTATION_REVIEW.md b/DOCUMENTATION_REVIEW.md deleted file mode 100644 index 90e75c5d9..000000000 --- a/DOCUMENTATION_REVIEW.md +++ /dev/null @@ -1,62 +0,0 @@ -# Documentation-Only Review — Plex API Specification - -**PR:** [#117](https://github.com/LukasParke/plex-api-spec/pull/117) -**Scope:** Issues we can fix in the spec itself (excludes Plex's actual API behavior) - ---- - -## Critical (Fix Before Merge) - -| # | Issue | Location | Suggested Fix | -|---|-------|----------|---------------| -| 1 | **~237 operations missing error responses** | Global (~60% of ops) | Add `$ref` to `components/responses/400`, `401`, `403`, `404` on every operation. At minimum `400` + `401` for authenticated endpoints. | -| 2 | **3 kebab-case `operationId`s** | `get-server-resources`, `get-users`, `post-users-sign-in-data` | Rename to `getServerResources`, `getUsers`, `postUsersSignInData`. | -| 3 | **5 `operationId`s contradict their HTTP method** | e.g., `GET /library/metadata/{ids}/subtitles` -> `addSubtitles` | Audit and rename to semantically correct IDs (e.g., `getSubtitles`). | -| 4 | **Malformed path parameter declaration** | `DELETE /library/streams/{streamId}.{ext}` declares `streamId}.{ext` | Correct to `{streamId}` and handle `.ext` appropriately. | -| 5 | **Response component missing `type: object`** | `components.responses.slash-get-responses-200` (~line 18657) | Add `type: object` to the schema. | -| 6 | **Schema properties missing `type`** | `MediaSubscription` properties (`Directory`, `Playlist`, `Video`) | Add `type: object` to each property. | -| 7 | **5 undefined tags in global `tags` array** | `Authentication`, `Playback`, `Playlists`, `Plex`, `Users` | Add tag definitions with descriptions to root `tags`. | -| 8 | **Duplicate global parameter declarations** | 16 transcode/timeline operations | Remove duplicate `X-Plex-*` param declarations already covered by `x-speakeasy-globals`. | - -## High Priority - -| # | Issue | Location | Suggested Fix | -|---|-------|----------|---------------| -| 9 | **146 error responses return `text/html` with no schema** | Global | Define a reusable `Error` schema and apply it to all `4xx`/`5xx` responses. | -| 10 | **5 unused schemas** | `Collection`, `Feature`, `PlayQueueResponse`, `ProviderFeature`, `UpdaterStatus` | Either wire them into operations via `$ref` or delete them. | -| 11 | **20 unstructured `200` responses** | e.g., `POST /auth/jwk`, `GET /geoip` | Add proper schemas (even partial ones) instead of bare `type: object` or `type: string`. | -| 12 | **Duplicate inline request body** | `PUT /pins/link` (JSON + form-urlencoded) | Extract to `components/schemas/LinkPinRequest` and `$ref` from both media types. | -| 13 | **Unnecessary single-item `allOf`** | 7 instances (e.g., `LibrarySection` date fields, `/activities`, `/updater/status`) | Replace `allOf: [{ $ref: ... }]` with direct `$ref`. | -| 14 | **18 duplicate enum sets** | `(0,1)` x14, `('lan','wan','cellular')` x4, etc. | Extract to reusable schemas (e.g., `BoolInt`, `NetworkType`, `StreamProtocol`). | -| 15 | **21 invalid examples** | e.g., `example: 135` on `type: string`, pattern mismatches | Correct example values to match schema constraints. | -| 16 | **`allOf` subschemas missing `type`** | `GET /resources` params `includeHttps`, `includeRelay`, `includeIPv6` | Add `type: integer` to inline subschemas. | -| 17 | **`PlexDateTime` unusual type syntax** | `components.schemas.PlexDateTime` | Change `type: [integer]` to `type: integer`. | -| 18 | **Tag fragmentation** | `Playlist` vs `Playlists` vs `Library Playlists`; `Collections` vs `Library Collections` | Consolidate to a single tag per domain. | -| 19 | **Path parameter naming inconsistency** | `{id}` vs `{userId}` vs `{uuid}` for same concept | Standardize per resource type (e.g., always `{userId}`). | -| 20 | **Security override inconsistency** | Some admin-only endpoints declare `security: [token: [admin]]`, others inherit global | Audit every endpoint and explicitly declare minimum required scope. | - -## Medium Priority - -| # | Issue | Location | Suggested Fix | -|---|-------|----------|---------------| -| 21 | **9 operations share identical summaries** | e.g., `GET` and `POST` `/library/optimize` both `"Optimize Library"` | Distinguish by HTTP method: `"Get Library Optimization Status"` / `"Optimize Library"`. | -| 22 | **`ids` path parameter has no description** | 28 paths using `{ids}` | Add description explaining it accepts comma-separated IDs. | -| 23 | **Vague one-word summaries** | `"Ping"`, `"Get Home"`, `"Upload"` | Expand to descriptive sentences. | -| 24 | **63 schemas lack descriptions** | `Activity`, `BoolInt`, `ButlerTask`, `Channel`, etc. | Add `description` to each schema for generated SDK docs. | -| 25 | **Missing `required` arrays** | 47 response schemas + 4 request bodies | Audit and add `required` for fields the server always returns/expects. | -| 26 | **`type` query parameter is a reserved word** | 15+ operations | Add `x-speakeasy-name-override` to rename in generated SDKs. | -| 27 | **`composite` parameter lacks description** | Global component parameter | Add a description explaining its purpose. | -| 28 | **Response `401` uses inline schema** | `components.responses.401` | Extract to `components.schemas.UnauthorizedErrorResponse` for consistency with `BadRequestErrorResponse`. | -| 29 | **Missing `x-speakeasy-retries` on rate-limited endpoints** | plex.tv auth endpoints (`/pins`, `/auth/token`, etc.) | Add retry config since docs warn about rate limits. | -| 30 | **Missing `x-speakeasy-pagination` metadata** | 2 operations flagged by Speakeasy | Add pagination extension where pagination is supported. | -| 31 | **786 description duplications** | Many responses use identical `"OK"` descriptions | Use `$ref` to shared response components or vary descriptions. | -| 32 | **556+ missing examples** | Pervasive across parameters and responses | Add `example` to every parameter and response media type. | - -## Positive Findings - -- All 154 `$ref`s resolve correctly -- All 404 `operationId`s are unique -- No `nullable: true` misuse (proper OAS 3.1 style) -- No `type: array` without `items` -- No trailing slash inconsistency -- CI passes cleanly (prettier, speakeasy, vacuum) diff --git a/test-data/capture/traffic-20260603-224738.jsonl b/test-data/capture/traffic-20260603-224738.jsonl new file mode 100644 index 000000000..3c624e778 --- /dev/null +++ b/test-data/capture/traffic-20260603-224738.jsonl @@ -0,0 +1,40 @@ +{"path":"http://localhost:32400/","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/identity","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/library","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/library/sections","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/library/sections/1/all","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} +{"path":"http://localhost:32400/library/sections/1/onDeck","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} +{"path":"http://localhost:32400/library/sections/1/recentlyAdded","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} +{"path":"http://localhost:32400/library/metadata/1","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} +{"path":"http://localhost:32400/library/metadata/1/children","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} +{"path":"http://localhost:32400/status/sessions","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/status/sessions/history/all","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/accounts","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/devices","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/clients","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/servers","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/hubs/search","method":"GET","queryParams":[],"status":400,"contentType":"text/html"} +{"path":"http://localhost:32400/playlists","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/butler","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/activities","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/updater/status","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/system/agents","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/system/settings","method":"GET","queryParams":[],"status":404} +{"path":"http://localhost:32400/system/updates","method":"GET","queryParams":[],"status":404} +{"path":"http://localhost:32400/statistics/bandwidth","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} +{"path":"http://localhost:32400/statistics/resources","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} +{"path":"http://localhost:32400/diagnostics","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/sync","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/sync/items","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} +{"path":"http://localhost:32400/sync/queue","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} +{"path":"http://localhost:32400/services/browse","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n\n\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/media/grabbers","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/livetv/dvrs","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/livetv/epg","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} +{"path":"http://localhost:32400/channels","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/player/timeline/poll","method":"GET","queryParams":[],"status":400,"contentType":"text/html"} +{"path":"http://localhost:32400/player/playback/playMedia","method":"GET","queryParams":[],"status":400,"contentType":"text/html"} +{"path":"http://localhost:32400/transcode/sessions","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} +{"path":"http://localhost:32400/security/resources","method":"GET","queryParams":[],"status":400,"contentType":"text/html"} +{"path":"http://localhost:32400/security/token","method":"GET","queryParams":[],"status":400,"contentType":"text/html"} +{"path":"http://localhost:32400/downloadQueue","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} diff --git a/test-data/config/Library/Application Support/Plex Media Server/.LocalAdminToken b/test-data/config/Library/Application Support/Plex Media Server/.LocalAdminToken new file mode 100644 index 000000000..c67cc42e3 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/.LocalAdminToken @@ -0,0 +1 @@ +local-836a1042-dae9-404b-82b0-e1608e98ca67 \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Cache/Flags.dat b/test-data/config/Library/Application Support/Plex Media Server/Cache/Flags.dat new file mode 100644 index 0000000000000000000000000000000000000000..d937b77779c1418f07a127a9e2b35526a848916f GIT binary patch literal 5024 zcmV;R6JP8(JAsRiUy2KqTyowSagqF-zjmM(Vn;)te0Rqb(x}?r(#66)T5aX8Yljv5 zzlxmkgLOMa+0j|Z=_?_CI%&b%kIjIHEuF{u4sq*bwt#1G7>zkYOUd*fpGcQ9w_&)E-bKq( zi@O(dJC)!8HQ>aNU_fEY~TpOae@UJ1V!Y?^A zjxdK*f1h-6A*51{qVX7^N*J90E84~z#lrT}`(`aPH_U1)w9D*wx9y2~K_mZkIxJ2m zQ#rJ)*W=D2F%lk#DkK)Ju=r)wCOXOnU;cN{W5k<_j>4LrUyqMcs~hDX0lvIODQj5d zDVL(~=}81TjfNRaUktylnucPU&3b|eVEJjXc^pt8_8M!$HGqw*e!kO=%Y_RLcSddo z#@TdX`E=Bfp4X-1bN~e!VEZ!)L~nKnDG~0Yacqj|!FS>-bR57I`noozwqm3HxnQTehhEH{1<1JWWD(*at^;1aQG0X;2Q5 zW8B1nw0#X>!Y-of@@{zpKzk4!xZ%vfHJ)W_M9NNw5FM@@7|Yp$WkQ#M2s$oZjtKRT z-_%Q1El;K+W~857RJ9`9Ofm|wH9p)?QDPs0tfMjXK1a+6vzrv+!0PWUt)|v;pT!HN zZ1h~Aeu?}SjmSNki7~ttTLG_cUtVh|_L7WDw)9Sv%z}I3zRo-xbEI@j4psWf=75v# zlyPt@804?=;A9oaarOPVh+5_9(z37_>!iVS2d@haOg3^ZRXzvh1p+c1XJHaXG~qws z)k9HI>4v-KXqxjwG`WU%jqmafz7~lK#qK_{q5KHkOj%Z1OBJlA!Tg^wOl@}f;VGH{ z5n!0V5Eu~R#MVWh>tAui=jARlk?1fM^{e0)d}F;fn;0Q2n9!2L0bK-_ko^gQ~asf%HI z#D#9chAmlB6@p7#EsZf8^BF56veNzq$_>_XBjZQ<$SZVVOHn_$Y0%i1FxrKFlfuf{hds zcmBH#j-IXX(brYF<5=44KIJ#ykGQ3p+-h~ZLx_IiC@@S>v^w{Q*(zr9b3VZ7tl)2 z6L?p}4NI*%K=N0mfr=~zBZso6vsbq}U1VaD(Kn9-*?p7k!|s!nBHj2J1wh$LE0%Km z6s?ih@tTPwf^E?=+EO>jy&~FRT-E9H98n7h80NFc8ume$!ZdfNn9<#)B6jR_aEj^D z#9;!X`yo}!+wfU&MP_}ZIH4u5-5yeg-x8WSY?lIkdcBuFLHnW%j)pxI(PfveTU_r% z8$Z=qYC~G-grzW?v%g%w{uN0j% z7qNS$K?jaF^iP-c1k@q2uJ-wSXKXLrc^ms};Ny!J*U?T8U5B9oDHPcvk_V;!a_}oJ z^j!U59)6$})5Hco#nxBS`!ANFyD0ut5s_7M&@Eb-Y8q^E5$e%8dKscnX8J(UCbO3w zMz^hjx?#+80wfhPQ}i+jR-v?Q^kLxTH$zwmy!n&53{K&%HR?=ZcG7dioJvDtS>N8Z zMj4B~m)rHY5D5gq=}%Rx_{(#3bDJY3UM!-=a(*&+y1lFp`lTW}IyjrDp)NnCWvF^$ zVp7|aM?XcIV#5)xiWb7_Dbkh6nr=+kW}%U0)=ZBG5@E20%}u%>1P?CQ2m7}Ta(eed zVkVK03xS|M&mXsldat`o8$F6#)s|4l+|nS5{id;mR(6ugggQv|v^fW;An=h&+aj4< z{^iWj9^~yVdyM{)M!MRm;=AQy8iI1_q|_urj-kGw1r56OkX6{zfdk9&kSwsN?Pvw@ z*ymRn>*r(~G_yKYDh@zpFb-_*6vBWm5xL{{&*JjuCy8wi3&vF(#Bh`%7(6YkupumO zc=Ln?TwGhH%6P|S-?=6)sL%RKrGR%PMeoogzB_ZJAqQR1Xc6>INUDWL#k@jc)&#V5 zGnFd?FVv>JmU08BDCm%r1RtgZQo9H{RXbl`#Zn&=Vx`K{QCMh^wi-~(L{DbvB#qZ@ zT&LtlO4+-wXfWW{9TnHdD`j%PsRwQF(<|r^Ojs!Tvtt+lMIFp_2<_MhlgQZqv zA_xGrfIup00}yJLgb{QYt!VMLU!zmf?zhkQWz0Q|x0Vni^c{~#%mudNe&PI$`*03AzcZBkUznnft`D#B_0CB2CQp^DvKDx@+1=-RcKBK2B-z~ z#nfNNydBExj&#~W*`D@2^Ipb^42AaGVgkf|6Az$M62@zEY0wTm<0UR5^h{6#;^snM zzAy{xifuhjjBYfa=H+XL%e+VJ&>&k>$f^4;)pM*yPWbWe#io#@R|5=3*ts@`Y=Fit&KrJ z^HuaRZ5C>1Uzy1;-7cYnj4a?PMP=yS?Jq_BIzY>~yz&{n_T~B1YMjejP zwN=AhxG_5l|9&YVD`pmZ$Bw{@fjng2S$DkPBqxFRIEHAdpIt~d(lwFtieVZF)HDM5 z6&l{A`2#~cFA!AB7dQq&CZ31gHh(iSOEF`JAk}8e6BG2kuX52B3s8btjy@&)rysWt z`EUDe`qUuKq9*s>Anqdj36H3GYDnKpmVlus;Gk?$MA8dd-O7eb(&B&@0{tUbC@1kT z&m&RI9wo-ndo{HG$@4N9x$^VdT5+h`@^YYctllI(;q&qb&!!P8$pEXZEMWw$Ch4=x zEKsmBe7JH`7Z|Pwtq2Skfv;{(`MOg~6>+y9q1`U^!0LujcDr_~FSg^+OVRd~hml=@ zW79lf{jLQmzT;_0*mR12JSf|xGzVN+V_LQFy3ii2{^oc}f%=-`2ibA41Cl0zoq#y% zS!CK8iqW5m3=bC|$!s|4t>bd9QjE~tCwOZySEjXZWdIt*eaSs!C7;@e&<&JFHs;GE z)^0(yv*pGn105rRdDqh~z};(r3?6{a3#f!d1}BFs>BB>;O889fTvZN(nIz_j*|NnBu-EJBv;A_)FW16;>Pn>IDM{p z664wUnd6^Eag8Xv233Q^ZNRNCN>q2H;o5ozdDTKT2<-w8!({uk2e&Zb1>hA}#{lMDVO1sys-g z4%Kp1!kF|LXwtZJ(hso4U!AU_)Q(5`nsl!z(vsd#pv6I{yvV0QOqzKA3+*ZaG=VC(scemP`h1vtVYcknt(~4d|dwb#+LHsQ*99i z#_fkuf1UBso(Vtxz7=ZYF#j&S+$L3K71A@$s(1BqevmY1de}4QVb+6)WOiBh z@lZ;=2LYM&xC*owyV@aCf>*!t0~T&#P2mmwK5?I5lz!SP%L7(}di7yF(U;zHM#787 z3PST1a7b7fW)^%aZj#JafGjDpA^0EEj)U5NMh8BQo{!k8%>{OA!W=~j#hb2M7kru7}@M-;v>29+ujdHZJU`q|>gwv=cT;8`W^IV*5 zDj!7APIL4`fWF_4B5mCnD^JE2tH;*}65vt&z!ywodsu0wm6|F$aaV-z4*uCD@tiX7 zo-4)fq2i8bO4>ORkUqD(1YyMch=yFEla`|NCCZ0JbpjN0Q7Su4y0 zgc0e6m2k9X$D($f7V^P@$BzIsm@^e3l*S#k#vNJuo7}q}DLaW(2?c@yw6=xiOW3Oq z7~q|309=^fx?8M{Sbc=zINDRC=wM_PUdOJOdqh)`(antQm|l^R>oxJdYD*AGfn|aS zK%ef9&pS@s##uiOio(QF7d^ANV%>ZgU%pvDuM;Jn;pmW2mWg}rG^vzC>NmcQiIycM zMn_5Yh~+)R+z~fAzeVi|5a`h3sV)c1HEoxf&d+HqjIO6-djUQ%?LGrZ+>3Hcxrwgbsz8f z-4jK6(tbP}+oxVEnoV|nsaN-xe*9S@yY##3Nf=X6cuw<0G%fGhn}-+kZnw_m{n?m! zYx{d)wcQ^5CvMW8zu{fd8vz(9B}<#2HFp{7ovD^AO8 zX0viqD#J&t^t1pV!Qqpchbnn@nyES%+Sl({zN%Lle6PoQtF?O0lG{8wYv!DMm70WE zlm$h5Wdb_BKc*m*C+Myu^B3nh^4qt0~ccqS95eY zcl@PAz3i_q*2j*)8))(D7X<@6m%}UJ;@g(;&WmApEMAzh=eXk&G)k%nZF@AGRU8VmQ76nCPogvwlSI)l4-s{s*e?jrv zA^3b*QNgV@(z1DQIBF}5QQCzzHm_Ym~GR&o#E(CZOSakb>)+_8l zhJRCmHj82b=aUq#0s0}WjYUHeztKCo@A{_>#${o2-h2LR!13KB$`gAbteP5BrRD?a zb(o#H&+R=O?lhCF{41J)sxLXfAbVm3f${6Fs2&ivbDFp<9rM*I{fuu#ijogX7-A)< z;aI8vgAIk*`aha6RFo>(ifvD*n8W*+b_g{>A(w*M!q+QY#1iS1M-b$+2L4MvR(skl zKo>fWl4*EovO#PxhBrXrg!v^HY`)K)U%|E$|9=ZYpx2x&Vi=xdK5FNECb=^4dCibs zsJi`(j>xS-7<2_47c|3W#>?#CW5XdKKro;w)T3b@hVDi~hhC`JpcV{=L~4=zJ@<@- zBn9xwBE!f@wEL`MR7Nr{=9UQrN4;jAuE_E}8)yg4TCVSue-1`5-a3MU>j-dsDT5qc zjTL z&}0Q;ZP$!KK1GsDi=@d>hOf`ryC&f8kmoqOs$mAd+UfT{1G)aXNU>YB_4*Zt|FuH= zS?1i)_o*jaqRw9(V4os8I)=1kb^ip7l03JfQ=2eH%(YV75vQisL$`!+7IshwYaIJ& qdD-f*pfm)ZDe1v+D!lG|y%H#jgC&=HN*n?r)UddHn2Q^Lttox{PQHEs literal 0 HcmV?d00001 diff --git a/test-data/config/Library/Application Support/Plex Media Server/Cache/Privacy.dat b/test-data/config/Library/Application Support/Plex Media Server/Cache/Privacy.dat new file mode 100644 index 0000000000000000000000000000000000000000..98de206fa8ce5ccaa5bc27b6db72270748f169bb GIT binary patch literal 8464 zcmV+rA@ANfJAsRiUy2KqTyowSagqF-zjmM(Vn;)te0Rqb(x}?bxfDHO4SYJ~cm`b` z2ab5ueV{Dy;L>_?(i5W2e=S!v^e_+sdL>M_Er7{DA5?BL?)dp&8*BjQ5CKXx8bH9+ z=8;=@_?b=37v5wt79m0X^VHk0kh!l!_HYxFs<4CNC%%r|ZSYodmEkko>b>hZn~5Vy zHkbHtR}@NvU1$vHXli058iar`JSyyH>@idCK0hR-KAYtUyddSnl-3O$&u3{}hZDyv zI4&xiu`^Ak{qF5DhtJJiuDnuVs9p3~IFQ!0} zAV*Lvr|BQk$WJK_iP}&5anC7GiCH3K@r zs72k4S4unkpqYn+WF9jjVTA>E=reb_Jg@D5CqQcI4(y(nB|Y)y$iWSu;F_nI%(y%K z%~}vczDMy2+O6~9qioab8Z7wiukyp zE|`W^9Xw}rVvzl>=4O(U~gnux;X6r!QWz#K`1KaE!|gccL7jUn9YRi=>C zK@;Rf>I<$$@K?&e$kUL2iYo#s3Fg;FQXeOR>^%P}bE=dPW37RPNg|f~a3ya)o$tk` z%Fqa%&D9TJ{v>xg9&n?yoOZ4AxoM*$uT?=RhOI7%5e?GUPl(M+Xirk%SGLJ9iRo&= zfscg5YUPExJ7yY%Ovy(uVXG&tp>LWIV7pLtMr!mVrXeC|!NcDs@HJWj=s{=1g4se9 zA#4BINpEB1S7j<1YzJMs-W%hHY$teD&XamneEcn;T^*(ITj?*Uvs9<%ITZh^^~)km zGoS$1l(l+u8zgkltO%|dKC^V{B631XFx_6sl=fJ*6g4os(T1Z$($wZQzyGaKxVZ-E z+`(cJ&Q>SLp9rv(WK!iyz7?VOs`@EiOva29Gx|Qajc=X>9u=W9m2z-cQ#F~|sPFYEGHH@EFmRIX?ie031AJQ;E4I~_7zbafG zS%C(vm&*a$%uRMkEWe0ckxTC-fGdJ&h1u~tc&rWnW6z@B7wCJ&y?cl2F1&G-j#C^4 zUSo)Zq1xx1(8UgrJr4F2oue^vLopz)`DSReMKSNAJ4O(-ZYayI2pnI6NdsV`yZvQ{ z-d=8bQ&TwZ75Pe0T3g*SxST1tzUq|OYu(j7-HJZrlTT1U&|WsE{TSf07AeD2_|PLh zGSVsET6X{avJs6eyio3xij2 zFQ5X+4eAg#MX}Du5bt=Ki=x>{w~TLMK^$s@z#f*bbv62JbH&VIEvn1_xVOXGcB-DncEe{@{W${h#=`4mrx-iu3TT&JK^77 z{TES{+5*KH<@QpmGwb=4qqn-m)LpP)y{Y(gxXci{`KaI=w-bRtgm3i)lt~4@v*r|dVAKU5WyEAwQhAMoMBMc%>g=m{A zCLgCf1JsCp0}Wh9o0v_S+uegukmU9wZUME3WqvSf0r)-oPV_Lv7eSY|h9GEZUv-%t z&nqj~Qq}q=SE|bhu_jHy{h~s=Ir@N*Jk7BjQswx@PP{eXDF5j$15J;ymRo2zsJcDi zT$}^a`FWP2LV}@@8*<_k=u%{^rjuWZZkSu*cB&GZl4$3GRXrhI?-iF@gv{GlCmfV~Yc;-$B z^me*tBVeJhAYQRB>=@D|DIy__Pw$yePl2)w1|AuLujU}Nq+WuyV51QZm7!5r-LQ#a z4HOeX1~$=3{UUwzekWDsG%>99MFBuP54&jMg9_SZH^I%>d6T7m5@zgGjXWR54EH^U zY>g>bct>KJ-n9Ixq5v_%k2CO6iTs?w%y*XJhsSNOci60yBgJHA;VF!G90!b2q?Q*o z9K=f9zxkYxvw;20A5=I_Vhi>n{n=@TXZsjb0`JjOsqw2(vz~h-nwl>j5tBmcQONSD zpz9olcQd727>1?U`&}iusas~0`IKAQ79DZ`K~7#nY|*k*b$~^gN2j#2-eKOT1Oy_o zk?9>WZcU&Z>fZz`T}ON*w9!+ZVV5x;{uRk-O|R;OH7|hUoQw z=`t){;pfc^0rIlcySq12mYdqEwDPDIO!W_0?%OW62CNJqH}iD=3dc+H1$il|L+zOP zJR>-ovcj7qkU*MYjfEGc)-z`c%}^sh+8uEtMkeNe+vi|=+Tf)EODkZa9hbmVWSI5S zfo(35xVT*RH?0j)!<)(#dD4CDk>^OqAV(BDbv5B5e>RVD9(Zj5J~#cm$*<4lds+FQ zFgtbOu?5Y<<~|dT)#rEFYOh+PdPwC;~PLzs?h_L_WY4 zQHEL-__qG{OOMLGh4;pRaku?omq%t}tGH?62t@9#$HulokEF6}I+_LFHW{~G z>Qw6SRXP&5sGcu7)>{eg;=1F*n?8%V)7({(&_MhtHdm@qKNCz~c;WY%wl^>?#w z=tiLu;Lm%Ak8%!Ar$YZ?xPUT-B^*95936dZE_7hjMn_Gt{ey%{Y zIFFh{p_mIW?AUb*Nx+%v$oNN*x89g6R8!j>p_skOmBxX$VIIy{UqA!rMY-@EJp{L9 zuJ5&Czn)DB#4<}r9cm<_`-QN= zCjI3sL>O5(M#X`lPBVvIwgC)O5zK%;G+g30DM7p&5a@G)%8DLJ8!627PE2CSk#3-V z1&R=$keJ(jT8H7y3kPl_g4Ot$**!W-NIgsX<;TBT2<%~}#JccuddkQn3MF1)OVnF< z#ccc}R?6#rk|l@8%hFMjBF`_wy2Ppg;TaS>$sNc(;eeH%-yOalHxNXCh|c`M(#!jE zVB!8dgX>>V5)J%t8ciXaoAzTE^voMLt(cnMF>g*sPE4(<>buc>?}!WpN_72E9sHP5 zTU8qCXqPw0TE?zoT4NDAryb5buEq2|-wkpMh31e-?1-4peg}4-756y#mR4IoX)q}H z&}-8c6jQROLDp{cHql$5&F>xv{!7}n^_PCv0|pyHq{con1>zmW%BymH)y4fsr&rMsnz9k19V?)EbWg5#eX_^FuZmw`cvHjumMb>XhkpS&`1&l>FIuv4>YxGS!K8(m zD?$VPljqZ=nQ7(QY~lutZ1J|3QPWn4tV~0irb&~kG3jP0fWc5-T(`NU&>jfBM3Z%{ z<}=0aX=6bDu4T*zLqYd#zHS2_?XDZFaCtTs-HwOEj`c6{B|%H%SZY-dx#Qfy+5xYC z=tsx`H~!iWa2P(%P^Xw?oD>~E7CKyR6sz%Kf%L6eR$~EC`=SYfY+?m2+mK<3*GzPu zN7>@rw%RRs+dnZHl>YNGyW2VK)1`=p9+)Wayr#5~GF|1gQ~;D70WPybO)J;j5h^Ki zDGdCD3Q(dLEJKQAU4*_FZBJOf$q-YT!MW!q8fEppf&|`-HXrS&Dzw$TH?SQkqbn_`?{l50yu!-w0^y%J4 zA{PxxS?J?L!Y=Pf6=>mCdZ$iTX-Lcal<|xe5mIOXhIuFNK>>;ldFPXjJW>@dON`N! zYNm1GP=!NLt*+}IlXC%D&=pI^3!Jwj|4rX^9`yztrRZW8qqtnJ^3yafuPndJa+(N6 z9NiCavvI#L@V!PQqSqqYv5<3blSp1V7Ej?_S$&}?<n&WCcxv0+)xG;sc9zz)l=T{` z>*ILC<+y(`X=9a!#`G&NY_bE%Nv8>Y*M4j0&U%d>eWBt{KA zqez&JF5JmGRhTE=9$p0bFJ8sFNAX5atlAY(iJW8&8JEO@zzCs}$q915*0kzDVk8=D z_&07kACv+-T-sjD&8?It@a$5iCec!`&E-ZhJ=_GMauQKg&CiCQVDNp2>4hpK2*ja(5-YJS%ps-;=Y*4QoS~06LI(kiyn!xom zVsz9Fz6Ois)vG<8+WjQe@E_z{*uod*Yv~2C6<~PEp^qo)m@toIt0$>`2vU{&J;sXu zh)lFpxEQuc#t;3&Eb!jv`7Td*1??nZ1ZuM{l&^GQnxi{^2ZjvLf z5zcp>l<5eqb5_xkW; zm17hLB581vo6~QXYhqd{62Q#$6%FEB^{Cd!eU%RaX1KwLrI@Tm>}$CI>{Ia*7m-O% z8ldtr7@yT)W4We9?XqZ|D~)^71u->rG=CGhjg4|K#yFI_-dEXD$L>1K^!@|*!|fr0F()7 zEM<97C;hS+#UM`dN6=h&invM%;8lMuu`f9sR+VBSeJ;TDG23e15c@U}#;_q}9uQYG z5!gdiEXRw9*+KjiS}A~-7f}JC=N+baaxh3wgJ4A0DXH(OHJcfnak)kXF}E0@5-1{J z_3o|4ro2Wep6#ZZ-05RD$w2ihjoQ$FW>1qHB>vI+#S<4JZo4SoIDBvFvAmw#|LCTl zAdnpIQ!e5*mjdFNWPd1*lW7X()-ExiYIKbu@GNgt+b61Wkw%(r8w?bgo(C{COmf&B zye<@+{_0bW1-S3bw!oGZEhahyPsbX|+{H5ogWkQu-YB+V`x5P2f!KcaGK~9n`<)3l z!vgo<8s8VMK%ibsE3NT*?WT>3vz@)y0%oJ_g0Ud>wED~Gm(6EA-0euk(9-cFe(Xe6@gt*qz9lB9u~BSDm^f^mBoj@ewCw1C8PmJu#oxMA#|Vbh?ND@ z0Q+u(!;WX3HlquziP+LO`S->H4#GLoO>9$80XEoaZ<9spi&7DyydJsH<9Ei{_7(kjQ?e5^2?002pISjh(txo$2LZ3GIX!_)T>{oufLaHG>W4 zq#==pDVL9(s3(3LDhq z1aw1Pt3M5C0_8GX4UyCt8ROwdcTe%w+#*unuHW_PTDF&`L?CMbx{*7lm|`vQWN22t z)<%MHE;}UOGwq@2oYeOwcLty85~Jl72S@P!3#^BZB(s}u=ja1%WP@QF94DIMDv06$ z$a?AU>^WV>(|#BVN69p8kHo}5m+M_w9p;{7r^LQ97F$=o_pX-yx)|qULb-bNa~T!L z*_z@qB`Pw+JTy;27LyK_?;xd=N96nYR0m277}JapPtK-+R&7IDeo4~eP?b-5OlanG zU$1v+AU_?&i(2RRJgqa)gFjY5OpmR{%D_Z9t(3TAv^Cs%kBleDwf$exr&(esnh{Ri z@JvfFlTxjR8T(!>dN%kM8BLA6%yufrYP+l5=KHC9cS;e#>wSm{Aeaw&j=f{fXT&g& z*$92S%&WzS?@-9r@aARv?3%{+V14rs0YA|Eg+0U`qgw>&x|5em^|2z!j-s-<#Vtai z6Fb@aUgct$4xHFk+(pwYJq| z9VsyIzCG4;t1z8h+y7SKvxP?W<|}a@YJEQ9s7-|CQJxh)fTnHC^W;>-9Zq3d?b4u@ z-iU;fArgvqSa@Z@G{}`!VmlSI`Qxoy>cBZYq{j4Du;9YZ1h(4(@7IRW8sMX7QculN zaIHwhX|>JrH|;{muVh6VPCE+lQ~3#u&jZqN;LW{D=thKxjAyWvR8Tx z&JKQU3_nVo2}5id9`Zbu!Lku`Ux9N~DoL;@hyOeSxI&;p8n+`KXjhlA2W&%+ZAj#Q zdvth-5{Dnls5&VB>3w@RTxP8PRhxMqZ!j4;I%o?$AK1`-uVHOReO7xmB;cWD+Z~4W z&13e(cu}{yiaTaCfXWIwU_)G<4y0vio9|hzMU0y@ZQ6{ zArZzCX-?XH3}dBB5ALJc4X`%WIxC`R6HqEUeDXV74)@X;c<$}sw5 zgLRj3!%bKK86`F&BN_pKl(i_w-LMPBA`Y`jKM?d}8lK5If7`gBWk^j#27S-!E4dU< zGHWZANqK{M98XY2Y`T_Pphbs>ru7>Ap{m3_JyTx>&-bP#BIpGs2AT06K}k!~^^Zj> z4@?&*8!esi9fTVSG+|Ur8%dhHtJ^ zp4O0`%tlJpzV^!DPb4~FD;8vJnklPN;8HQ+KoJG*bKVoS?i(h(qEA>D>Sg2&816V_ zaZH_!C?08|6mSK&)SmJ4 z0Glcf(&n_lkcncZ0pWx)W6;OTeC!yk0hy-ERRQsLh#SCYAuGHpb)=E_6?EsiI&lqA z{}I2~wg*|J2)lx0ECu)ILK~q!RVlMCo z(W%|Eq`p3qi41+KsWJ7maq$39>zULs?x1{0J5tjqJZ*S_7_6)m`&v(;jzUXG?bD|i z9F*}1{@+_1TCy)1ur}3hQ;*lWdKcv#+sZu70L0VXg*= z)r2*phr&m-r6Id^kvPfGu7eO%+*@1so}Ka@Ba|=?`%08x1@%YqO&3@Wp`lDx(^6`cZ0p^S-^(CMnH*dQF(+ydU&FYzfxA+R4Q5&hk8<6nPe)aL z;hB+t_FEo5AMc}Ka{`&-Zh35B<;q5G5pw7c+x=W|c(m_AU_(ImWJU?ibIL}F2s#W> z!8o%3MN@Oj#*kH9#~Sh{dt=J}mvF1@Yc6jgGA*kfU7{KD9qOJ86Ly@5Bq*q7FrwuU z0Xw@cy6{ijLyv>`Y(ZYhxp|_ahV@9l#Onm#LiTqi>rLyfcc!2gd4qIZ)P~+Mt=+3H z)lk2pf2ye>-Rnxf-8tL}PrTg9SaWF~|Mp?ylJTiB3rVjVN4UG4ED_a42{w@~AwSti#6o6V7j{E8ipl3va0}qmeFmzjs^v=yNxu+*g(mumFNt zjP8vA7e<01{;;&msU18br806^KE_7s`xUBea)K>*|Js|4If>s{EL;iBWm}oyMQZ0d zV_bJ8mGeZkJCxEa1C@p_yy8;iFE@rVuZgWYnZ@v4k;-dsk&e@XPb~(izP9~y1?b({ z=nicwb9yALwq+MQ31NL@b0sK8kzfRC^WDQ<(ca9U0dM^MqHx z2|V=QfEji{grBG1J=38xEZ1@$d>0b0Ubxhu6G@>>2q{J%ezRtSr@Tg+-=2_R6MDyB zhdP4@^fqd@*K_y$r{O4Ex0zASGmY9Tq{2^kzbifmE^H;BEPn>y<6noz1rMiz!KTDl zj0kV0SW*jV_XV}sFBkf;N^To2L^JzT5NKo>(5__26oyy$&1y(^KJ8WrVRTM|zJX{8 z=U8aATJk>PKi?$+?o9G=7F@9n?T8ZEflcKP?L-s`GVZb4_a2kKD+-1!JxtgM(NFLr zig=%)lhT(vZO*q63xjDm7$Oww5;yWqsf0A`Vg-gfKH;7`1mUfweWOth%UaVR7iTR& zoYZgca}XCK-NQAYa?%`Z;Gd*1#fj{M0SCci`L;K|>o86Mij&~|7nJ*wHA yL@lGTtq7-1ert5{`t-F#HH*PiNAiN0#pHyY=llw-nZ@dv zHt$1@WaGg5tx>#_26^k<7NNXqf9xciU|ec&7QC#G(D Og(tq#BD*w>!VSymno?H) literal 0 HcmV?d00001 diff --git a/test-data/config/Library/Application Support/Plex Media Server/Codecs/.device-id b/test-data/config/Library/Application Support/Plex Media Server/Codecs/.device-id new file mode 100644 index 000000000..787db27f7 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Codecs/.device-id @@ -0,0 +1 @@ +66e98651-ddf2-4595-9cf4-09017dbb9ec8 \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Crash Reports/.RateLimit.json b/test-data/config/Library/Application Support/Plex Media Server/Crash Reports/.RateLimit.json new file mode 100644 index 000000000..fbc66eed7 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Crash Reports/.RateLimit.json @@ -0,0 +1,4 @@ +{ + nextReset: 1780548075, + uploadsRemaining: 5 +} diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.fanarttv.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.fanarttv.log new file mode 100644 index 000000000..ff1c6395d --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.fanarttv.log @@ -0,0 +1,73 @@ +2026-06-04 03:41:15,608 (7f451b8d1808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:15,608 (7f451b8d1808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:41:15,609 (7f451b8d1808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:15,609 (7f451b8d1808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:15,609 (7f451b8d1808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:15,609 (7f451b8d1808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:15,610 (7f451b8d1808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:15,610 (7f451b8d1808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:15,610 (7f451b8d1808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:15,610 (7f451b8d1808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:15,610 (7f451b8d1808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:15,610 (7f451b8d1808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:15,610 (7f451b8d1808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:15,611 (7f45184abb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.fanarttv' +2026-06-04 03:41:15,611 (7f451b8d1808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:15,611 (7f451b8d1808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:15,655 (7f451b8d1808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.fanarttv in namespace 'metadata' +2026-06-04 03:41:15,657 (7f451b8d1808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:15,680 (7f451b8d1808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:15,681 (7f451b8d1808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:15,684 (7f45182c8b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:15,684 (7f451b8d1808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:15,685 (7f451b8d1808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:15,685 (7f45182c8b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:15,685 (7f4518282b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:15,686 (7f451b8d1808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:15,686 (7f451b8d1808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:15,691 (7f4518282b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:15,691 (7f4518282b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:15,691 (7f45182c8b38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:15,694 (7f45182a5b38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:15,728 (7f451b8d1808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:15,728 (7f451b8d1808) : DEBUG (messaging:69) - Exposing function AlbumPosters for remote access +2026-06-04 03:41:15,728 (7f451b8d1808) : DEBUG (agentkit:1132) - Creating new agent class called FanartTVAgent +2026-06-04 03:41:15,728 (7f451b8d1808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}] +2026-06-04 03:41:15,728 (7f451b8d1808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_' +2026-06-04 03:41:15,732 (7f451b8d1808) : DEBUG (agentkit:1132) - Creating new agent class called FanartTVAgent +2026-06-04 03:41:15,732 (7f451b8d1808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}] +2026-06-04 03:41:15,732 (7f451b8d1808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_' +2026-06-04 03:41:15,735 (7f451b8d1808) : DEBUG (agentkit:1132) - Creating new agent class called FanartTVAgent +2026-06-04 03:41:15,735 (7f451b8d1808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}] +2026-06-04 03:41:15,736 (7f451b8d1808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK' +2026-06-04 03:41:15,739 (7f451b8d1808) : DEBUG (agentkit:1132) - Creating new agent class called FanartTVAgent +2026-06-04 03:41:15,739 (7f451b8d1808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}] +2026-06-04 03:41:15,739 (7f451b8d1808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK' +2026-06-04 03:41:15,743 (7f451b8d1808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:15,743 (7f451b8d1808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:15,744 (7f451b8d1808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:15,744 (7f451b8d1808) : INFO (socketinterface:184) - Socket server started on port 38641 +2026-06-04 03:41:15,744 (7f451b8d1808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:15,744 (7f451b8d1808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:15,744 (7f451b8d1808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:15,745 (7f451b8d1808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 152 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.htbackdrops.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.htbackdrops.log new file mode 100644 index 000000000..26400a243 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.htbackdrops.log @@ -0,0 +1,64 @@ +2026-06-04 03:41:15,612 (7fdc103c8808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:15,612 (7fdc103c8808) : DEBUG (core:361) - Using the standard policy +2026-06-04 03:41:15,613 (7fdc103c8808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:15,613 (7fdc103c8808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:15,613 (7fdc103c8808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:15,613 (7fdc103c8808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:15,614 (7fdc103c8808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:15,615 (7fdc103c8808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:15,615 (7fdc0cfa2b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.htbackdrops' +2026-06-04 03:41:15,658 (7fdc103c8808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.htbackdrops in namespace 'metadata' +2026-06-04 03:41:15,660 (7fdc103c8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:15,682 (7fdc103c8808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:15,683 (7fdc103c8808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:15,686 (7fdc0cd6cb38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:15,686 (7fdc103c8808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:15,686 (7fdc0cd6cb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:15,687 (7fdc103c8808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:15,687 (7fdc0cd26b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:15,687 (7fdc103c8808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:15,687 (7fdc103c8808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:15,689 (7fdc0cd26b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:15,690 (7fdc0cd26b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:15,698 (7fdc0cd6cb38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:15,701 (7fdc0cd49b38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:15,704 (7fdc103c8808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:15,704 (7fdc103c8808) : DEBUG (messaging:69) - Exposing function ArtistSearch for remote access +2026-06-04 03:41:15,705 (7fdc103c8808) : DEBUG (agentkit:1132) - Creating new agent class called HTBDAgent +2026-06-04 03:41:15,706 (7fdc103c8808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['ab', 'aa', 'af', 'ak', 'sq', 'am', 'ar', 'an', 'hy', 'as', 'av', 'ae', 'ay', 'az', 'bm', 'ba', 'eu', 'be', 'bn', 'bh', 'bi', 'bs', 'pb', 'br', 'bg', 'my', 'ca', 'ch', 'ce', 'ny', 'zh', 'cu', 'cv', 'kw', 'co', 'cr', 'hr', 'cs', 'da', 'dv', 'nl', 'dz', 'en', 'eo', 'et', 'ee', 'fo', 'fj', 'fi', 'fr', 'fy', 'ff', 'gd', 'gl', 'lg', 'ka', 'de', 'el', 'gn', 'gu', 'ht', 'ha', 'he', 'hz', 'hi', 'ho', 'hu', 'is', 'io', 'ig', 'id', 'ia', 'ie', 'iu', 'ik', 'ga', 'it', 'ja', 'jv', 'kl', 'kn', 'kr', 'ks', 'kk', 'km', 'ki', 'rw', 'ky', 'kv', 'kg', 'ko', 'kj', 'ku', 'lo', 'la', 'lv', 'li', 'ln', 'lt', 'lu', 'lb', 'mk', 'mg', 'ms', 'ml', 'mt', 'gv', 'mi', 'mr', 'mh', 'mo', 'mn', 'na', 'nv', 'ng', 'ne', 'xn', 'nd', 'no', 'nb', 'nn', 'oc', 'oj', 'or', 'om', 'os', 'pi', 'pa', 'fa', 'pl', 'pt', 'ps', 'qu', 'rm', 'ro', 'rn', 'ru', 'se', 'sm', 'sg', 'sa', 'sc', 'sr', 'sn', 'ii', 'sd', 'si', 'sk', 'sl', 'so', 'st', 'nr', 'es', 'su', 'sw', 'ss', 'sv', 'tl', 'ty', 'tg', 'ta', 'tt', 'te', 'th', 'bo', 'ti', 'to', 'ts', 'tn', 'tr', 'tk', 'tw', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'cy', 'wo', 'xh', 'yi', 'yo', 'za', 'zu'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': False, 'name': 'Home Theater Backdrops'}] +2026-06-04 03:41:15,707 (7fdc103c8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK' +2026-06-04 03:41:15,711 (7fdc103c8808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:15,711 (7fdc103c8808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:15,711 (7fdc103c8808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:15,711 (7fdc103c8808) : INFO (socketinterface:184) - Socket server started on port 38111 +2026-06-04 03:41:15,711 (7fdc103c8808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:15,711 (7fdc103c8808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:15,712 (7fdc103c8808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:15,712 (7fdc103c8808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 155 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log new file mode 100644 index 000000000..7d99ef248 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log @@ -0,0 +1,71 @@ +2026-06-04 03:41:58,186 (7f17f5394808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:58,186 (7f17f5394808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:41:58,186 (7f17f5394808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:58,187 (7f17f5394808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:58,187 (7f17f5394808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:58,187 (7f17f5394808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:58,187 (7f17f5394808) : DEBUG (networking:262) - Loaded HTTP cookies +2026-06-04 03:41:58,187 (7f17f5394808) : DEBUG (caching:108) - No info file found, trashing the cache folder +2026-06-04 03:41:58,188 (7f17f5394808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:58,188 (7f17f5394808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:58,188 (7f17f5394808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:58,188 (7f17f5394808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:58,188 (7f17f5394808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:58,188 (7f17f5394808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:58,188 (7f17f5394808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:58,189 (7f17f1f6eb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.imdb' +2026-06-04 03:41:58,189 (7f17f5394808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:58,235 (7f17f5394808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.imdb in namespace 'metadata' +2026-06-04 03:41:58,237 (7f17f5394808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:58,239 (7f17f5394808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:58,240 (7f17f5394808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:58,243 (7f17f1d36b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:58,243 (7f17f5394808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:58,244 (7f17f1d36b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:58,244 (7f17f5394808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:58,244 (7f17f5394808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:58,244 (7f17f1cf0b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:58,244 (7f17f5394808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:58,261 (7f17f1cf0b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:58,261 (7f17f1cf0b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:58,261 (7f17f1d36b38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:58,264 (7f17f1d13b38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:58,412 (7f17f5394808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:58,468 (7f17f5394808) : DEBUG (agentkit:1132) - Creating new agent class called PlexMovieAgent +2026-06-04 03:41:58,468 (7f17f5394808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': ['com.plexapp.agents.localmedia'], 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.themoviedb'], 'languages': ['en', 'sv', 'fr', 'es', 'nl', 'de', 'it', 'da', 'ar', 'ca', 'zh', 'cs', 'et', 'fi', 'el', 'he', 'hi', 'hu', 'id', 'ja', 'ko', 'lv', 'no', 'fa', 'pl', 'pt', 'ro', 'ru', 'sk', 'th', 'tr', 'uk', 'vi'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Plex Movie (Legacy)'}] +2026-06-04 03:41:58,469 (7f17f5394808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_' +2026-06-04 03:41:58,472 (7f17f5394808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:58,472 (7f17f5394808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:58,472 (7f17f5394808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:58,472 (7f17f5394808) : INFO (socketinterface:184) - Socket server started on port 40185 +2026-06-04 03:41:58,472 (7f17f5394808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:58,472 (7f17f5394808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:58,473 (7f17f5394808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:58,473 (7f17f5394808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 148 bytes +2026-06-04 03:41:58,474 (7f17f1c81b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.agents.imdb/prefs +2026-06-04 03:41:58,478 (7f17f1c81b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.agents.imdb/prefs +2026-06-04 03:41:58,478 (7f17f1c81b38) : DEBUG (preferences:258) - Loaded preferences from DefaultPrefs.json +2026-06-04 03:41:58,478 (7f17f1c81b38) : INFO (preferences:161) - No user preferences file exists +2026-06-04 03:41:58,478 (7f17f1c81b38) : DEBUG (preferences:198) - Saved the user preferences +2026-06-04 03:41:58,480 (7f17f1c81b38) : DEBUG (runtime:88) - Sending packed state data (104 bytes) +2026-06-04 03:41:58,480 (7f17f1c81b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 2224 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log.1 b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log.1 new file mode 100644 index 000000000..9793fa7c5 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log.1 @@ -0,0 +1,63 @@ +2026-06-04 03:41:16,761 (7f00d96e5808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:16,761 (7f00d96e5808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:41:16,761 (7f00d96e5808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:16,762 (7f00d96e5808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:16,763 (7f00d96e5808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:16,763 (7f00d96e5808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:16,763 (7f00d62bfb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.imdb' +2026-06-04 03:41:16,763 (7f00d96e5808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:16,764 (7f00d96e5808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:16,805 (7f00d96e5808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.imdb in namespace 'metadata' +2026-06-04 03:41:16,806 (7f00d96e5808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:16,809 (7f00d96e5808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:16,810 (7f00d96e5808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:16,813 (7f00d60ddb38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:16,813 (7f00d96e5808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:16,813 (7f00d60ddb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:16,813 (7f00d96e5808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:16,814 (7f00d6097b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:16,814 (7f00d96e5808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:16,814 (7f00d96e5808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:16,833 (7f00d6097b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:16,833 (7f00d60ddb38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:16,834 (7f00d6097b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:16,836 (7f00d60bab38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:16,983 (7f00d96e5808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:17,040 (7f00d96e5808) : DEBUG (agentkit:1132) - Creating new agent class called PlexMovieAgent +2026-06-04 03:41:17,040 (7f00d96e5808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': ['com.plexapp.agents.localmedia'], 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.themoviedb'], 'languages': ['en', 'sv', 'fr', 'es', 'nl', 'de', 'it', 'da', 'ar', 'ca', 'zh', 'cs', 'et', 'fi', 'el', 'he', 'hi', 'hu', 'id', 'ja', 'ko', 'lv', 'no', 'fa', 'pl', 'pt', 'ro', 'ru', 'sk', 'th', 'tr', 'uk', 'vi'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Plex Movie (Legacy)'}] +2026-06-04 03:41:17,041 (7f00d96e5808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_' +2026-06-04 03:41:17,044 (7f00d96e5808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:17,044 (7f00d96e5808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:17,044 (7f00d96e5808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:17,044 (7f00d96e5808) : INFO (socketinterface:184) - Socket server started on port 39585 +2026-06-04 03:41:17,044 (7f00d96e5808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:17,044 (7f00d96e5808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:17,045 (7f00d96e5808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:17,045 (7f00d96e5808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 148 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lastfm.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lastfm.log new file mode 100644 index 000000000..5ec9d3377 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lastfm.log @@ -0,0 +1,74 @@ +2026-06-04 03:41:15,608 (7efeadd81808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:15,609 (7efeadd81808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:41:15,609 (7efeadd81808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:15,609 (7efeadd81808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:15,610 (7efeadd81808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:15,611 (7efeadd81808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:15,611 (7efeaa95bb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.lastfm' +2026-06-04 03:41:15,611 (7efeadd81808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:15,611 (7efeadd81808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:15,654 (7efeadd81808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.lastfm in namespace 'metadata' +2026-06-04 03:41:15,656 (7efeadd81808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:15,680 (7efeadd81808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:15,681 (7efeadd81808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:15,685 (7efeaa722b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:15,685 (7efeadd81808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:15,685 (7efeaa722b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:15,685 (7efeadd81808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:15,686 (7efeaa6dcb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:15,686 (7efeadd81808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:15,686 (7efeadd81808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:15,701 (7efeaa722b38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:15,702 (7efeaa6dcb38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:15,702 (7efeaa6dcb38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:15,704 (7efeaa6ffb38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function ArtistMbidLookup for remote access +2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function GetMusicBrainzId for remote access +2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function ArtistSearch for remote access +2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function AlbumSearch for remote access +2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function ArtistTopTracks for remote access +2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function ArtistGetSimilar for remote access +2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function ArtistGetEvents for remote access +2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (agentkit:1132) - Creating new agent class called LastFmAgent +2026-06-04 03:41:15,779 (7efeadd81808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'sv', 'fr', 'es', 'de', 'pl', 'it', 'pt', 'ja', 'tr', 'ru', 'zh'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Last.fm'}] +2026-06-04 03:41:15,779 (7efeadd81808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__' +2026-06-04 03:41:15,782 (7efeadd81808) : DEBUG (agentkit:1132) - Creating new agent class called LastFmAlbumAgent +2026-06-04 03:41:15,782 (7efeadd81808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'sv', 'fr', 'es', 'de', 'pl', 'it', 'pt', 'ja', 'tr', 'ru', 'zh'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Last.fm'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'sv', 'fr', 'es', 'de', 'pl', 'it', 'pt', 'ja', 'tr', 'ru', 'zh'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Last.fm'}] +2026-06-04 03:41:15,783 (7efeadd81808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__' +2026-06-04 03:41:15,786 (7efeadd81808) : DEBUG (messaging:69) - Exposing function GetArtistEventsFromSongkickById for remote access +2026-06-04 03:41:15,786 (7efeadd81808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:15,786 (7efeadd81808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:15,786 (7efeadd81808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:15,786 (7efeadd81808) : INFO (socketinterface:184) - Socket server started on port 33769 +2026-06-04 03:41:15,787 (7efeadd81808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:15,787 (7efeadd81808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:15,787 (7efeadd81808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:15,787 (7efeadd81808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 150 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log new file mode 100644 index 000000000..6448c3c65 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log @@ -0,0 +1,83 @@ +2026-06-04 03:42:00,196 (7f883084d808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:42:00,197 (7f883084d808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:42:00,197 (7f883084d808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:42:00,197 (7f883084d808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (networking:262) - Loaded HTTP cookies +2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:42:00,198 (7f883084d808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:42:00,199 (7f882d427b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.localmedia' +2026-06-04 03:42:00,199 (7f883084d808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:42:00,199 (7f883084d808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:42:00,199 (7f883084d808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:42:00,242 (7f883084d808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.localmedia in namespace 'metadata' +2026-06-04 03:42:00,244 (7f883084d808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:42:00,246 (7f883084d808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:42:00,247 (7f883084d808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:42:00,250 (7f882d1edb38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:42:00,250 (7f883084d808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:42:00,250 (7f882d1edb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:42:00,251 (7f883084d808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:42:00,251 (7f882d1a7b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:42:00,251 (7f883084d808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:42:00,252 (7f883084d808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:42:00,263 (7f882d1a7b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:42:00,263 (7f882d1a7b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:42:00,263 (7f882d1edb38) : DEBUG (services:362) - Loaded services +2026-06-04 03:42:00,266 (7f882d1cab38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:42:00,331 (7f883084d808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:42:00,505 (7f883084d808) : DEBUG (messaging:69) - Exposing function ReadTags for remote access +2026-06-04 03:42:00,505 (7f883084d808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaMovie +2026-06-04 03:42:00,505 (7f883084d808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}] +2026-06-04 03:42:00,506 (7f883084d808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_' +2026-06-04 03:42:00,508 (7f883084d808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaTV +2026-06-04 03:42:00,508 (7f883084d808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}] +2026-06-04 03:42:00,509 (7f883084d808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_' +2026-06-04 03:42:00,511 (7f883084d808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaArtistLegacy +2026-06-04 03:42:00,511 (7f883084d808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] +2026-06-04 03:42:00,512 (7f883084d808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK' +2026-06-04 03:42:00,515 (7f883084d808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaArtistModern +2026-06-04 03:42:00,515 (7f883084d808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] +2026-06-04 03:42:00,515 (7f883084d808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK' +2026-06-04 03:42:00,519 (7f883084d808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaAlbum +2026-06-04 03:42:00,519 (7f883084d808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Albums)'}] +2026-06-04 03:42:00,520 (7f883084d808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_' +2026-06-04 03:42:00,523 (7f883084d808) : CRITICAL (sandbox:298) - Function named 'Start' couldn't be found in the current environment +2026-06-04 03:42:00,523 (7f883084d808) : INFO (core:611) - Started plug-in +2026-06-04 03:42:00,523 (7f883084d808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:42:00,523 (7f883084d808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:42:00,524 (7f883084d808) : INFO (socketinterface:184) - Socket server started on port 35691 +2026-06-04 03:42:00,524 (7f883084d808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:42:00,524 (7f883084d808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:42:00,524 (7f883084d808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:42:00,524 (7f883084d808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 154 bytes +2026-06-04 03:42:00,525 (7f882d0d9b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.agents.localmedia/prefs +2026-06-04 03:42:00,529 (7f882d0d9b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.agents.localmedia/prefs +2026-06-04 03:42:00,529 (7f882d0d9b38) : DEBUG (preferences:258) - Loaded preferences from DefaultPrefs.json +2026-06-04 03:42:00,529 (7f882d0d9b38) : INFO (preferences:161) - No user preferences file exists +2026-06-04 03:42:00,530 (7f882d0d9b38) : DEBUG (preferences:198) - Saved the user preferences +2026-06-04 03:42:00,530 (7f882d0d9b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 281 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.1 b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.1 new file mode 100644 index 000000000..963eb39ed --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.1 @@ -0,0 +1,78 @@ +2026-06-04 03:41:57,486 (7f238d0a8808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:57,486 (7f238d0a8808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:41:57,486 (7f238d0a8808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:57,487 (7f238d0a8808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:57,487 (7f238d0a8808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:57,487 (7f238d0a8808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:57,487 (7f238d0a8808) : DEBUG (networking:262) - Loaded HTTP cookies +2026-06-04 03:41:57,487 (7f238d0a8808) : DEBUG (caching:108) - No info file found, trashing the cache folder +2026-06-04 03:41:57,488 (7f238d0a8808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:57,488 (7f238d0a8808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:57,488 (7f238d0a8808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:57,488 (7f238d0a8808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:57,488 (7f238d0a8808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:57,488 (7f238d0a8808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:57,488 (7f2389c82b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.localmedia' +2026-06-04 03:41:57,488 (7f238d0a8808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:57,489 (7f238d0a8808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:57,531 (7f238d0a8808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.localmedia in namespace 'metadata' +2026-06-04 03:41:57,533 (7f238d0a8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:57,536 (7f238d0a8808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:57,537 (7f238d0a8808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:57,541 (7f2389a48b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:57,541 (7f238d0a8808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:57,541 (7f2389a48b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:57,541 (7f238d0a8808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:57,541 (7f2389a02b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:57,542 (7f238d0a8808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:57,542 (7f238d0a8808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:57,553 (7f2389a02b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:57,553 (7f2389a02b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:57,554 (7f2389a48b38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:57,556 (7f2389a25b38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:57,625 (7f238d0a8808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:57,807 (7f238d0a8808) : DEBUG (messaging:69) - Exposing function ReadTags for remote access +2026-06-04 03:41:57,807 (7f238d0a8808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaMovie +2026-06-04 03:41:57,807 (7f238d0a8808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}] +2026-06-04 03:41:57,808 (7f238d0a8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_' +2026-06-04 03:41:57,811 (7f238d0a8808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaTV +2026-06-04 03:41:57,812 (7f238d0a8808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}] +2026-06-04 03:41:57,812 (7f238d0a8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_' +2026-06-04 03:41:57,816 (7f238d0a8808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaArtistLegacy +2026-06-04 03:41:57,816 (7f238d0a8808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] +2026-06-04 03:41:57,816 (7f238d0a8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK' +2026-06-04 03:41:57,820 (7f238d0a8808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaArtistModern +2026-06-04 03:41:57,820 (7f238d0a8808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] +2026-06-04 03:41:57,820 (7f238d0a8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK' +2026-06-04 03:41:57,824 (7f238d0a8808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaAlbum +2026-06-04 03:41:57,824 (7f238d0a8808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Albums)'}] +2026-06-04 03:41:57,825 (7f238d0a8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_' +2026-06-04 03:41:57,829 (7f238d0a8808) : CRITICAL (sandbox:298) - Function named 'Start' couldn't be found in the current environment +2026-06-04 03:41:57,829 (7f238d0a8808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:57,829 (7f238d0a8808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:57,830 (7f238d0a8808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:57,830 (7f238d0a8808) : INFO (socketinterface:184) - Socket server started on port 34913 +2026-06-04 03:41:57,830 (7f238d0a8808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:57,830 (7f238d0a8808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:57,830 (7f238d0a8808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:57,831 (7f238d0a8808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 154 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.2 b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.2 new file mode 100644 index 000000000..1293dabba --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.2 @@ -0,0 +1,77 @@ +2026-06-04 03:41:16,068 (7fd844296808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:16,069 (7fd844296808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:41:16,069 (7fd844296808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:16,069 (7fd844296808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:16,070 (7fd844296808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:16,071 (7fd840e70b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.localmedia' +2026-06-04 03:41:16,071 (7fd844296808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:16,072 (7fd844296808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:16,072 (7fd844296808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:16,115 (7fd844296808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.localmedia in namespace 'metadata' +2026-06-04 03:41:16,117 (7fd844296808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:16,119 (7fd844296808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:16,120 (7fd844296808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:16,124 (7fd840c8eb38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:16,124 (7fd844296808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:16,124 (7fd840c8eb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:16,124 (7fd844296808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:16,125 (7fd840c48b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:16,125 (7fd844296808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:16,125 (7fd844296808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:16,136 (7fd840c48b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:16,136 (7fd840c48b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:16,136 (7fd840c8eb38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:16,137 (7fd840c6bb38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:16,206 (7fd844296808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:16,389 (7fd844296808) : DEBUG (messaging:69) - Exposing function ReadTags for remote access +2026-06-04 03:41:16,389 (7fd844296808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaMovie +2026-06-04 03:41:16,389 (7fd844296808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}] +2026-06-04 03:41:16,390 (7fd844296808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_' +2026-06-04 03:41:16,392 (7fd844296808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaTV +2026-06-04 03:41:16,393 (7fd844296808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}] +2026-06-04 03:41:16,393 (7fd844296808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_' +2026-06-04 03:41:16,397 (7fd844296808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaArtistLegacy +2026-06-04 03:41:16,397 (7fd844296808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] +2026-06-04 03:41:16,397 (7fd844296808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK' +2026-06-04 03:41:16,401 (7fd844296808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaArtistModern +2026-06-04 03:41:16,401 (7fd844296808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] +2026-06-04 03:41:16,402 (7fd844296808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK' +2026-06-04 03:41:16,406 (7fd844296808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaAlbum +2026-06-04 03:41:16,406 (7fd844296808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Albums)'}] +2026-06-04 03:41:16,407 (7fd844296808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_' +2026-06-04 03:41:16,410 (7fd844296808) : CRITICAL (sandbox:298) - Function named 'Start' couldn't be found in the current environment +2026-06-04 03:41:16,410 (7fd844296808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:16,410 (7fd844296808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:16,410 (7fd844296808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:16,411 (7fd844296808) : INFO (socketinterface:184) - Socket server started on port 40699 +2026-06-04 03:41:16,411 (7fd844296808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:16,411 (7fd844296808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:16,411 (7fd844296808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:16,411 (7fd844296808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 154 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lyricfind.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lyricfind.log new file mode 100644 index 000000000..f90e6c2ce --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lyricfind.log @@ -0,0 +1,63 @@ +2026-06-04 03:41:16,108 (7f9749061808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:16,108 (7f9749061808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:41:16,108 (7f9749061808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:16,109 (7f9749061808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:16,109 (7f9749061808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:16,109 (7f9749061808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:16,109 (7f9749061808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:16,109 (7f9749061808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:16,109 (7f9749061808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:16,110 (7f9749061808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:16,110 (7f9749061808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:16,110 (7f9749061808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:16,110 (7f9745c3bb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.lyricfind' +2026-06-04 03:41:16,110 (7f9749061808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:16,110 (7f9749061808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:16,111 (7f9749061808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:16,157 (7f9749061808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.lyricfind in namespace 'metadata' +2026-06-04 03:41:16,159 (7f9749061808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:16,161 (7f9749061808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:16,162 (7f9749061808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:16,165 (7f9745a03b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:16,165 (7f9749061808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:16,166 (7f9745a03b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:16,166 (7f9749061808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:16,167 (7f97459bdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:16,167 (7f9749061808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:16,167 (7f9749061808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:16,170 (7f97459bdb38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:16,170 (7f9745a03b38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:16,170 (7f97459bdb38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:16,172 (7f97459e0b38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:16,183 (7f9749061808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:16,183 (7f9749061808) : DEBUG (agentkit:1132) - Creating new agent class called LyricFindAlbumAgent +2026-06-04 03:41:16,184 (7f9749061808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': False, 'name': 'LyricFind'}] +2026-06-04 03:41:16,184 (7f9749061808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__' +2026-06-04 03:41:16,186 (7f9749061808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:16,187 (7f9749061808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:16,187 (7f9749061808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:16,187 (7f9749061808) : INFO (socketinterface:184) - Socket server started on port 35737 +2026-06-04 03:41:16,187 (7f9749061808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:16,187 (7f9749061808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:16,188 (7f9749061808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:16,188 (7f9749061808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 153 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.movieposterdb.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.movieposterdb.log new file mode 100644 index 000000000..13a8fdd28 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.movieposterdb.log @@ -0,0 +1,63 @@ +2026-06-04 03:41:16,149 (7f1309066808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:16,150 (7f1309066808) : DEBUG (core:361) - Using the standard policy +2026-06-04 03:41:16,150 (7f1309066808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:16,151 (7f1309066808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:16,152 (7f1309066808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:16,152 (7f1309066808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:16,152 (7f1305c40b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.movieposterdb' +2026-06-04 03:41:16,152 (7f1309066808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:16,152 (7f1309066808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:16,196 (7f1309066808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.movieposterdb in namespace 'metadata' +2026-06-04 03:41:16,197 (7f1309066808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:16,199 (7f1309066808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:16,200 (7f1309066808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:16,203 (7f1305a5eb38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:16,204 (7f1309066808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:16,204 (7f1305a5eb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:16,204 (7f1309066808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:16,204 (7f1305a18b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:16,205 (7f1309066808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:16,205 (7f1309066808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:16,207 (7f1305a18b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:16,207 (7f1305a18b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:16,208 (7f1305a5eb38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:16,209 (7f1305a3bb38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:16,214 (7f1309066808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:16,214 (7f1309066808) : DEBUG (agentkit:1132) - Creating new agent class called CineMaterialAgent +2026-06-04 03:41:16,214 (7f1309066808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': False, 'name': 'CineMaterial'}] +2026-06-04 03:41:16,214 (7f1309066808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_' +2026-06-04 03:41:16,217 (7f1309066808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:16,217 (7f1309066808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:16,217 (7f1309066808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:16,217 (7f1309066808) : INFO (socketinterface:184) - Socket server started on port 43189 +2026-06-04 03:41:16,217 (7f1309066808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:16,217 (7f1309066808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:16,218 (7f1309066808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:16,218 (7f1309066808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 157 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.none.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.none.log new file mode 100644 index 000000000..cd84a44ed --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.none.log @@ -0,0 +1,75 @@ +2026-06-04 03:41:16,577 (7f1ccfb21808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:16,577 (7f1ccfb21808) : DEBUG (core:361) - Using the standard policy +2026-06-04 03:41:16,577 (7f1ccfb21808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:16,578 (7f1ccfb21808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:16,578 (7f1ccfb21808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:16,578 (7f1ccfb21808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:16,578 (7f1ccfb21808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:16,578 (7f1ccfb21808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:16,579 (7f1ccfb21808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:16,579 (7f1ccfb21808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:16,579 (7f1ccfb21808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:16,579 (7f1ccfb21808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:16,579 (7f1ccfb21808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:16,579 (7f1ccc6fbb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.none' +2026-06-04 03:41:16,579 (7f1ccfb21808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:16,580 (7f1ccfb21808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:16,623 (7f1ccfb21808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.none in namespace 'metadata' +2026-06-04 03:41:16,625 (7f1ccfb21808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:16,629 (7f1ccfb21808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:16,630 (7f1ccfb21808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:16,633 (7f1ccfb21808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:16,633 (7f1ccc511b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:16,634 (7f1ccfb21808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:16,634 (7f1ccc511b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:16,634 (7f1ccc4cbb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:16,635 (7f1ccfb21808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:16,635 (7f1ccfb21808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:16,637 (7f1ccc4cbb38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:16,638 (7f1ccc4cbb38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:16,638 (7f1ccc511b38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:16,640 (7f1ccc4eeb38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:16,650 (7f1ccfb21808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:16,650 (7f1ccfb21808) : DEBUG (agentkit:1132) - Creating new agent class called PlexPersonalMediaAgentMovies +2026-06-04 03:41:16,650 (7f1ccfb21808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media'}] +2026-06-04 03:41:16,650 (7f1ccfb21808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__' +2026-06-04 03:41:16,653 (7f1ccfb21808) : DEBUG (agentkit:1132) - Creating new agent class called PlexPersonalMediaAgentTVShows +2026-06-04 03:41:16,653 (7f1ccfb21808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Shows'}] +2026-06-04 03:41:16,654 (7f1ccfb21808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK' +2026-06-04 03:41:16,657 (7f1ccfb21808) : DEBUG (agentkit:1132) - Creating new agent class called PlexPersonalMediaAgentArtists +2026-06-04 03:41:16,657 (7f1ccfb21808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Shows'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Artists'}] +2026-06-04 03:41:16,657 (7f1ccfb21808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_' +2026-06-04 03:41:16,660 (7f1ccfb21808) : DEBUG (agentkit:1132) - Creating new agent class called PlexPersonalMediaAgentAlbums +2026-06-04 03:41:16,660 (7f1ccfb21808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Shows'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Artists'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Albums'}] +2026-06-04 03:41:16,661 (7f1ccfb21808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK' +2026-06-04 03:41:16,664 (7f1ccfb21808) : DEBUG (agentkit:1132) - Creating new agent class called PlexPersonalMediaAgentPhotos +2026-06-04 03:41:16,665 (7f1ccfb21808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Shows'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Artists'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Albums'}, {'media_types': ['Photo'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'ca', 'cs', 'cy', 'da', 'de', 'el', 'es', 'et', 'fa', 'fi', 'fr', 'he', 'hi', 'hr', 'ht', 'hu', 'id', 'it', 'ja', 'ko', 'lt', 'lv', 'ms', 'mt', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sk', 'sv', 'sl', 'sr', 'th', 'tr', 'uk', 'ur', 'vi', 'zh', 'xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Photos'}] +2026-06-04 03:41:16,665 (7f1ccfb21808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK' +2026-06-04 03:41:16,668 (7f1ccfb21808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:16,668 (7f1ccfb21808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:16,669 (7f1ccfb21808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:16,669 (7f1ccfb21808) : INFO (socketinterface:184) - Socket server started on port 46761 +2026-06-04 03:41:16,669 (7f1ccfb21808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:16,669 (7f1ccfb21808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:16,669 (7f1ccfb21808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:16,670 (7f1ccfb21808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 148 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.plexthememusic.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.plexthememusic.log new file mode 100644 index 000000000..ecd8ac504 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.plexthememusic.log @@ -0,0 +1,63 @@ +2026-06-04 03:41:17,392 (7fd02677a808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:17,392 (7fd02677a808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:41:17,392 (7fd02677a808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:17,393 (7fd02677a808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:17,393 (7fd02677a808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:17,394 (7fd02677a808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:17,395 (7fd023354b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.plexthememusic' +2026-06-04 03:41:17,395 (7fd02677a808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:17,395 (7fd02677a808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:17,437 (7fd02677a808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.plexthememusic in namespace 'metadata' +2026-06-04 03:41:17,439 (7fd02677a808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:17,441 (7fd02677a808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:17,442 (7fd02677a808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:17,446 (7fd023172b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:17,446 (7fd02677a808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:17,446 (7fd023172b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:17,447 (7fd02677a808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:17,447 (7fd02312cb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:17,447 (7fd02677a808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:17,448 (7fd02677a808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:17,450 (7fd02312cb38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:17,450 (7fd02312cb38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:17,451 (7fd023172b38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:17,453 (7fd02314fb38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:17,455 (7fd02677a808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:17,456 (7fd02677a808) : DEBUG (agentkit:1132) - Creating new agent class called PlexThemeMusicAgent +2026-06-04 03:41:17,456 (7fd02677a808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.thetvdbdvdorder', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': False, 'name': 'Plex Theme Music'}] +2026-06-04 03:41:17,456 (7fd02677a808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_' +2026-06-04 03:41:37,057 (7fd02677a808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:37,057 (7fd02677a808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:37,057 (7fd02677a808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:37,057 (7fd02677a808) : INFO (socketinterface:184) - Socket server started on port 39625 +2026-06-04 03:41:37,058 (7fd02677a808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:37,058 (7fd02677a808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:37,058 (7fd02677a808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:37,058 (7fd02677a808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 158 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.themoviedb.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.themoviedb.log new file mode 100644 index 000000000..6385ebd70 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.themoviedb.log @@ -0,0 +1,71 @@ +2026-06-04 03:41:17,030 (7f2157dbd808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:17,030 (7f2157dbd808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:41:17,031 (7f2157dbd808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:17,031 (7f2157dbd808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:17,031 (7f2157dbd808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:17,031 (7f2157dbd808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:17,032 (7f2157dbd808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:17,032 (7f2157dbd808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:17,032 (7f2157dbd808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:17,032 (7f2157dbd808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:17,032 (7f2157dbd808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:17,032 (7f2157dbd808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:17,032 (7f2157dbd808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:17,033 (7f2154997b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.themoviedb' +2026-06-04 03:41:17,033 (7f2157dbd808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:17,033 (7f2157dbd808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:17,076 (7f2157dbd808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.themoviedb in namespace 'metadata' +2026-06-04 03:41:17,078 (7f2157dbd808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:17,080 (7f2157dbd808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:17,081 (7f2157dbd808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:17,084 (7f215475fb38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:17,084 (7f2157dbd808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:17,085 (7f215475fb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:17,085 (7f2157dbd808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:17,085 (7f2154719b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:17,086 (7f2157dbd808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:17,086 (7f2157dbd808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:17,099 (7f2154719b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:17,099 (7f2154719b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:17,099 (7f215475fb38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:17,101 (7f215473cb38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:17,204 (7f2157dbd808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:17,205 (7f2157dbd808) : DEBUG (messaging:69) - Exposing function GetImdbId for remote access +2026-06-04 03:41:17,205 (7f2157dbd808) : DEBUG (messaging:69) - Exposing function GetTvdbId for remote access +2026-06-04 03:41:17,205 (7f2157dbd808) : DEBUG (messaging:69) - Exposing function GetTvRageId for remote access +2026-06-04 03:41:17,205 (7f2157dbd808) : DEBUG (messaging:69) - Exposing function GetTMDbSearchResults for remote access +2026-06-04 03:41:17,205 (7f2157dbd808) : DEBUG (messaging:69) - Exposing function GetTMDbMetadata for remote access +2026-06-04 03:41:17,205 (7f2157dbd808) : DEBUG (agentkit:1132) - Creating new agent class called TMDbAgent +2026-06-04 03:41:17,206 (7f2157dbd808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': ['com.plexapp.agents.localmedia'], 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'hu', 'it', 'lv', 'lt', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'th', 'tr', 'vi', 'zh', 'ko'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'The Movie Database'}] +2026-06-04 03:41:17,206 (7f2157dbd808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_' +2026-06-04 03:41:37,054 (7f2157dbd808) : DEBUG (agentkit:1132) - Creating new agent class called TMDbAgent +2026-06-04 03:41:37,055 (7f2157dbd808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': ['com.plexapp.agents.localmedia'], 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'hu', 'it', 'lv', 'lt', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'th', 'tr', 'vi', 'zh', 'ko'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'The Movie Database'}, {'media_types': ['TV_Show'], 'accepts_from': ['com.plexapp.agents.localmedia', 'com.plexapp.agents.thetvdb'], 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb'], 'languages': ['en', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'hu', 'it', 'lv', 'lt', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'th', 'tr', 'vi', 'zh', 'ko'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'The Movie Database'}] +2026-06-04 03:41:37,055 (7f2157dbd808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK' +2026-06-04 03:41:37,062 (7f2157dbd808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:37,062 (7f2157dbd808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:37,062 (7f2157dbd808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:37,063 (7f2157dbd808) : INFO (socketinterface:184) - Socket server started on port 46579 +2026-06-04 03:41:37,063 (7f2157dbd808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:37,063 (7f2157dbd808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:37,063 (7f2157dbd808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:37,063 (7f2157dbd808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 154 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.thetvdb.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.thetvdb.log new file mode 100644 index 000000000..0b57c0e91 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.thetvdb.log @@ -0,0 +1,81 @@ +2026-06-04 03:41:37,425 (7f16c8431808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:37,425 (7f16c8431808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:41:37,425 (7f16c8431808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:37,426 (7f16c8431808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:37,426 (7f16c8431808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:37,426 (7f16c8431808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:37,426 (7f16c8431808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:37,426 (7f16c8431808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:37,427 (7f16c8431808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:37,427 (7f16c8431808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:37,427 (7f16c8431808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:37,427 (7f16c8431808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:37,427 (7f16c8431808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:37,427 (7f16c8431808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:37,427 (7f16c4ff7b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.thetvdb' +2026-06-04 03:41:37,428 (7f16c8431808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:37,473 (7f16c8431808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.thetvdb in namespace 'metadata' +2026-06-04 03:41:37,475 (7f16c8431808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:37,477 (7f16c8431808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:37,478 (7f16c8431808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:37,481 (7f16c4e2ab38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:37,481 (7f16c8431808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:37,482 (7f16c4e2ab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:37,482 (7f16c8431808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:37,482 (7f16c4de4b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:37,483 (7f16c8431808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:37,483 (7f16c8431808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:37,498 (7f16c4de4b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:37,498 (7f16c4de4b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:37,498 (7f16c4e2ab38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:37,500 (7f16c4e07b38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:37,621 (7f16c8431808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:37,621 (7f16c8431808) : DEBUG (agentkit:1132) - Creating new agent class called TVDBAgent +2026-06-04 03:41:37,622 (7f16c8431808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'fr', 'zh', 'sv', 'no', 'da', 'fi', 'nl', 'de', 'it', 'es', 'pl', 'hu', 'el', 'tr', 'ru', 'he', 'ja', 'pt', 'cs', 'ko', 'sl', 'hr'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'TheTVDB'}] +2026-06-04 03:41:37,622 (7f16c8431808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__' +2026-06-04 03:41:57,122 (7f16c8431808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:57,122 (7f16c8431808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:57,122 (7f16c8431808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:57,122 (7f16c8431808) : INFO (socketinterface:184) - Socket server started on port 46809 +2026-06-04 03:41:57,122 (7f16c8431808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:57,122 (7f16c8431808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:57,123 (7f16c8431808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:57,123 (7f16c8431808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 151 bytes +2026-06-04 03:41:57,126 (7f16c42dcb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.agents.thetvdb +2026-06-04 03:41:57,126 (7f16c42b5b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.agents.thetvdb +2026-06-04 03:41:57,131 (7f16c42dcb38) : CRITICAL (runtime:493) - Exception matching route for path "/" (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route + raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) +FrameworkException: No route found matching '/' + +2026-06-04 03:41:57,131 (7f16c42dcb38) : ERROR (runtime:846) - Could not find route matching /:/plugins/com.plexapp.agents.thetvdb +2026-06-04 03:41:57,131 (7f16c42b5b38) : CRITICAL (runtime:493) - Exception matching route for path "/" (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route + raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) +FrameworkException: No route found matching '/' + +2026-06-04 03:41:57,131 (7f16c42b5b38) : ERROR (runtime:846) - Could not find route matching /:/plugins/com.plexapp.agents.thetvdb +2026-06-04 03:41:57,132 (7f16c42dcb38) : DEBUG (runtime:88) - Sending packed state data (107 bytes) +2026-06-04 03:41:57,132 (7f16c42b5b38) : DEBUG (runtime:88) - Sending packed state data (107 bytes) +2026-06-04 03:41:57,132 (7f16c42dcb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:57,132 (7f16c42b5b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.system.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.system.log new file mode 100644 index 000000000..b181caf92 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.system.log @@ -0,0 +1,775 @@ +2026-06-04 03:41:14,898 (7f8fe32bc808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:14,898 (7f8fe32bc808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:41:14,898 (7f8fe32bc808) : DEBUG (core:365) - Extending whitelist: ['cgi', 'tempfile'] +2026-06-04 03:41:14,898 (7f8fe32bc808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:14,899 (7f8fe32bc808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:14,899 (7f8fe32bc808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:14,899 (7f8fe32bc808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:14,900 (7f8fe32bc808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:14,900 (7f8fe32bc808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:14,900 (7f8fe32bc808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:14,900 (7f8fe32bc808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:14,900 (7f8fe32bc808) : WARNING (data:179) - Error decoding with simplejson, using demjson instead (this will cause a performance hit) - Expecting property name enclosed in double quotes: line 26 column 1 (char 1078) +2026-06-04 03:41:14,901 (7f8fe32bc808) : DEBUG (localization:427) - Loaded en strings +2026-06-04 03:41:14,901 (7f8fe32bc808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:14,901 (7f8fe32bc808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:14,901 (7f8fe32bc808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:14,901 (7f8fe32bc808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:14,901 (7f8fe32bc808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:14,942 (7f8fe32bc808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.system in namespace 'metadata' +2026-06-04 03:41:14,946 (7f8fdfcd0b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:14,946 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:14,947 (7f8fdfcd0b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:14,947 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:14,948 (7f8fdfc8ab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:14,948 (7f8fe32bc808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:14,949 (7f8fe32bc808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:14,949 (7f8fdfc8ab38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400' +2026-06-04 03:41:14,949 (7f8fdfcd0b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:14,949 (7f8fdfc8ab38) : WARNING (core:541) - Unable to retrieve the machine identifier or server version. +2026-06-04 03:41:14,949 (7f8fdfcd0b38) : ERROR (services:272) - Unable to load services from system. Loading from the current bundle only. +2026-06-04 03:41:14,950 (7f8fdfcd0b38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:14,951 (7f8fdfcadb38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:14,956 (7f8fe32bc808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:14,956 (7f8fe32bc808) : DEBUG (runtime:640) - Adding a prefix handler for 'System' ('/system') +2026-06-04 03:41:15,166 (7f8fe32bc808) : INFO (__init__:35) - Starting System 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:15,166 (7f8fe32bc808) : DEBUG (runtime:640) - Adding a prefix handler for 'Player' ('/player') +2026-06-04 03:41:15,167 (7f8fe32bc808) : INFO (datakit:118) - No default dictionary file +2026-06-04 03:41:15,167 (7f8fe32bc808) : DEBUG (agentservice:52) - Starting the agent service +2026-06-04 03:41:15,207 (7f8fe32bc808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.system in namespace 'metadata' +2026-06-04 03:41:15,209 (7f8fe32bc808) : DEBUG (bundleservice:65) - Starting the bundle service +2026-06-04 03:41:15,210 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:15,210 (7f8fe32bc808) : DEBUG (playerservice:12) - Starting the player service +2026-06-04 03:41:15,210 (7f8fe32bc808) : DEBUG (flagservice:13) - Starting the media flag service +2026-06-04 03:41:15,210 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:15,211 (7f8fdfa9db38) : INFO (agentservice:167) - Agents in com.plexapp.agents.fanarttv not in info dictionary - pinging! +2026-06-04 03:41:15,211 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,211 (7f8fe32bc808) : DEBUG (peerservice:141) - Starting the peer service +2026-06-04 03:41:15,211 (7f8fdfa9db38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.fanarttv' +2026-06-04 03:41:15,212 (7f8fdfa7ab38) : DEBUG (peerservice:164) - Fetching the current list of servers +2026-06-04 03:41:15,212 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'refresh_servers' +2026-06-04 03:41:15,212 (7f8fdfa9db38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.fanarttv' +2026-06-04 03:41:15,213 (7f8fdfa9db38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,213 (7f8fe32bc808) : DEBUG (runtime:1150) - Scheduled a timed thread named 'refresh_servers' +2026-06-04 03:41:15,213 (7f8fdfa7ab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/servers' +2026-06-04 03:41:15,213 (7f8fe32bc808) : DEBUG (streamservice:18) - Starting the stream service +2026-06-04 03:41:15,214 (7f8fe32bc808) : CRITICAL (runtime:709) - Private handlers are no longer supported; couldn't register > +2026-06-04 03:41:15,214 (7f8fe32bc808) : DEBUG (runtime:1150) - Scheduled a timed thread named 'invalidation_timer' +2026-06-04 03:41:15,215 (7f8fdfa7ab38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/servers' +2026-06-04 03:41:15,215 (7f8fe32bc808) : DEBUG (proxyservice:12) - Starting the proxy service +2026-06-04 03:41:15,215 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,215 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in org.musicbrainz.agents.music not in info dictionary - pinging! +2026-06-04 03:41:15,216 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,216 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/org.musicbrainz.agents.music' +2026-06-04 03:41:15,218 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,218 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/org.musicbrainz.agents.music' +2026-06-04 03:41:15,218 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,218 (7f8fdf4b9b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.lyricfind not in info dictionary - pinging! +2026-06-04 03:41:15,219 (7f8fdf4b9b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.lyricfind' +2026-06-04 03:41:15,219 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,220 (7f8fdfa7ab38) : CRITICAL (runtime:1128) - Exception in thread named 'refresh_servers' (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1126, in _start_thread + f(*args, **kwargs) + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/System.bundle/Contents/Code/peerservice.py", line 169, in refresh_servers + servers_el = self.get_servers_el() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/System.bundle/Contents/Code/peerservice.py", line 165, in get_servers_el + return XML.ElementFromURL('http://127.0.0.1:32400/servers', cacheTime = 0) + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/api/parsekit.py", line 344, in ElementFromURL + method=method, + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/api/networkkit.py", line 67, in _http_request + req = self._core.networking.http_request(url, *args, **kwargs) + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 352, in http_request + return HTTPRequest(self._core, url, data, h, url_cache, encoding, errors, timeout, immediate, sleep, opener, follow_redirects, method) + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 119, in __init__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 503: Service Unavailable + +2026-06-04 03:41:15,220 (7f8fdf4b9b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.lyricfind' +2026-06-04 03:41:15,220 (7f8fdf4b9b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,221 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,221 (7f8fdf496b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:15,221 (7f8fdf4b9b38) : INFO (agentservice:129) - Agent info: {} +2026-06-04 03:41:15,221 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'update_attribution_flags_inner' +2026-06-04 03:41:15,222 (7f8fdf496b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,222 (7f8fe32bc808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:15,223 (7f8fdf4b9b38) : INFO (datakit:131) - Saved the dictionary file +2026-06-04 03:41:15,223 (7f8fe32bc808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:15,224 (7f8fdf496b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,224 (7f8fdf496b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,224 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.themoviedb not in info dictionary - pinging! +2026-06-04 03:41:15,224 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:15,225 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,225 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.themoviedb' +2026-06-04 03:41:15,225 (7f8fe32bc808) : INFO (socketinterface:184) - Socket server started on port 33755 +2026-06-04 03:41:15,225 (7f8fe32bc808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:15,225 (7f8fe32bc808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:15,226 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.themoviedb' +2026-06-04 03:41:15,226 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,226 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,227 (7f8fdfa7ab38) : INFO (agentservice:167) - Agents in com.plexapp.agents.localmedia not in info dictionary - pinging! +2026-06-04 03:41:15,227 (7f8fdfa7ab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.localmedia' +2026-06-04 03:41:15,228 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,228 (7f8fdfa7ab38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.localmedia' +2026-06-04 03:41:15,228 (7f8fdfa7ab38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,229 (7f8fdf496b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.none not in info dictionary - pinging! +2026-06-04 03:41:15,229 (7f8fdf496b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.none' +2026-06-04 03:41:15,229 (7f8fe32bc808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:15,230 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,230 (7f8fdf496b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.none' +2026-06-04 03:41:15,230 (7f8fdf496b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,231 (7f8fe32bc808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 486 bytes +2026-06-04 03:41:15,231 (7f8fdf381b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.plexthememusic not in info dictionary - pinging! +2026-06-04 03:41:15,231 (7f8fdf381b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.plexthememusic' +2026-06-04 03:41:15,231 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,232 (7f8fdf381b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.plexthememusic' +2026-06-04 03:41:15,233 (7f8fdf30ab38) : DEBUG (runtime:717) - Handling request GET /system/agents +2026-06-04 03:41:15,233 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,233 (7f8fdf381b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,233 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.htbackdrops not in info dictionary - pinging! +2026-06-04 03:41:15,234 (7f8fdfae3b38) : INFO (bundleservice:131) - Found duplicate identifier at /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/TheTVDBv4.bundle for bundled plugin (com.plexapp.agents.thetvdb), ignoring duplicate plugin. +2026-06-04 03:41:15,234 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.htbackdrops' +2026-06-04 03:41:15,235 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,238 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'remove_unavailable_agents' +2026-06-04 03:41:15,238 (7f8fdfae3b38) : DEBUG (bundleservice:81) - Started the bundle service +2026-06-04 03:41:15,239 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.htbackdrops' +2026-06-04 03:41:15,239 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,240 (7f8fdfa7ab38) : INFO (agentservice:167) - Agents in com.plexapp.agents.movieposterdb not in info dictionary - pinging! +2026-06-04 03:41:15,240 (7f8fdf097b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,241 (7f8fdfa7ab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.movieposterdb' +2026-06-04 03:41:15,242 (7f8fdfa7ab38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.movieposterdb' +2026-06-04 03:41:15,242 (7f8fdfa7ab38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,243 (7f8fdf496b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.lastfm not in info dictionary - pinging! +2026-06-04 03:41:15,243 (7f8fdf496b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.lastfm' +2026-06-04 03:41:15,244 (7f8fdf30ab38) : DEBUG (runtime:814) - Found route matching /system/agents +2026-06-04 03:41:15,244 (7f8fdf496b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.lastfm' +2026-06-04 03:41:15,245 (7f8fdf496b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,245 (7f8fdf0bab38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:15,245 (7f8fdf0bab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,246 (7f8fdf30ab38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,246 (7f8fdf0bab38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,247 (7f8fdf0bab38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,247 (7f8fdfac0b38) : DEBUG (flagservice:46) - Started the media flag service +2026-06-04 03:41:15,247 (7f8fdf381b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.imdb not in info dictionary - pinging! +2026-06-04 03:41:15,247 (7f8fdf381b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.imdb' +2026-06-04 03:41:15,248 (7f8fdf381b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.imdb' +2026-06-04 03:41:15,248 (7f8fdf381b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,248 (7f8fdfae3b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:15,248 (7f8fdfae3b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,249 (7f8fdfae3b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,249 (7f8fdfae3b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,249 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:15,249 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,250 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,250 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,250 (7f8fdf30ab38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 130 bytes +2026-06-04 03:41:15,613 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.lastfm +2026-06-04 03:41:15,613 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.fanarttv +2026-06-04 03:41:15,618 (7f8fdf496b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.htbackdrops +2026-06-04 03:41:15,622 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.lastfm +2026-06-04 03:41:15,622 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.fanarttv +2026-06-04 03:41:15,622 (7f8fdf496b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.htbackdrops +2026-06-04 03:41:15,622 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,623 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,623 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:15,623 (7f8fdf496b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,623 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:15,624 (7f8fdf496b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:15,657 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:15,661 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:15,662 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:15,662 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:15,663 (7f8fdf496b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:15,663 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://resources-cdn.plexapp.com/hashes.json' +2026-06-04 03:41:15,664 (7f8fdf496b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:15,678 (7f8fdf9fdb38) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1291, in get_resource_hashes + json = self._core.networking.http_request("http://resources-cdn.plexapp.com/hashes.json", timeout=5).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 429, in open + response = self._open(req, data) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 447, in _open + '_open', req) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 1228, in http_open + return self.do_open(httplib.HTTPConnection, req) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 1198, in do_open + raise URLError(err) +URLError: + +2026-06-04 03:41:15,678 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,679 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:15,679 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,679 (7f8fdf496b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,680 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:15,680 (7f8fdf496b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:15,686 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:15,687 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:15,687 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:15,688 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,688 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:15,688 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:15,688 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:15,689 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:15,689 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,689 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:15,689 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:15,690 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:15,690 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:15,690 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,691 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:15,708 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK +2026-06-04 03:41:15,708 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:15,709 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK +2026-06-04 03:41:15,709 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.htbackdrops: [{'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['ab', 'aa', 'af', 'ak', 'sq', 'am', 'ar', 'an', 'hy', 'as', 'av', 'ae', 'ay', 'az', 'bm', 'ba', 'eu', 'be', 'bn', 'bh', 'bi', 'bs', 'pb', 'br', 'bg', 'my', 'ca', 'ch', 'ce', 'ny', 'zh', 'cu', 'cv', 'kw', 'co', 'cr', 'hr', 'cs', 'da', 'dv', 'nl', 'dz', 'en', 'eo', 'et', 'ee', 'fo', 'fj', 'fi', 'fr', 'fy', 'ff', 'gd', 'gl', 'lg', 'ka', 'de', 'el', 'gn', 'gu', 'ht', 'ha', 'he', 'hz', 'hi', 'ho', 'hu', 'is', 'io', 'ig', 'id', 'ia', 'ie', 'iu', 'ik', 'ga', 'it', 'ja', 'jv', 'kl', 'kn', 'kr', 'ks', 'kk', 'km', 'ki', 'rw', 'ky', 'kv', 'kg', 'ko', 'kj', 'ku', 'lo', 'la', 'lv', 'li', 'ln', 'lt', 'lu', 'lb', 'mk', 'mg', 'ms', 'ml', 'mt', 'gv', 'mi', 'mr', 'mh', 'mo', 'mn', 'na', 'nv', 'ng', 'ne', 'xn', 'nd', 'no', 'nb', 'nn', 'oc', 'oj', 'or', 'om', 'os', 'pi', 'pa', 'fa', 'pl', 'pt', 'ps', 'qu', 'rm', 'ro', 'rn', 'ru', 'se', 'sm', 'sg', 'sa', 'sc', 'sr', 'sn', 'ii', 'sd', 'si', 'sk', 'sl', 'so', 'st', 'nr', 'es', 'su', 'sw', 'ss', 'sv', 'tl', 'ty', 'tg', 'ta', 'tt', 'te', 'th', 'bo', 'ti', 'to', 'ts', 'tn', 'tr', 'tk', 'tw', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'cy', 'wo', 'xh', 'yi', 'yo', 'za', 'zu'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Home Theater Backdrops'}] +2026-06-04 03:41:15,710 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,710 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:15,713 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents +2026-06-04 03:41:15,713 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents +2026-06-04 03:41:15,714 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,714 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:15,714 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,715 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,715 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,716 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 246 bytes +2026-06-04 03:41:15,729 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +2026-06-04 03:41:15,730 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:15,730 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +2026-06-04 03:41:15,730 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.fanarttv: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}] +2026-06-04 03:41:15,731 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,731 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:15,733 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +2026-06-04 03:41:15,733 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:15,734 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +2026-06-04 03:41:15,734 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.fanarttv: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}] +2026-06-04 03:41:15,734 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,734 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:15,737 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK +2026-06-04 03:41:15,737 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:15,737 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK +2026-06-04 03:41:15,737 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.fanarttv: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}] +2026-06-04 03:41:15,738 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,738 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:15,740 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK +2026-06-04 03:41:15,741 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:15,741 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK +2026-06-04 03:41:15,741 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.fanarttv: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['Album'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}] +2026-06-04 03:41:15,742 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,742 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:15,746 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents +2026-06-04 03:41:15,746 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents +2026-06-04 03:41:15,746 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,747 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:15,747 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,748 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,748 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,748 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 342 bytes +2026-06-04 03:41:15,780 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ +2026-06-04 03:41:15,780 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:15,781 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ +2026-06-04 03:41:15,781 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.lastfm: [{'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'sv', 'fr', 'es', 'de', 'pl', 'it', 'pt', 'ja', 'tr', 'ru', 'zh'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Last.fm'}] +2026-06-04 03:41:15,781 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,781 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:15,784 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ +2026-06-04 03:41:15,784 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:15,784 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ +2026-06-04 03:41:15,785 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.lastfm: [{'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'sv', 'fr', 'es', 'de', 'pl', 'it', 'pt', 'ja', 'tr', 'ru', 'zh'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Last.fm'}, {'media_types': ['Album'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'sv', 'fr', 'es', 'de', 'pl', 'it', 'pt', 'ja', 'tr', 'ru', 'zh'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Last.fm'}] +2026-06-04 03:41:15,785 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:15,785 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:15,788 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents +2026-06-04 03:41:15,789 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents +2026-06-04 03:41:15,789 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:15,789 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:15,790 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,790 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:15,790 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:15,791 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 1242 bytes +2026-06-04 03:41:16,072 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.localmedia +2026-06-04 03:41:16,072 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.localmedia +2026-06-04 03:41:16,073 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,073 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:16,112 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.lyricfind +2026-06-04 03:41:16,113 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.lyricfind +2026-06-04 03:41:16,113 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,113 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:16,118 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:16,118 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:16,119 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,119 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:16,125 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:16,126 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,126 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:16,126 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,126 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:16,153 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.movieposterdb +2026-06-04 03:41:16,154 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.movieposterdb +2026-06-04 03:41:16,154 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,154 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:16,160 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:16,160 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:16,161 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,161 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:16,167 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:16,167 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,168 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:16,168 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,168 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:16,184 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ +2026-06-04 03:41:16,185 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,185 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ +2026-06-04 03:41:16,185 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.lyricfind: [{'media_types': ['Album'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'LyricFind'}] +2026-06-04 03:41:16,186 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,186 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,189 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents +2026-06-04 03:41:16,189 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents +2026-06-04 03:41:16,190 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:16,190 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:16,193 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:16,194 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:16,194 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:16,195 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 1339 bytes +2026-06-04 03:41:16,198 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:16,199 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:16,199 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,199 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:16,205 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:16,205 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,206 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:16,206 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,206 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:16,215 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ +2026-06-04 03:41:16,215 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,216 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ +2026-06-04 03:41:16,216 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.movieposterdb: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'CineMaterial'}] +2026-06-04 03:41:16,216 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,216 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,219 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents +2026-06-04 03:41:16,219 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents +2026-06-04 03:41:16,220 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:16,220 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:16,220 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:16,221 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:16,221 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:16,221 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 1440 bytes +2026-06-04 03:41:16,391 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +2026-06-04 03:41:16,391 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,391 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +2026-06-04 03:41:16,391 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}] +2026-06-04 03:41:16,392 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,392 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,394 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +2026-06-04 03:41:16,394 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,395 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +2026-06-04 03:41:16,395 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}] +2026-06-04 03:41:16,396 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,396 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,398 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +2026-06-04 03:41:16,399 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,399 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +2026-06-04 03:41:16,399 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] +2026-06-04 03:41:16,400 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,400 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,403 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +2026-06-04 03:41:16,404 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,404 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +2026-06-04 03:41:16,404 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] +2026-06-04 03:41:16,405 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,405 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,408 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +2026-06-04 03:41:16,408 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,408 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +2026-06-04 03:41:16,409 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Album'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Albums)'}] +2026-06-04 03:41:16,409 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,409 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,412 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents +2026-06-04 03:41:16,412 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents +2026-06-04 03:41:16,413 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:16,413 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:16,413 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:16,414 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:16,414 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:16,415 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 1538 bytes +2026-06-04 03:41:16,554 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/org.musicbrainz.agents.music +2026-06-04 03:41:16,555 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/org.musicbrainz.agents.music +2026-06-04 03:41:16,555 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,555 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:16,581 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.none +2026-06-04 03:41:16,581 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.none +2026-06-04 03:41:16,582 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,582 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:16,598 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:16,599 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:16,599 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,599 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:16,605 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:16,606 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,606 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:16,606 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,607 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:16,615 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK +2026-06-04 03:41:16,616 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,616 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK +2026-06-04 03:41:16,616 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from org.musicbrainz.agents.music: [{'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'zh', 'hr', 'cs', 'da', 'nl', 'fi', 'fr', 'de', 'el', 'hu', 'id', 'it', 'ja', 'ko', 'nn', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'es', 'sv', 'th', 'tr', 'vi', 'xx'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Musicbrainz'}] +2026-06-04 03:41:16,616 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,616 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,619 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK +2026-06-04 03:41:16,619 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,620 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK +2026-06-04 03:41:16,620 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from org.musicbrainz.agents.music: [{'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'zh', 'hr', 'cs', 'da', 'nl', 'fi', 'fr', 'de', 'el', 'hu', 'id', 'it', 'ja', 'ko', 'nn', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'es', 'sv', 'th', 'tr', 'vi', 'xx'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Musicbrainz'}, {'media_types': ['Album'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'zh', 'hr', 'cs', 'da', 'nl', 'fi', 'fr', 'de', 'el', 'hu', 'id', 'it', 'ja', 'ko', 'nn', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'es', 'sv', 'th', 'tr', 'vi', 'xx'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Musicbrainz'}] +2026-06-04 03:41:16,620 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,620 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,623 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents +2026-06-04 03:41:16,624 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents +2026-06-04 03:41:16,624 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:16,624 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:16,624 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:16,625 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:16,625 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:16,627 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:16,628 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 3457 bytes +2026-06-04 03:41:16,628 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:16,628 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,629 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:16,635 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:16,635 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,636 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:16,636 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,636 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:16,651 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ +2026-06-04 03:41:16,652 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,652 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ +2026-06-04 03:41:16,652 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.none: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media'}] +2026-06-04 03:41:16,653 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,653 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,655 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK +2026-06-04 03:41:16,655 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,655 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK +2026-06-04 03:41:16,655 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.none: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Shows'}] +2026-06-04 03:41:16,656 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,656 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,658 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ +2026-06-04 03:41:16,658 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,659 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ +2026-06-04 03:41:16,659 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.none: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Shows'}, {'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Artists'}] +2026-06-04 03:41:16,659 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,659 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,662 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK +2026-06-04 03:41:16,662 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,662 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK +2026-06-04 03:41:16,663 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.none: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Shows'}, {'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Artists'}, {'media_types': ['Album'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Albums'}] +2026-06-04 03:41:16,663 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,663 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,666 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK +2026-06-04 03:41:16,666 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,667 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK +2026-06-04 03:41:16,667 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.none: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Shows'}, {'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Artists'}, {'media_types': ['Album'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Albums'}, {'media_types': ['Photo'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'ca', 'cs', 'cy', 'da', 'de', 'el', 'es', 'et', 'fa', 'fi', 'fr', 'he', 'hi', 'hr', 'ht', 'hu', 'id', 'it', 'ja', 'ko', 'lt', 'lv', 'ms', 'mt', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sk', 'sv', 'sl', 'sr', 'th', 'tr', 'uk', 'ur', 'vi', 'zh', 'xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Photos'}] +2026-06-04 03:41:16,668 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,668 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:16,670 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/agents +2026-06-04 03:41:16,671 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/agents +2026-06-04 03:41:16,671 (7f8fdf496b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:16,671 (7f8fdf9fdb38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:16,671 (7f8fdf496b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:16,672 (7f8fdf496b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:16,673 (7f8fdf496b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:16,674 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 5262 bytes +2026-06-04 03:41:16,764 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.imdb +2026-06-04 03:41:16,765 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.imdb +2026-06-04 03:41:16,765 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,765 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:16,807 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:16,808 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:16,808 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,809 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:16,815 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:16,815 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:16,815 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:16,816 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:16,816 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:17,035 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.themoviedb +2026-06-04 03:41:17,035 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.themoviedb +2026-06-04 03:41:17,035 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:17,036 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:17,042 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ +2026-06-04 03:41:17,042 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:17,042 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ +2026-06-04 03:41:17,043 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.imdb: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.themoviedb'], 'languages': ['en', 'sv', 'fr', 'es', 'nl', 'de', 'it', 'da', 'ar', 'ca', 'zh', 'cs', 'et', 'fi', 'el', 'he', 'hi', 'hu', 'id', 'ja', 'ko', 'lv', 'no', 'fa', 'pl', 'pt', 'ro', 'ru', 'sk', 'th', 'tr', 'uk', 'vi'], 'persist_stored_files': True, 'version': 0, 'accepts_from': ['com.plexapp.agents.localmedia'], 'prefs': True, 'name': 'Plex Movie (Legacy)'}] +2026-06-04 03:41:17,043 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:17,043 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:17,046 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/agents +2026-06-04 03:41:17,046 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/agents +2026-06-04 03:41:17,047 (7f8fdf9fdb38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:17,047 (7f8fdf496b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:17,047 (7f8fdf496b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:17,079 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:17,079 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:17,080 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:17,080 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:17,086 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:17,087 (7f8fdf381b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:17,087 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:17,087 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:17,087 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:17,207 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ +2026-06-04 03:41:17,208 (7f8fdf381b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:17,208 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ +2026-06-04 03:41:17,396 (7f8fdf30ab38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.plexthememusic +2026-06-04 03:41:17,397 (7f8fdf30ab38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.plexthememusic +2026-06-04 03:41:17,397 (7f8fdf30ab38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:17,397 (7f8fdf30ab38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:17,440 (7f8fdf30ab38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:17,440 (7f8fdf30ab38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:17,441 (7f8fdf30ab38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:17,441 (7f8fdf30ab38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:17,448 (7f8fdf30ab38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:17,449 (7f8fdf30ab38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:17,449 (7f8fdf30ab38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:17,450 (7f8fdf30ab38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:17,450 (7f8fdf30ab38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:17,457 (7f8fdf30ab38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +2026-06-04 03:41:17,457 (7f8fdf30ab38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:17,458 (7f8fdf30ab38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +2026-06-04 03:41:20,234 (7f8fdf0bab38) : DEBUG (runtime:717) - Handling request GET /system/notify/serverUpdated?host=127.0.0.1 +2026-06-04 03:41:20,234 (7f8fdf0bab38) : DEBUG (runtime:814) - Found route matching /system/notify/serverUpdated +2026-06-04 03:41:20,234 (7f8fdf0bab38) : DEBUG (peerservice:386) - Handling server update notification (127.0.0.1) +2026-06-04 03:41:20,235 (7f8fdf0bab38) : DEBUG (peerservice:189) - Updating servers (True/False True/True/True) +2026-06-04 03:41:20,235 (7f8fdf0bab38) : DEBUG (peerservice:164) - Fetching the current list of servers +2026-06-04 03:41:20,235 (7f8fdf0bab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/servers' +2026-06-04 03:41:20,236 (7f8fdf0bab38) : DEBUG (peerservice:198) - Found 1 servers +2026-06-04 03:41:20,236 (7f8fdf0bab38) : DEBUG (peerservice:214) - Ignoring b4e051156514c3673d6305f3df48b2bd645d6fd5 because host != 127.0.0.1 (172.22.0.2) +2026-06-04 03:41:20,237 (7f8fdf0bab38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:20,251 (7f8fdfae3b38) : INFO (datakit:131) - Saved the dictionary file +2026-06-04 03:41:37,051 (7f8fdf496b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:37,052 (7f8fdf381b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.themoviedb: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'hu', 'it', 'lv', 'lt', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'th', 'tr', 'vi', 'zh', 'ko'], 'persist_stored_files': True, 'version': 0, 'accepts_from': ['com.plexapp.agents.localmedia'], 'prefs': True, 'name': 'The Movie Database'}] +2026-06-04 03:41:37,052 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:37,052 (7f8fdf30ab38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.plexthememusic: [{'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.thetvdbdvdorder', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Plex Theme Music'}] +2026-06-04 03:41:37,053 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:37,054 (7f8fdf30ab38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:37,055 (7f8fdf30ab38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:37,057 (7f8fdf496b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK +2026-06-04 03:41:37,057 (7f8fdf496b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:37,057 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 7374 bytes +2026-06-04 03:41:37,058 (7f8fdf496b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK +2026-06-04 03:41:37,058 (7f8fdf496b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.themoviedb: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'hu', 'it', 'lv', 'lt', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'th', 'tr', 'vi', 'zh', 'ko'], 'persist_stored_files': True, 'version': 0, 'accepts_from': ['com.plexapp.agents.localmedia'], 'prefs': True, 'name': 'The Movie Database'}, {'media_types': ['TV_Show'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb'], 'languages': ['en', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'hu', 'it', 'lv', 'lt', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'th', 'tr', 'vi', 'zh', 'ko'], 'persist_stored_files': True, 'version': 0, 'accepts_from': ['com.plexapp.agents.localmedia', 'com.plexapp.agents.thetvdb'], 'prefs': True, 'name': 'The Movie Database'}] +2026-06-04 03:41:37,059 (7f8fdf496b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:37,059 (7f8fdf496b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:37,064 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/agents +2026-06-04 03:41:37,064 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/agents +2026-06-04 03:41:37,065 (7f8fdf9fdb38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:37,065 (7f8fdf496b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! +2026-06-04 03:41:37,065 (7f8fdf496b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' +2026-06-04 03:41:37,429 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.thetvdb +2026-06-04 03:41:37,430 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.thetvdb +2026-06-04 03:41:37,430 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:37,430 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:37,476 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:37,476 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:37,476 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:37,476 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:37,483 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:37,483 (7f8fdf381b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:37,484 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:37,484 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:37,484 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:37,623 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ +2026-06-04 03:41:37,624 (7f8fdf381b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:37,624 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ +2026-06-04 03:41:42,054 (7f8fdfae3b38) : INFO (datakit:131) - Saved the dictionary file +2026-06-04 03:41:57,118 (7f8fdf496b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. +2026-06-04 03:41:57,119 (7f8fdf381b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.thetvdb: [{'media_types': ['TV_Show'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'fr', 'zh', 'sv', 'no', 'da', 'fi', 'nl', 'de', 'it', 'es', 'pl', 'hu', 'el', 'tr', 'ru', 'he', 'ja', 'pt', 'cs', 'ko', 'sl', 'hr'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'TheTVDB'}] +2026-06-04 03:41:57,120 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:57,120 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:57,123 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 8986 bytes +2026-06-04 03:41:57,491 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.localmedia +2026-06-04 03:41:57,491 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.localmedia +2026-06-04 03:41:57,492 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:57,492 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:57,534 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:57,535 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:57,535 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:57,535 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:57,542 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:57,543 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:57,543 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:57,543 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:57,543 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:57,809 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +2026-06-04 03:41:57,810 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:57,810 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +2026-06-04 03:41:57,810 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}] +2026-06-04 03:41:57,810 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:57,811 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:57,813 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +2026-06-04 03:41:57,814 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:57,814 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +2026-06-04 03:41:57,815 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}] +2026-06-04 03:41:57,815 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:57,815 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:57,818 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +2026-06-04 03:41:57,818 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:57,818 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +2026-06-04 03:41:57,819 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] +2026-06-04 03:41:57,819 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:57,819 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:57,822 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +2026-06-04 03:41:57,822 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:57,822 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +2026-06-04 03:41:57,823 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] +2026-06-04 03:41:57,823 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:57,823 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:57,826 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +2026-06-04 03:41:57,827 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:57,827 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +2026-06-04 03:41:57,828 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Album'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Albums)'}] +2026-06-04 03:41:57,828 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:57,828 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:58,191 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.imdb +2026-06-04 03:41:58,191 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.imdb +2026-06-04 03:41:58,192 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:58,192 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:41:58,238 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:58,238 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:41:58,238 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:58,238 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:41:58,245 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:58,245 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:58,246 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:41:58,246 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:58,246 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:41:58,470 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ +2026-06-04 03:41:58,470 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:41:58,471 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ +2026-06-04 03:41:58,471 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.imdb: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.themoviedb'], 'languages': ['en', 'sv', 'fr', 'es', 'nl', 'de', 'it', 'da', 'ar', 'ca', 'zh', 'cs', 'et', 'fi', 'el', 'he', 'hi', 'hu', 'id', 'ja', 'ko', 'lv', 'no', 'fa', 'pl', 'pt', 'ro', 'ru', 'sk', 'th', 'tr', 'uk', 'vi'], 'persist_stored_files': True, 'version': 0, 'accepts_from': ['com.plexapp.agents.localmedia'], 'prefs': True, 'name': 'Plex Movie (Legacy)'}] +2026-06-04 03:41:58,471 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:41:58,471 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:41:59,835 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/agents +2026-06-04 03:41:59,835 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/agents +2026-06-04 03:41:59,836 (7f8fdf9fdb38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' +2026-06-04 03:41:59,838 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 8986 bytes +2026-06-04 03:42:00,200 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.localmedia +2026-06-04 03:42:00,201 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.localmedia +2026-06-04 03:42:00,201 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:42:00,201 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes +2026-06-04 03:42:00,245 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:42:00,245 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes +2026-06-04 03:42:00,246 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:42:00,246 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:42:00,252 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:42:00,252 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:42:00,252 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +2026-06-04 03:42:00,253 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:42:00,253 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes +2026-06-04 03:42:00,506 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +2026-06-04 03:42:00,507 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:42:00,507 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +2026-06-04 03:42:00,507 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}] +2026-06-04 03:42:00,508 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:42:00,508 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:42:00,509 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +2026-06-04 03:42:00,510 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:42:00,510 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +2026-06-04 03:42:00,510 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}] +2026-06-04 03:42:00,511 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:42:00,511 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:42:00,513 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +2026-06-04 03:42:00,513 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:42:00,513 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +2026-06-04 03:42:00,513 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] +2026-06-04 03:42:00,514 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:42:00,514 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:42:00,517 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +2026-06-04 03:42:00,517 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:42:00,517 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +2026-06-04 03:42:00,518 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] +2026-06-04 03:42:00,518 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:42:00,518 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:42:00,521 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +2026-06-04 03:42:00,521 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) +2026-06-04 03:42:00,521 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +2026-06-04 03:42:00,522 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Album'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Albums)'}] +2026-06-04 03:42:00,522 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) +2026-06-04 03:42:00,522 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes +2026-06-04 03:42:02,121 (7f8fdfae3b38) : INFO (datakit:131) - Saved the dictionary file +2026-06-04 03:42:06,402 (7f8fdfae3b38) : DEBUG (runtime:717) - Handling request GET /system/settings +2026-06-04 03:42:06,403 (7f8fdfae3b38) : CRITICAL (runtime:493) - Exception matching route for path "/system/settings" (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route + raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) +FrameworkException: No route found matching '/system/settings' + +2026-06-04 03:42:06,403 (7f8fdfae3b38) : ERROR (runtime:846) - Could not find route matching /system/settings +2026-06-04 03:42:06,404 (7f8fdfae3b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:42:06,606 (7f8fdfae3b38) : DEBUG (runtime:717) - Handling request GET /system/updates +2026-06-04 03:42:06,607 (7f8fdfae3b38) : CRITICAL (runtime:493) - Exception matching route for path "/system/updates" (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route + raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) +FrameworkException: No route found matching '/system/updates' + +2026-06-04 03:42:06,607 (7f8fdfae3b38) : ERROR (runtime:846) - Could not find route matching /system/updates +2026-06-04 03:42:06,607 (7f8fdfae3b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:42:54,671 (7f8fdfae3b38) : DEBUG (runtime:717) - Handling request GET /system/settings +2026-06-04 03:42:54,671 (7f8fdfae3b38) : CRITICAL (runtime:493) - Exception matching route for path "/system/settings" (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route + raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) +FrameworkException: No route found matching '/system/settings' + +2026-06-04 03:42:54,672 (7f8fdfae3b38) : ERROR (runtime:846) - Could not find route matching /system/settings +2026-06-04 03:42:54,672 (7f8fdfae3b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:42:54,676 (7f8fdfae3b38) : DEBUG (runtime:717) - Handling request GET /system/updates +2026-06-04 03:42:54,676 (7f8fdfae3b38) : CRITICAL (runtime:493) - Exception matching route for path "/system/updates" (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route + raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) +FrameworkException: No route found matching '/system/updates' + +2026-06-04 03:42:54,676 (7f8fdfae3b38) : ERROR (runtime:846) - Could not find route matching /system/updates +2026-06-04 03:42:54,676 (7f8fdfae3b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:43:15,213 (7f8fdfa57b38) : DEBUG (runtime:1156) - Starting timed thread named 'refresh_servers' +2026-06-04 03:43:15,214 (7f8fdfa57b38) : DEBUG (peerservice:164) - Fetching the current list of servers +2026-06-04 03:43:15,214 (7f8fdfa57b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/servers' +2026-06-04 03:43:15,215 (7f8fdfa57b38) : DEBUG (peerservice:171) - Refreshing local server +2026-06-04 03:43:15,215 (7f8fdfa57b38) : DEBUG (peerservice:189) - Updating servers (True/False True/True/True) +2026-06-04 03:43:15,215 (7f8fdfa57b38) : DEBUG (peerservice:198) - Found 1 servers +2026-06-04 03:43:15,216 (7f8fdfa57b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:43:15,217 (7f8fdfa57b38) : DEBUG (core:521) - Attribute 'machineIdentifier' set to 'b4e051156514c3673d6305f3df48b2bd645d6fd5' +2026-06-04 03:43:15,217 (7f8fdfa57b38) : DEBUG (peerservice:230) - Creating new server b6f2a1226b70 (b4e051156514c3673d6305f3df48b2bd645d6fd5) +2026-06-04 03:43:15,218 (7f8fdfa57b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/library/sections' +2026-06-04 03:43:15,219 (7f8fdfa57b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/channels/all' +2026-06-04 03:43:15,220 (7f8fdf9fdb38) : DEBUG (peerservice:176) - Background-refreshing remote servers +2026-06-04 03:43:15,220 (7f8fdfa57b38) : DEBUG (runtime:1117) - Created a thread named 'background_refresh' +2026-06-04 03:43:15,220 (7f8fdf9fdb38) : DEBUG (peerservice:189) - Updating servers (True/False True/True/True) +2026-06-04 03:43:15,220 (7f8fdf9fdb38) : DEBUG (peerservice:198) - Found 1 servers +2026-06-04 03:43:15,220 (7f8fdf9fdb38) : DEBUG (peerservice:233) - Updating existing server b6f2a1226b70 (b4e051156514c3673d6305f3df48b2bd645d6fd5) +2026-06-04 03:43:15,220 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/library/sections' +2026-06-04 03:43:15,221 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/channels/all' +2026-06-04 03:46:36,563 (7f8fdfa6ab38) : DEBUG (runtime:717) - Handling request GET /system/settings +2026-06-04 03:46:36,563 (7f8fdfa6ab38) : CRITICAL (runtime:493) - Exception matching route for path "/system/settings" (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route + raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) +FrameworkException: No route found matching '/system/settings' + +2026-06-04 03:46:36,563 (7f8fdfa6ab38) : ERROR (runtime:846) - Could not find route matching /system/settings +2026-06-04 03:46:36,564 (7f8fdfa6ab38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes +2026-06-04 03:46:36,765 (7f8fdfa6ab38) : DEBUG (runtime:717) - Handling request GET /system/updates +2026-06-04 03:46:36,765 (7f8fdfa6ab38) : CRITICAL (runtime:493) - Exception matching route for path "/system/updates" (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route + raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) +FrameworkException: No route found matching '/system/updates' + +2026-06-04 03:46:36,765 (7f8fdfa6ab38) : ERROR (runtime:846) - Could not find route matching /system/updates +2026-06-04 03:46:36,766 (7f8fdfa6ab38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/org.musicbrainz.agents.music.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/org.musicbrainz.agents.music.log new file mode 100644 index 000000000..3b143f56b --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/org.musicbrainz.agents.music.log @@ -0,0 +1,66 @@ +2026-06-04 03:41:16,551 (7f4cab722808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) +2026-06-04 03:41:16,551 (7f4cab722808) : DEBUG (core:361) - Using the elevated policy +2026-06-04 03:41:16,551 (7f4cab722808) : DEBUG (core:450) - Starting runtime component. +2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (core:450) - Starting caching component. +2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (core:450) - Starting data component. +2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (core:450) - Starting networking component. +2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (networking:266) - No cookie jar found +2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 +2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (core:450) - Starting localization component. +2026-06-04 03:41:16,552 (7f4cab722808) : INFO (localization:409) - Setting the default locale to en-us +2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (core:450) - Starting messaging component. +2026-06-04 03:41:16,553 (7f4cab722808) : DEBUG (core:450) - Starting debugging component. +2026-06-04 03:41:16,553 (7f4cab722808) : DEBUG (core:450) - Starting services component. +2026-06-04 03:41:16,553 (7f4ca82fcb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/org.musicbrainz.agents.music' +2026-06-04 03:41:16,553 (7f4cab722808) : DEBUG (core:450) - Starting myplex component. +2026-06-04 03:41:16,554 (7f4cab722808) : DEBUG (core:450) - Starting notifications component. +2026-06-04 03:41:16,595 (7f4cab722808) : DEBUG (accessor:68) - Creating a new model access point for provider org.musicbrainz.agents.music in namespace 'metadata' +2026-06-04 03:41:16,597 (7f4cab722808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:16,600 (7f4cab722808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' +2026-06-04 03:41:16,600 (7f4cab722808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes + json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content + return self.__str__() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ + self.load() + File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load + f = self._opener.open(req, timeout=self._timeout) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open + response = meth(req, response) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response + 'http', request, response, code, msg, hdrs) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error + return self._call_chain(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain + result = func(*args) + File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default + raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) +HTTPError: HTTP Error 404: Not Found + +2026-06-04 03:41:16,603 (7f4ca8112b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system +2026-06-04 03:41:16,603 (7f4cab722808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' +2026-06-04 03:41:16,604 (7f4cab722808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' +2026-06-04 03:41:16,604 (7f4ca8112b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' +2026-06-04 03:41:16,604 (7f4ca80ccb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' +2026-06-04 03:41:16,605 (7f4cab722808) : DEBUG (core:150) - Finished starting framework core +2026-06-04 03:41:16,605 (7f4cab722808) : DEBUG (core:560) - Loading plug-in code +2026-06-04 03:41:16,608 (7f4ca80ccb38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 +2026-06-04 03:41:16,608 (7f4ca8112b38) : DEBUG (services:362) - Loaded services +2026-06-04 03:41:16,608 (7f4ca80ccb38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea +2026-06-04 03:41:16,611 (7f4ca80efb38) : DEBUG (services:438) - No shared code to load +2026-06-04 03:41:16,613 (7f4cab722808) : DEBUG (core:566) - Finished loading plug-in code +2026-06-04 03:41:16,613 (7f4cab722808) : DEBUG (agentkit:1132) - Creating new agent class called MusicbrainzArtistAgent +2026-06-04 03:41:16,614 (7f4cab722808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'zh', 'hr', 'cs', 'da', 'nl', 'fi', 'fr', 'de', 'el', 'hu', 'id', 'it', 'ja', 'ko', 'nn', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'es', 'sv', 'th', 'tr', 'vi', 'xx'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Musicbrainz'}] +2026-06-04 03:41:16,614 (7f4cab722808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK' +2026-06-04 03:41:16,617 (7f4cab722808) : DEBUG (agentkit:1132) - Creating new agent class called PlexMusicAlbumAgent +2026-06-04 03:41:16,618 (7f4cab722808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'zh', 'hr', 'cs', 'da', 'nl', 'fi', 'fr', 'de', 'el', 'hu', 'id', 'it', 'ja', 'ko', 'nn', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'es', 'sv', 'th', 'tr', 'vi', 'xx'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Musicbrainz'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'zh', 'hr', 'cs', 'da', 'nl', 'fi', 'fr', 'de', 'el', 'hu', 'id', 'it', 'ja', 'ko', 'nn', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'es', 'sv', 'th', 'tr', 'vi', 'xx'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Musicbrainz'}] +2026-06-04 03:41:16,618 (7f4cab722808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK' +2026-06-04 03:41:16,621 (7f4cab722808) : INFO (core:611) - Started plug-in +2026-06-04 03:41:16,621 (7f4cab722808) : DEBUG (socketinterface:160) - Starting socket server +2026-06-04 03:41:16,621 (7f4cab722808) : DEBUG (runtime:1117) - Created a thread named 'start' +2026-06-04 03:41:16,621 (7f4cab722808) : INFO (socketinterface:184) - Socket server started on port 46041 +2026-06-04 03:41:16,621 (7f4cab722808) : INFO (pipeinterface:25) - Entering run loop +2026-06-04 03:41:16,622 (7f4cab722808) : DEBUG (runtime:717) - Handling request GET /:/prefixes +2026-06-04 03:41:16,622 (7f4cab722808) : DEBUG (runtime:814) - Found route matching /:/prefixes +2026-06-04 03:41:16,622 (7f4cab722808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 153 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Crash Uploader.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Crash Uploader.log new file mode 100644 index 000000000..8d2b0f630 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Crash Uploader.log @@ -0,0 +1,4 @@ +Jun 04, 2026 03:41:15.610 [140406263966520] INFO - Crash Uploader - Platform: Linux ServerUUID: b4e051156514c3673d6305f3df48b2bd645d6fd5 UserId: NOUSERID Version: 1.43.2.10687-563d026ea +Jun 04, 2026 03:41:15.610 [140406263966520] INFO - Pre-processed minidump directory: /config/Library/Application Support/Plex Media Server/Crash Reports/1.43.2.10687-563d026ea +Jun 04, 2026 03:41:15.610 [140406263966520] INFO - Post-processed minidump directory: /tmp +Jun 04, 2026 03:41:15.610 [140406291888136] INFO - Crash Uploader - Processing Complete. diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Media Server.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Media Server.log new file mode 100644 index 000000000..5d856a580 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Media Server.log @@ -0,0 +1,6660 @@ +Jun 04, 2026 03:41:13.606 [140443271535416] INFO - Plex Media Server v1.43.2.10687-563d026ea - Docker Docker Container x86_64 - build: linux-x86_64 debian - GMT 00:00 +Jun 04, 2026 03:41:13.606 [140443271535416] INFO - Linux version: 7.0.10-arch1-1, language: en-US +Jun 04, 2026 03:41:13.606 [140443271535416] INFO - Processor: 32-core AMD Ryzen 9 7950X3D 16-Core Processor +Jun 04, 2026 03:41:13.606 [140443271535416] INFO - Compiler is - Clang 11.0.1 (https://plex.tv 9b997da8e5b47bdb4a9425b3a3b290be393b4b1f) +Jun 04, 2026 03:41:13.606 [140443271535416] INFO - /usr/lib/plexmediaserver/Plex Media Server +Jun 04, 2026 03:41:13.606 [140443274078864] DEBUG - BPQ: [Idle] -> [Starting] +Jun 04, 2026 03:41:13.606 [140443274078864] DEBUG - MyPlex: mapping state set to 'Unknown'. +Jun 04, 2026 03:41:13.606 [140443274078864] DEBUG - Relay: read 0 cached entries from hosts file +Jun 04, 2026 03:41:13.606 [140443274078864] DEBUG - Opening 20 database sessions to library (com.plexapp.plugins.library), SQLite 3.39.4, threadsafe=1 +Jun 04, 2026 03:41:13.606 [140443274078864] DEBUG - Installing Library Database from ["/usr/lib/plexmediaserver/Resources/com.plexapp.plugins.library.db"] to ["/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db"] +Jun 04, 2026 03:41:13.622 [140443274078864] DEBUG - MyPlex: no cached data to load for request for https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - HttpServer: Listening on IPv6 as well as IPv4. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - HttpServer: Listening on port 32400. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - HttpServer: Listening on port 32401. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Running server... +Jun 04, 2026 03:41:13.631 [140443256027960] DEBUG - HttpServer: Set up a thread pool with 2 threads. +Jun 04, 2026 03:41:13.631 [140443274078864] INFO - Running migrations. (EPG 0) +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.632 [140443274078864] INFO - Running forward migration 20190130000000. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.635 [140443274078864] INFO - Completed forward migration 20190130000000. +Jun 04, 2026 03:41:13.635 [140443274078864] INFO - Running forward migration 20190201190600. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.636 [140443274078864] INFO - Completed forward migration 20190201190600. +Jun 04, 2026 03:41:13.636 [140443274078864] INFO - Running forward migration 20190205190600. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.636 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.637 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.637 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.638 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.639 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.639 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.640 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.641 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.642 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.642 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.643 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.644 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.644 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.645 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.646 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.647 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.647 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.648 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.649 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.650 [140443274078864] INFO - Completed forward migration 20190205190600. +Jun 04, 2026 03:41:13.650 [140443274078864] INFO - Running forward migration 20190215190600. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.651 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.652 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.653 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.653 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.654 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.654 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.655 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.656 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.656 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.657 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.658 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.659 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.659 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.660 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.661 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.662 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.662 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.663 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.663 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.664 [140443274078864] INFO - Completed forward migration 20190215190600. +Jun 04, 2026 03:41:13.664 [140443274078864] INFO - Running forward migration 20190218032400. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.665 [140443274078864] INFO - Completed forward migration 20190218032400. +Jun 04, 2026 03:41:13.665 [140443274078864] INFO - Running forward migration 20190316132700. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.666 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.666 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.667 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.668 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.668 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.669 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.669 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.670 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.671 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.671 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.672 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.672 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.673 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.674 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.674 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.675 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.676 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.676 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.677 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.677 [140443274078864] INFO - Completed forward migration 20190316132700. +Jun 04, 2026 03:41:13.677 [140443274078864] INFO - Running forward migration 20190403100000. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.679 [140443274078864] INFO - Completed forward migration 20190403100000. +Jun 04, 2026 03:41:13.679 [140443274078864] INFO - Running forward migration 20190501100000. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.679 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.680 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.680 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.681 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.681 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.682 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.683 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.683 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.684 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.685 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.685 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.686 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.686 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.687 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.688 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.688 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.689 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.689 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.690 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.691 [140443274078864] INFO - Completed forward migration 20190501100000. +Jun 04, 2026 03:41:13.691 [140443274078864] INFO - Running forward migration 20190528190600. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.692 [140443274078864] INFO - Completed forward migration 20190528190600. +Jun 04, 2026 03:41:13.692 [140443274078864] INFO - Running forward migration 20190520131301. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.692 [140443274078864] INFO - Completed forward migration 20190520131301. +Jun 04, 2026 03:41:13.692 [140443274078864] INFO - Running forward migration 20190520131302. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.693 [140443274078864] INFO - Completed forward migration 20190520131302. +Jun 04, 2026 03:41:13.693 [140443274078864] INFO - Running forward migration 20190520131303. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.693 [140443274078864] INFO - Completed forward migration 20190520131303. +Jun 04, 2026 03:41:13.693 [140443274078864] INFO - Running forward migration 20190603140000. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.694 [140443274078864] INFO - Completed forward migration 20190603140000. +Jun 04, 2026 03:41:13.694 [140443274078864] INFO - Running forward migration 20190612032400. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.694 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.695 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.696 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.696 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.697 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.697 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.698 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.699 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.699 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.700 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.701 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.701 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.702 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.702 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.703 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.704 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.704 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.705 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.705 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.706 [140443274078864] INFO - Completed forward migration 20190612032400. +Jun 04, 2026 03:41:13.706 [140443274078864] INFO - Running forward migration 20190614032400. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.707 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.707 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.708 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.709 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.709 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.710 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.711 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.711 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.712 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.712 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.713 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.714 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.714 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.715 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.716 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.716 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.717 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.717 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.718 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.719 [140443274078864] INFO - Completed forward migration 20190614032400. +Jun 04, 2026 03:41:13.719 [140443274078864] INFO - Running forward migration 20190708132500. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.719 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.720 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.721 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.721 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.722 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.723 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.723 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.724 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.725 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.725 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.726 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.726 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.727 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.728 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.728 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.729 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.730 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.730 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.731 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.732 [140443274078864] INFO - Completed forward migration 20190708132500. +Jun 04, 2026 03:41:13.732 [140443274078864] INFO - Running forward migration 20190430032400. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.733 [140443274078864] INFO - Completed forward migration 20190430032400. +Jun 04, 2026 03:41:13.733 [140443274078864] INFO - Running forward migration 20190111032400. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.733 [140443274078864] INFO - Completed forward migration 20190111032400. +Jun 04, 2026 03:41:13.733 [140443274078864] INFO - Running forward migration 20190815130000. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.734 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.734 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.735 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.736 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.736 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.737 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.738 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.738 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.739 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.740 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.740 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.741 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.742 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.742 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.743 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.744 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.744 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.745 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.746 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.746 [140443274078864] INFO - Completed forward migration 20190815130000. +Jun 04, 2026 03:41:13.746 [140443274078864] INFO - Running forward migration 20190912140000. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.747 [140443274078864] INFO - Completed forward migration 20190912140000. +Jun 04, 2026 03:41:13.747 [140443274078864] INFO - Running forward migration 20180330131300. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.748 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.749 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.749 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.750 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.751 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.751 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.752 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.753 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.753 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.754 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.754 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.755 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.756 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.756 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.757 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.758 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.758 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.759 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.760 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.760 [140443274078864] INFO - Completed forward migration 20180330131300. +Jun 04, 2026 03:41:13.760 [140443274078864] INFO - Running forward migration 20190801130200. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.761 [140443274078864] INFO - Completed forward migration 20190801130200. +Jun 04, 2026 03:41:13.761 [140443274078864] INFO - Running forward migration 20190604032400. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.762 [140443274078864] INFO - Completed forward migration 20190604032400. +Jun 04, 2026 03:41:13.762 [140443274078864] INFO - Running forward migration 20190919032400. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.762 [140443274078864] INFO - Completed forward migration 20190919032400. +Jun 04, 2026 03:41:13.762 [140443274078864] INFO - Running forward migration 20190920032400. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.763 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.764 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.764 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.765 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.766 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.766 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.767 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.768 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.768 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.769 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.769 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.770 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.771 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.771 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.772 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.773 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.773 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.774 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.774 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.775 [140443274078864] INFO - Completed forward migration 20190920032400. +Jun 04, 2026 03:41:13.775 [140443274078864] INFO - Running forward migration 20190616032400. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.776 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.776 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.777 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.778 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.778 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.779 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.780 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.780 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.781 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.782 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.782 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.783 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.783 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.784 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.785 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.785 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.786 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.787 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.787 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.788 [140443274078864] INFO - Completed forward migration 20190616032400. +Jun 04, 2026 03:41:13.788 [140443274078864] INFO - Running forward migration 20191003131300. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.788 [140443274078864] INFO - Completed forward migration 20191003131300. +Jun 04, 2026 03:41:13.788 [140443274078864] INFO - Running forward migration 20191213143300. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.789 [140443274078864] INFO - Completed forward migration 20191213143300. +Jun 04, 2026 03:41:13.789 [140443274078864] INFO - Running forward migration 20200110143300. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.789 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.790 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.791 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.791 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.792 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.793 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.793 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.794 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.795 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.795 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.796 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.797 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.797 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.798 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.798 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.799 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.800 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.800 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.801 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.802 [140443274078864] INFO - Completed forward migration 20200110143300. +Jun 04, 2026 03:41:13.802 [140443274078864] INFO - Running forward migration 20200114193300. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.802 [140443274078864] INFO - Completed forward migration 20200114193300. +Jun 04, 2026 03:41:13.802 [140443274078864] INFO - Running forward migration 20200124193500. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.803 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.804 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.804 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.805 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.806 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.806 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.807 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.807 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.808 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.809 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.809 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.810 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.811 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.811 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.812 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.813 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.813 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.814 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.815 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.815 [140443274078864] INFO - Completed forward migration 20200124193500. +Jun 04, 2026 03:41:13.815 [140443274078864] INFO - Running forward migration 20200131193503. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.816 [140443274078864] INFO - Completed forward migration 20200131193503. +Jun 04, 2026 03:41:13.816 [140443274078864] INFO - Running forward migration 20191125131300. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.817 [140443274078864] INFO - Completed forward migration 20191125131300. +Jun 04, 2026 03:41:13.817 [140443274078864] INFO - Running forward migration 20200224131300. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.817 [140443274078864] INFO - Completed forward migration 20200224131300. +Jun 04, 2026 03:41:13.817 [140443274078864] INFO - Running forward migration 20200327131300. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.818 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.819 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.820 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.820 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.821 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.822 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.822 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.823 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.823 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.824 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.825 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.825 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.826 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.827 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.827 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.828 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.829 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.829 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.830 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.831 [140443274078864] INFO - Completed forward migration 20200327131300. +Jun 04, 2026 03:41:13.831 [140443274078864] INFO - Running forward migration 20200401131300. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.832 [140443274078864] INFO - Completed forward migration 20200401131300. +Jun 04, 2026 03:41:13.832 [140443274078864] INFO - Running forward migration 20200506172900. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.832 [140443274078864] INFO - Completed forward migration 20200506172900. +Jun 04, 2026 03:41:13.832 [140443274078864] INFO - Running forward migration 20200515172900. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.833 [140443274078864] INFO - Completed forward migration 20200515172900. +Jun 04, 2026 03:41:13.833 [140443274078864] INFO - Running forward migration 20200610150000. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.833 [140443274078864] INFO - Completed forward migration 20200610150000. +Jun 04, 2026 03:41:13.833 [140443274078864] INFO - Running forward migration 20200615032400. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.834 [140443274078864] INFO - Completed forward migration 20200615032400. +Jun 04, 2026 03:41:13.834 [140443274078864] INFO - Running forward migration 20200701090000. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.834 [140443274078864] INFO - Completed forward migration 20200701090000. +Jun 04, 2026 03:41:13.834 [140443274078864] INFO - Running forward migration 20200728130000. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.835 [140443274078864] INFO - Completed forward migration 20200728130000. +Jun 04, 2026 03:41:13.835 [140443274078864] INFO - Running forward migration 20200731130000. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.836 [140443274078864] INFO - Completed forward migration 20200731130000. +Jun 04, 2026 03:41:13.836 [140443274078864] INFO - Running forward migration 20200812130000. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.836 [140443274078864] INFO - Completed forward migration 20200812130000. +Jun 04, 2026 03:41:13.836 [140443274078864] INFO - Running forward migration 20200921130000. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.837 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.837 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.838 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.839 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.839 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.840 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.841 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.841 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.842 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.843 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.843 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.844 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.845 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.845 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.846 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.847 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.848 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.848 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.849 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.850 [140443274078864] INFO - Completed forward migration 20200921130000. +Jun 04, 2026 03:41:13.850 [140443274078864] INFO - Running forward migration 20201103130000. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.851 [140443274078864] INFO - Completed forward migration 20201103130000. +Jun 04, 2026 03:41:13.851 [140443274078864] INFO - Running forward migration 20201119130000. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.851 [140443274078864] INFO - Completed forward migration 20201119130000. +Jun 04, 2026 03:41:13.851 [140443274078864] INFO - Running forward migration 20210304150000. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.852 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.852 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.853 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.854 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.854 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.855 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.856 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.856 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.857 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.857 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.858 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.859 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.860 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.860 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.861 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.862 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.862 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.863 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.864 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.864 [140443274078864] INFO - Completed forward migration 20210304150000. +Jun 04, 2026 03:41:13.864 [140443274078864] INFO - Running forward migration 500000000000. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.865 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.865 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.866 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.867 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.867 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.868 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.869 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.869 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.870 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.871 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.871 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.872 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.873 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.873 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.874 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.874 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.875 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.876 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.876 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.877 [140443274078864] INFO - Completed forward migration 500000000000. +Jun 04, 2026 03:41:13.877 [140443274078864] INFO - Running forward migration 500000000001. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.879 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.880 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.881 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.882 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.882 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.883 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.884 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.884 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.885 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.886 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.887 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.887 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.888 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.889 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.890 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.890 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.891 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.892 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.893 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.893 [140443274078864] INFO - Completed forward migration 500000000001. +Jun 04, 2026 03:41:13.893 [140443274078864] INFO - Running forward migration 20210628131300. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.894 [140443274078864] INFO - Completed forward migration 20210628131300. +Jun 04, 2026 03:41:13.894 [140443274078864] INFO - Running forward migration 202107070000. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.895 [140443274078864] INFO - Completed forward migration 202107070000. +Jun 04, 2026 03:41:13.895 [140443274078864] INFO - Running forward migration 202107221100. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.895 [140443274078864] INFO - Completed forward migration 202107221100. +Jun 04, 2026 03:41:13.895 [140443274078864] INFO - Running forward migration 20210726150000. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.896 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.897 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.897 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.898 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.899 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.899 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.900 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.901 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.902 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.902 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.903 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.904 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.904 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.905 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.906 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.906 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.907 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.908 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.908 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.909 [140443274078864] INFO - Completed forward migration 20210726150000. +Jun 04, 2026 03:41:13.909 [140443274078864] INFO - Running forward migration 20210830032400. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.910 [140443274078864] INFO - Completed forward migration 20210830032400. +Jun 04, 2026 03:41:13.910 [140443274078864] INFO - Running forward migration 202109061500. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.911 [140443274078864] INFO - Completed forward migration 202109061500. +Jun 04, 2026 03:41:13.911 [140443274078864] INFO - Running forward migration 20210922132300. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.912 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.912 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.913 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.914 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.914 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.915 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.916 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.916 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.917 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.918 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.919 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.919 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.920 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.921 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.921 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.922 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.923 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.923 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.924 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.925 [140443274078864] INFO - Completed forward migration 20210922132300. +Jun 04, 2026 03:41:13.925 [140443274078864] INFO - Running forward migration 20211027132200. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.925 [140443274078864] INFO - Completed forward migration 20211027132200. +Jun 04, 2026 03:41:13.925 [140443274078864] INFO - Running forward migration 20211116115800. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.926 [140443274078864] INFO - Completed forward migration 20211116115800. +Jun 04, 2026 03:41:13.926 [140443274078864] INFO - Running forward migration 20211208163900. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.927 [140443274078864] INFO - Completed forward migration 20211208163900. +Jun 04, 2026 03:41:13.927 [140443274078864] INFO - Running forward migration 202203040100. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.929 [140443274078864] INFO - Completed forward migration 202203040100. +Jun 04, 2026 03:41:13.929 [140443274078864] INFO - Running forward migration 202203220200. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.931 [140443274078864] INFO - Completed forward migration 202203220200. +Jun 04, 2026 03:41:13.931 [140443274078864] INFO - Running forward migration 202204252200. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.932 [140443274078864] INFO - Completed forward migration 202204252200. +Jun 04, 2026 03:41:13.932 [140443274078864] INFO - Running forward migration 202204252300. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.934 [140443274078864] INFO - Completed forward migration 202204252300. +Jun 04, 2026 03:41:13.934 [140443274078864] INFO - Running forward migration 202204252330. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.935 [140443274078864] INFO - Completed forward migration 202204252330. +Jun 04, 2026 03:41:13.935 [140443274078864] INFO - Running forward migration 202205090900. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.936 [140443274078864] INFO - Completed forward migration 202205090900. +Jun 04, 2026 03:41:13.936 [140443274078864] INFO - Running forward migration 202205090930. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.937 [140443274078864] INFO - Completed forward migration 202205090930. +Jun 04, 2026 03:41:13.937 [140443274078864] INFO - Running forward migration 202205090940. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.939 [140443274078864] INFO - Completed forward migration 202205090940. +Jun 04, 2026 03:41:13.939 [140443274078864] INFO - Running forward migration 202205091600. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.940 [140443274078864] INFO - Completed forward migration 202205091600. +Jun 04, 2026 03:41:13.940 [140443274078864] INFO - Running forward migration 202205091700. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.941 [140443274078864] INFO - Completed forward migration 202205091700. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.941 [140443274078864] INFO - Analyzing database. +Jun 04, 2026 03:41:13.942 [140443274078864] INFO - Vacuuming database. +Jun 04, 2026 03:41:13.953 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.953 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.954 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.955 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.955 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.956 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.957 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.958 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.958 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.959 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.960 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.961 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.962 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.962 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.963 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.964 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.965 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.966 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.966 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.967 [140443274078864] INFO - Running forward migration 202205181200. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.968 [140443274078864] INFO - Completed forward migration 202205181200. +Jun 04, 2026 03:41:13.968 [140443274078864] INFO - Running forward migration 202206291100. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.969 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.970 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.971 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.971 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.972 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.973 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.973 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.974 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.975 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.976 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.976 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.977 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.978 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.978 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.979 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.980 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.981 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.981 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.982 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.983 [140443274078864] INFO - Completed forward migration 202206291100. +Jun 04, 2026 03:41:13.983 [140443274078864] INFO - Running forward migration 20220818122500. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.984 [140443274078864] INFO - Completed forward migration 20220818122500. +Jun 04, 2026 03:41:13.984 [140443274078864] INFO - Running forward migration 202209091100. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.984 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.985 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.985 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.986 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.987 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.987 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.988 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.989 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.990 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.990 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.991 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.992 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.992 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.993 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.994 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.995 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.995 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.996 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.997 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:13.997 [140443274078864] INFO - Completed forward migration 202209091100. +Jun 04, 2026 03:41:13.997 [140443274078864] INFO - Running forward migration 20220911115800. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:13.998 [140443274078864] INFO - Completed forward migration 20220911115800. +Jun 04, 2026 03:41:13.998 [140443274078864] INFO - Running forward migration 202209271322. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.001 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.002 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.002 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.003 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.003 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.004 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.005 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.005 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.006 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.007 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.007 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.008 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.008 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.009 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.010 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.010 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.011 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.012 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.012 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.013 [140443274078864] INFO - Completed forward migration 202209271322. +Jun 04, 2026 03:41:14.013 [140443274078864] INFO - Running forward migration 202210260000. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.015 [140443274078864] INFO - Completed forward migration 202210260000. +Jun 04, 2026 03:41:14.015 [140443274078864] INFO - Running forward migration 202210260100. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.016 [140443274078864] INFO - Completed forward migration 202210260100. +Jun 04, 2026 03:41:14.016 [140443274078864] INFO - Running forward migration 202210260200. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.017 [140443274078864] INFO - Completed forward migration 202210260200. +Jun 04, 2026 03:41:14.017 [140443274078864] INFO - Running forward migration 202212012200. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.019 [140443274078864] INFO - Completed forward migration 202212012200. +Jun 04, 2026 03:41:14.019 [140443274078864] INFO - Running forward migration 202212012300. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.020 [140443274078864] INFO - Completed forward migration 202212012300. +Jun 04, 2026 03:41:14.020 [140443274078864] INFO - Running forward migration 202212022100. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.021 [140443274078864] INFO - Completed forward migration 202212022100. +Jun 04, 2026 03:41:14.021 [140443274078864] INFO - Running forward migration 202212022200. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.022 [140443274078864] INFO - Completed forward migration 202212022200. +Jun 04, 2026 03:41:14.022 [140443274078864] INFO - Running forward migration 202212022300. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.023 [140443274078864] INFO - Completed forward migration 202212022300. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.023 [140443274078864] INFO - Analyzing database. +Jun 04, 2026 03:41:14.024 [140443274078864] INFO - Vacuuming database. +Jun 04, 2026 03:41:14.039 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.040 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.041 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.041 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.042 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.043 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.043 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.044 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.045 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.046 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.046 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.047 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.048 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.048 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.049 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.050 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.050 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.051 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.051 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.052 [140443274078864] INFO - Running forward migration 202301280000. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.052 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.053 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.053 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.054 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.055 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.055 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.056 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.056 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.057 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.058 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.058 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.059 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.059 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.060 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.061 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.061 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.062 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.063 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.063 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.064 [140443274078864] INFO - Completed forward migration 202301280000. +Jun 04, 2026 03:41:14.064 [140443274078864] INFO - Running forward migration 20230118160000. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.064 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.065 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.065 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.066 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.067 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.067 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.068 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.069 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.069 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.070 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.070 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.071 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.072 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.072 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.073 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.073 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.074 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.074 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.075 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.076 [140443274078864] INFO - Completed forward migration 20230118160000. +Jun 04, 2026 03:41:14.076 [140443274078864] INFO - Running forward migration 20230830160000. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.076 [140443274078864] INFO - Completed forward migration 20230830160000. +Jun 04, 2026 03:41:14.076 [140443274078864] INFO - Running forward migration 202309200901. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.077 [140443274078864] INFO - Completed forward migration 202309200901. +Jun 04, 2026 03:41:14.077 [140443274078864] INFO - Running forward migration 202309200902. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.077 [140443274078864] INFO - Completed forward migration 202309200902. +Jun 04, 2026 03:41:14.078 [140443274078864] INFO - Running forward migration 202309200903. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.078 [140443274078864] INFO - Completed forward migration 202309200903. +Jun 04, 2026 03:41:14.078 [140443274078864] INFO - Running forward migration 202309200904. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.079 [140443274078864] INFO - Completed forward migration 202309200904. +Jun 04, 2026 03:41:14.079 [140443274078864] INFO - Running forward migration 202309200905. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.079 [140443274078864] INFO - Completed forward migration 202309200905. +Jun 04, 2026 03:41:14.079 [140443274078864] INFO - Running forward migration 202309200906. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.080 [140443274078864] INFO - Completed forward migration 202309200906. +Jun 04, 2026 03:41:14.080 [140443274078864] INFO - Running forward migration 202309200907. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.080 [140443274078864] INFO - Completed forward migration 202309200907. +Jun 04, 2026 03:41:14.080 [140443274078864] INFO - Running forward migration 202309200908. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.081 [140443274078864] INFO - Completed forward migration 202309200908. +Jun 04, 2026 03:41:14.081 [140443274078864] INFO - Running forward migration 202309200909. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.081 [140443274078864] INFO - Completed forward migration 202309200909. +Jun 04, 2026 03:41:14.081 [140443274078864] INFO - Running forward migration 202309200910. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.082 [140443274078864] INFO - Completed forward migration 202309200910. +Jun 04, 2026 03:41:14.082 [140443274078864] INFO - Running forward migration 202309200911. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.082 [140443274078864] INFO - Completed forward migration 202309200911. +Jun 04, 2026 03:41:14.082 [140443274078864] INFO - Running forward migration 202309200912. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.083 [140443274078864] INFO - Completed forward migration 202309200912. +Jun 04, 2026 03:41:14.083 [140443274078864] INFO - Running forward migration 202309200913. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.083 [140443274078864] INFO - Completed forward migration 202309200913. +Jun 04, 2026 03:41:14.083 [140443274078864] INFO - Running forward migration 202309200914. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.084 [140443274078864] INFO - Completed forward migration 202309200914. +Jun 04, 2026 03:41:14.084 [140443274078864] INFO - Running forward migration 202309200915. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.085 [140443274078864] INFO - Completed forward migration 202309200915. +Jun 04, 2026 03:41:14.085 [140443274078864] INFO - Running forward migration 202309200916. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.085 [140443274078864] INFO - Completed forward migration 202309200916. +Jun 04, 2026 03:41:14.085 [140443274078864] INFO - Running forward migration 202309200917. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.086 [140443274078864] INFO - Completed forward migration 202309200917. +Jun 04, 2026 03:41:14.086 [140443274078864] INFO - Running forward migration 202309200918. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.086 [140443274078864] INFO - Completed forward migration 202309200918. +Jun 04, 2026 03:41:14.086 [140443274078864] INFO - Running forward migration 202309200919. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.087 [140443274078864] INFO - Completed forward migration 202309200919. +Jun 04, 2026 03:41:14.087 [140443274078864] INFO - Running forward migration 202311120800. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.087 [140443274078864] INFO - Completed forward migration 202311120800. +Jun 04, 2026 03:41:14.087 [140443274078864] INFO - Running forward migration 202311171400. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.090 [140443274078864] INFO - Completed forward migration 202311171400. +Jun 04, 2026 03:41:14.090 [140443274078864] INFO - Running forward migration 20231120161500. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.091 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.092 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.093 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.093 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.094 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.095 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.095 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.096 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.097 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.097 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.098 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.099 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.099 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.100 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.101 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.101 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.102 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.103 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.103 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.104 [140443274078864] INFO - Completed forward migration 20231120161500. +Jun 04, 2026 03:41:14.104 [140443274078864] INFO - Running forward migration 202312190800. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.106 [140443274078864] INFO - Completed forward migration 202312190800. +Jun 04, 2026 03:41:14.106 [140443274078864] INFO - Running forward migration 202401290800. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.107 [140443274078864] INFO - Completed forward migration 202401290800. +Jun 04, 2026 03:41:14.107 [140443274078864] INFO - Running forward migration 202401290801. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.108 [140443274078864] INFO - Completed forward migration 202401290801. +Jun 04, 2026 03:41:14.108 [140443274078864] INFO - Running forward migration 202401290802. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.109 [140443274078864] INFO - Completed forward migration 202401290802. +Jun 04, 2026 03:41:14.109 [140443274078864] INFO - Running forward migration 202401290803. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.111 [140443274078864] INFO - Completed forward migration 202401290803. +Jun 04, 2026 03:41:14.111 [140443274078864] INFO - Running forward migration 202401290804. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.112 [140443274078864] INFO - Completed forward migration 202401290804. +Jun 04, 2026 03:41:14.112 [140443274078864] INFO - Running forward migration 202401290805. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.113 [140443274078864] INFO - Completed forward migration 202401290805. +Jun 04, 2026 03:41:14.113 [140443274078864] INFO - Running forward migration 202401290806. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.114 [140443274078864] INFO - Completed forward migration 202401290806. +Jun 04, 2026 03:41:14.114 [140443274078864] INFO - Running forward migration 202401290807. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.115 [140443274078864] INFO - Completed forward migration 202401290807. +Jun 04, 2026 03:41:14.115 [140443274078864] INFO - Running forward migration 202401290808. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.117 [140443274078864] INFO - Completed forward migration 202401290808. +Jun 04, 2026 03:41:14.117 [140443274078864] INFO - Running forward migration 202402260801. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.118 [140443274078864] INFO - Completed forward migration 202402260801. +Jun 04, 2026 03:41:14.118 [140443274078864] INFO - Running forward migration 202402260802. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.119 [140443274078864] INFO - Completed forward migration 202402260802. +Jun 04, 2026 03:41:14.119 [140443274078864] INFO - Running forward migration 202402260803. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.120 [140443274078864] INFO - Completed forward migration 202402260803. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.120 [140443274078864] INFO - Analyzing database. +Jun 04, 2026 03:41:14.120 [140443274078864] INFO - Vacuuming database. +Jun 04, 2026 03:41:14.130 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.131 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.131 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.132 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.133 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.133 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.134 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.135 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.135 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.136 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.137 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.138 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.138 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.139 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.140 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.140 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.141 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.142 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.142 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.143 [140443274078864] INFO - Running forward migration 202403110800. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.144 [140443274078864] INFO - Completed forward migration 202403110800. +Jun 04, 2026 03:41:14.144 [140443274078864] INFO - Running forward migration 202403120800. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.145 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.145 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.146 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.147 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.147 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.148 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.149 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.149 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.150 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.151 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.151 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.152 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.153 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.153 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.154 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.155 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.155 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.156 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.156 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.157 [140443274078864] INFO - Completed forward migration 202403120800. +Jun 04, 2026 03:41:14.157 [140443274078864] INFO - Running forward migration 202404300800. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.158 [140443274078864] INFO - Completed forward migration 202404300800. +Jun 04, 2026 03:41:14.158 [140443274078864] INFO - Running forward migration 202406050800. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.159 [140443274078864] INFO - Completed forward migration 202406050800. +Jun 04, 2026 03:41:14.159 [140443274078864] INFO - Running forward migration 202406250800. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.159 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.160 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.160 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.161 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.162 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.162 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.163 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.164 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.164 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.165 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.166 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.166 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.167 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.168 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.168 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.169 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.170 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.170 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.171 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.171 [140443274078864] INFO - Completed forward migration 202406250800. +Jun 04, 2026 03:41:14.171 [140443274078864] INFO - Running forward migration 202407231422. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.172 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.173 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.173 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.174 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.175 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.175 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.176 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.177 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.177 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.178 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.179 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.179 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.180 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.181 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.181 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.182 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.183 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.183 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.184 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.184 [140443274078864] INFO - Completed forward migration 202407231422. +Jun 04, 2026 03:41:14.184 [140443274078864] INFO - Running forward migration 20240718114400. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.185 [140443274078864] INFO - Completed forward migration 20240718114400. +Jun 04, 2026 03:41:14.185 [140443274078864] INFO - Running forward migration 202407301359. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.186 [140443274078864] INFO - Completed forward migration 202407301359. +Jun 04, 2026 03:41:14.186 [140443274078864] INFO - Running forward migration 202409201238. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.187 [140443274078864] INFO - Completed forward migration 202409201238. +Jun 04, 2026 03:41:14.187 [140443274078864] INFO - Running forward migration 202502171508. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.187 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.188 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.189 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.189 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.190 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.191 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.191 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.192 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.192 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.193 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.194 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.194 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.195 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.196 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.196 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.197 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.198 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.198 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.199 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.200 [140443274078864] INFO - Completed forward migration 202502171508. +Jun 04, 2026 03:41:14.200 [140443274078864] INFO - Running forward migration 202503041220. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.200 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.201 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.201 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.202 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.203 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.203 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.204 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.205 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.205 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.206 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.207 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.207 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.208 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.209 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.209 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.210 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.211 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.211 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.212 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.213 [140443274078864] INFO - Completed forward migration 202503041220. +Jun 04, 2026 03:41:14.213 [140443274078864] INFO - Running forward migration 202503041514. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.213 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.214 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.215 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.215 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.216 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.217 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.217 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.218 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.219 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.219 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.220 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.221 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.221 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.222 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.222 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.223 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.224 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.224 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.225 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.226 [140443274078864] INFO - Completed forward migration 202503041514. +Jun 04, 2026 03:41:14.226 [140443274078864] INFO - Running forward migration 202504160804. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.226 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.227 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.227 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.228 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.229 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.229 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.230 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.231 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.231 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.232 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.233 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.234 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.234 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.235 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.236 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.237 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.237 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.238 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.239 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.239 [140443274078864] INFO - Completed forward migration 202504160804. +Jun 04, 2026 03:41:14.239 [140443274078864] INFO - Running forward migration 202504161541. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.247 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.248 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.248 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.249 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.250 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.250 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.251 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.252 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.253 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.253 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.254 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.255 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.255 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.256 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.256 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.257 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.258 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.258 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.259 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.260 [140443274078864] INFO - Completed forward migration 202504161541. +Jun 04, 2026 03:41:14.260 [140443274078864] INFO - Running forward migration 202504211423. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.260 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.261 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.261 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.262 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.263 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.263 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.264 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.265 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.265 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.266 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.267 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.267 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.268 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.269 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.269 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.270 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.271 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.271 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.272 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.272 [140443274078864] INFO - Completed forward migration 202504211423. +Jun 04, 2026 03:41:14.272 [140443274078864] INFO - Running forward migration 202504241552. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.273 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.273 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.274 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.275 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.275 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.276 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.277 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.277 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.278 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.279 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.279 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.280 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.281 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.281 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.282 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.283 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.283 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.284 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.285 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.285 [140443274078864] INFO - Completed forward migration 202504241552. +Jun 04, 2026 03:41:14.285 [140443274078864] INFO - Running forward migration 202504301225. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.286 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.286 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.287 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.288 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.288 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.289 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.290 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.290 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.291 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.292 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.292 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.293 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.293 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.294 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.295 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.295 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.296 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.297 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.297 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.298 [140443274078864] INFO - Completed forward migration 202504301225. +Jun 04, 2026 03:41:14.298 [140443274078864] INFO - Running forward migration 202507011200. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.299 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.299 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.300 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.301 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.301 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.302 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.303 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.303 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.304 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.304 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.305 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.306 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.306 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.307 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.308 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.308 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.309 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.310 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.310 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.311 [140443274078864] INFO - Completed forward migration 202507011200. +Jun 04, 2026 03:41:14.311 [140443274078864] INFO - Running forward migration 202507311200. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.312 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.313 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.314 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.314 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.315 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.316 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.316 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.317 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.318 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.318 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.319 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.320 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.320 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.321 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.322 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.322 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.323 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.324 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.324 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.325 [140443274078864] INFO - Completed forward migration 202507311200. +Jun 04, 2026 03:41:14.325 [140443274078864] INFO - Running forward migration 202510021115. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.326 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.326 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.327 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.328 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.328 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.329 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.330 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.331 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.331 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.332 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.333 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.333 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.334 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.335 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.335 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.336 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.337 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.337 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.338 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.339 [140443274078864] INFO - Completed forward migration 202510021115. +Jun 04, 2026 03:41:14.339 [140443274078864] INFO - Running forward migration 202601121053. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 2. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 3. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 4. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 5. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 6. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 7. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 8. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 9. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 10. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 11. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 12. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 13. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 14. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 15. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 16. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 17. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 18. +Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 19. +Jun 04, 2026 03:41:14.340 [140443274078864] INFO - Completed forward migration 202601121053. +Jun 04, 2026 03:41:14.340 [140443274078864] DEBUG - ChangestampAllocator: initialized to 0 +Jun 04, 2026 03:41:14.340 [140443274078864] DEBUG - Opening 2 database sessions to library (com.plexapp.plugins.library.blobs), SQLite 3.39.4, threadsafe=1 +Jun 04, 2026 03:41:14.340 [140443274078864] DEBUG - Installing Library Database from ["/usr/lib/plexmediaserver/Resources/com.plexapp.plugins.library.db"] to ["/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.blobs.db"] +Jun 04, 2026 03:41:14.342 [140443274078864] INFO - Running migrations. (EPG 0) +Jun 04, 2026 03:41:14.342 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.342 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.342 [140443274078864] INFO - Running forward migration 20190130000000. +Jun 04, 2026 03:41:14.342 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.342 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.344 [140443274078864] INFO - Completed forward migration 20190130000000. +Jun 04, 2026 03:41:14.344 [140443274078864] INFO - Running forward migration 20190201190600. +Jun 04, 2026 03:41:14.344 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.344 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.344 [140443274078864] INFO - Completed forward migration 20190201190600. +Jun 04, 2026 03:41:14.344 [140443274078864] INFO - Running forward migration 20190205190600. +Jun 04, 2026 03:41:14.344 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.344 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.345 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.346 [140443274078864] INFO - Completed forward migration 20190205190600. +Jun 04, 2026 03:41:14.346 [140443274078864] INFO - Running forward migration 20190215190600. +Jun 04, 2026 03:41:14.346 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.346 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.347 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.348 [140443274078864] INFO - Completed forward migration 20190215190600. +Jun 04, 2026 03:41:14.348 [140443274078864] INFO - Running forward migration 20190218032400. +Jun 04, 2026 03:41:14.348 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.348 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.348 [140443274078864] INFO - Completed forward migration 20190218032400. +Jun 04, 2026 03:41:14.348 [140443274078864] INFO - Running forward migration 20190316132700. +Jun 04, 2026 03:41:14.348 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.348 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.349 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.350 [140443274078864] INFO - Completed forward migration 20190316132700. +Jun 04, 2026 03:41:14.350 [140443274078864] INFO - Running forward migration 20190403100000. +Jun 04, 2026 03:41:14.350 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.350 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.350 [140443274078864] INFO - Completed forward migration 20190403100000. +Jun 04, 2026 03:41:14.350 [140443274078864] INFO - Running forward migration 20190501100000. +Jun 04, 2026 03:41:14.350 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.350 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.350 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Completed forward migration 20190501100000. +Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Running forward migration 20190528190600. +Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Completed forward migration 20190528190600. +Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Running forward migration 20190520131301. +Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Completed forward migration 20190520131301. +Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Running forward migration 20190520131302. +Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Completed forward migration 20190520131302. +Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Running forward migration 20190520131303. +Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Completed forward migration 20190520131303. +Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Running forward migration 20190603140000. +Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.352 [140443274078864] INFO - Completed forward migration 20190603140000. +Jun 04, 2026 03:41:14.352 [140443274078864] INFO - Running forward migration 20190612032400. +Jun 04, 2026 03:41:14.352 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.352 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.352 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.352 [140443274078864] INFO - Completed forward migration 20190612032400. +Jun 04, 2026 03:41:14.352 [140443274078864] INFO - Running forward migration 20190614032400. +Jun 04, 2026 03:41:14.352 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.352 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.353 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.354 [140443274078864] INFO - Completed forward migration 20190614032400. +Jun 04, 2026 03:41:14.354 [140443274078864] INFO - Running forward migration 20190708132500. +Jun 04, 2026 03:41:14.354 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.354 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.355 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.355 [140443274078864] INFO - Completed forward migration 20190708132500. +Jun 04, 2026 03:41:14.355 [140443274078864] INFO - Running forward migration 20190430032400. +Jun 04, 2026 03:41:14.355 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.355 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.356 [140443274078864] INFO - Completed forward migration 20190430032400. +Jun 04, 2026 03:41:14.356 [140443274078864] INFO - Running forward migration 20190111032400. +Jun 04, 2026 03:41:14.356 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.356 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.356 [140443274078864] INFO - Completed forward migration 20190111032400. +Jun 04, 2026 03:41:14.356 [140443274078864] INFO - Running forward migration 20190815130000. +Jun 04, 2026 03:41:14.356 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.356 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.356 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.357 [140443274078864] INFO - Completed forward migration 20190815130000. +Jun 04, 2026 03:41:14.357 [140443274078864] INFO - Running forward migration 20190912140000. +Jun 04, 2026 03:41:14.357 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.357 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.357 [140443274078864] INFO - Completed forward migration 20190912140000. +Jun 04, 2026 03:41:14.357 [140443274078864] INFO - Running forward migration 20180330131300. +Jun 04, 2026 03:41:14.357 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.357 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.358 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.358 [140443274078864] INFO - Completed forward migration 20180330131300. +Jun 04, 2026 03:41:14.358 [140443274078864] INFO - Running forward migration 20190801130200. +Jun 04, 2026 03:41:14.358 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.358 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.359 [140443274078864] INFO - Completed forward migration 20190801130200. +Jun 04, 2026 03:41:14.359 [140443274078864] INFO - Running forward migration 20190604032400. +Jun 04, 2026 03:41:14.359 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.359 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.359 [140443274078864] INFO - Completed forward migration 20190604032400. +Jun 04, 2026 03:41:14.359 [140443274078864] INFO - Running forward migration 20190919032400. +Jun 04, 2026 03:41:14.359 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.359 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.359 [140443274078864] INFO - Completed forward migration 20190919032400. +Jun 04, 2026 03:41:14.359 [140443274078864] INFO - Running forward migration 20190920032400. +Jun 04, 2026 03:41:14.359 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.359 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.360 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.360 [140443274078864] INFO - Completed forward migration 20190920032400. +Jun 04, 2026 03:41:14.360 [140443274078864] INFO - Running forward migration 20190616032400. +Jun 04, 2026 03:41:14.360 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.360 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.361 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.362 [140443274078864] INFO - Completed forward migration 20190616032400. +Jun 04, 2026 03:41:14.362 [140443274078864] INFO - Running forward migration 20191003131300. +Jun 04, 2026 03:41:14.362 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.362 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.362 [140443274078864] INFO - Completed forward migration 20191003131300. +Jun 04, 2026 03:41:14.362 [140443274078864] INFO - Running forward migration 20191213143300. +Jun 04, 2026 03:41:14.362 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.362 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.362 [140443274078864] INFO - Completed forward migration 20191213143300. +Jun 04, 2026 03:41:14.362 [140443274078864] INFO - Running forward migration 20200110143300. +Jun 04, 2026 03:41:14.362 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.362 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.363 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.363 [140443274078864] INFO - Completed forward migration 20200110143300. +Jun 04, 2026 03:41:14.363 [140443274078864] INFO - Running forward migration 20200114193300. +Jun 04, 2026 03:41:14.363 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.363 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.363 [140443274078864] INFO - Completed forward migration 20200114193300. +Jun 04, 2026 03:41:14.363 [140443274078864] INFO - Running forward migration 20200124193500. +Jun 04, 2026 03:41:14.363 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.363 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.365 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.365 [140443274078864] INFO - Completed forward migration 20200124193500. +Jun 04, 2026 03:41:14.365 [140443274078864] INFO - Running forward migration 20200131193503. +Jun 04, 2026 03:41:14.365 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.365 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.366 [140443274078864] INFO - Completed forward migration 20200131193503. +Jun 04, 2026 03:41:14.366 [140443274078864] INFO - Running forward migration 20191125131300. +Jun 04, 2026 03:41:14.366 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.366 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.366 [140443274078864] INFO - Completed forward migration 20191125131300. +Jun 04, 2026 03:41:14.366 [140443274078864] INFO - Running forward migration 20200224131300. +Jun 04, 2026 03:41:14.366 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.366 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.366 [140443274078864] INFO - Completed forward migration 20200224131300. +Jun 04, 2026 03:41:14.366 [140443274078864] INFO - Running forward migration 20200327131300. +Jun 04, 2026 03:41:14.366 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.366 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.367 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Completed forward migration 20200327131300. +Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Running forward migration 20200401131300. +Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Completed forward migration 20200401131300. +Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Running forward migration 20200506172900. +Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Completed forward migration 20200506172900. +Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Running forward migration 20200515172900. +Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Completed forward migration 20200515172900. +Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Running forward migration 20200610150000. +Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Completed forward migration 20200610150000. +Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Running forward migration 20200615032400. +Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Completed forward migration 20200615032400. +Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Running forward migration 20200701090000. +Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Completed forward migration 20200701090000. +Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Running forward migration 20200728130000. +Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Completed forward migration 20200728130000. +Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Running forward migration 20200731130000. +Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Completed forward migration 20200731130000. +Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Running forward migration 20200812130000. +Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Completed forward migration 20200812130000. +Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Running forward migration 20200921130000. +Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.370 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.370 [140443274078864] INFO - Completed forward migration 20200921130000. +Jun 04, 2026 03:41:14.370 [140443274078864] INFO - Running forward migration 20201103130000. +Jun 04, 2026 03:41:14.370 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.370 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.371 [140443274078864] INFO - Completed forward migration 20201103130000. +Jun 04, 2026 03:41:14.371 [140443274078864] INFO - Running forward migration 20201119130000. +Jun 04, 2026 03:41:14.371 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.371 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.371 [140443274078864] INFO - Completed forward migration 20201119130000. +Jun 04, 2026 03:41:14.371 [140443274078864] INFO - Running forward migration 20210304150000. +Jun 04, 2026 03:41:14.371 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.371 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.371 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.372 [140443274078864] INFO - Completed forward migration 20210304150000. +Jun 04, 2026 03:41:14.372 [140443274078864] INFO - Running forward migration 500000000000. +Jun 04, 2026 03:41:14.372 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.372 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.372 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.373 [140443274078864] INFO - Completed forward migration 500000000000. +Jun 04, 2026 03:41:14.373 [140443274078864] INFO - Running forward migration 500000000001. +Jun 04, 2026 03:41:14.373 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.373 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.377 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.377 [140443274078864] INFO - Completed forward migration 500000000001. +Jun 04, 2026 03:41:14.377 [140443274078864] INFO - Running forward migration 20210628131300. +Jun 04, 2026 03:41:14.377 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.377 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.378 [140443274078864] INFO - Completed forward migration 20210628131300. +Jun 04, 2026 03:41:14.378 [140443274078864] INFO - Running forward migration 202107070000. +Jun 04, 2026 03:41:14.378 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.378 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.378 [140443274078864] INFO - Completed forward migration 202107070000. +Jun 04, 2026 03:41:14.378 [140443274078864] INFO - Running forward migration 202107221100. +Jun 04, 2026 03:41:14.378 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.378 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.378 [140443274078864] INFO - Completed forward migration 202107221100. +Jun 04, 2026 03:41:14.378 [140443274078864] INFO - Running forward migration 20210726150000. +Jun 04, 2026 03:41:14.378 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.378 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.379 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.380 [140443274078864] INFO - Completed forward migration 20210726150000. +Jun 04, 2026 03:41:14.380 [140443274078864] INFO - Running forward migration 20210830032400. +Jun 04, 2026 03:41:14.380 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.380 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.380 [140443274078864] INFO - Completed forward migration 20210830032400. +Jun 04, 2026 03:41:14.380 [140443274078864] INFO - Running forward migration 202109061500. +Jun 04, 2026 03:41:14.380 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.380 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.381 [140443274078864] INFO - Completed forward migration 202109061500. +Jun 04, 2026 03:41:14.381 [140443274078864] INFO - Running forward migration 20210922132300. +Jun 04, 2026 03:41:14.381 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.381 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.381 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Completed forward migration 20210922132300. +Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Running forward migration 20211027132200. +Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Completed forward migration 20211027132200. +Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Running forward migration 20211116115800. +Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Completed forward migration 20211116115800. +Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Running forward migration 20211208163900. +Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Completed forward migration 20211208163900. +Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Running forward migration 202203040100. +Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.383 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.383 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.384 [140443274078864] INFO - Completed forward migration 202203040100. +Jun 04, 2026 03:41:14.384 [140443274078864] INFO - Running forward migration 202203220200. +Jun 04, 2026 03:41:14.384 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.384 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.385 [140443274078864] INFO - Completed forward migration 202203220200. +Jun 04, 2026 03:41:14.385 [140443274078864] INFO - Running forward migration 202204252200. +Jun 04, 2026 03:41:14.385 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.385 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.385 [140443274078864] INFO - Completed forward migration 202204252200. +Jun 04, 2026 03:41:14.386 [140443274078864] INFO - Running forward migration 202204252300. +Jun 04, 2026 03:41:14.386 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.386 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.386 [140443274078864] INFO - Completed forward migration 202204252300. +Jun 04, 2026 03:41:14.386 [140443274078864] INFO - Running forward migration 202204252330. +Jun 04, 2026 03:41:14.386 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.386 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.387 [140443274078864] INFO - Completed forward migration 202204252330. +Jun 04, 2026 03:41:14.387 [140443274078864] INFO - Running forward migration 202205090900. +Jun 04, 2026 03:41:14.387 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.387 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.388 [140443274078864] INFO - Completed forward migration 202205090900. +Jun 04, 2026 03:41:14.388 [140443274078864] INFO - Running forward migration 202205090930. +Jun 04, 2026 03:41:14.388 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.388 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.389 [140443274078864] INFO - Completed forward migration 202205090930. +Jun 04, 2026 03:41:14.389 [140443274078864] INFO - Running forward migration 202205090940. +Jun 04, 2026 03:41:14.389 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.389 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.390 [140443274078864] INFO - Completed forward migration 202205090940. +Jun 04, 2026 03:41:14.390 [140443274078864] INFO - Running forward migration 202205091600. +Jun 04, 2026 03:41:14.390 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.390 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.391 [140443274078864] INFO - Completed forward migration 202205091600. +Jun 04, 2026 03:41:14.391 [140443274078864] INFO - Running forward migration 202205091700. +Jun 04, 2026 03:41:14.391 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.391 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.392 [140443274078864] INFO - Completed forward migration 202205091700. +Jun 04, 2026 03:41:14.392 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.392 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.392 [140443274078864] INFO - Analyzing database. +Jun 04, 2026 03:41:14.393 [140443274078864] INFO - Vacuuming database. +Jun 04, 2026 03:41:14.421 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.422 [140443274078864] INFO - Running forward migration 202205181200. +Jun 04, 2026 03:41:14.422 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.422 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.422 [140443274078864] INFO - Completed forward migration 202205181200. +Jun 04, 2026 03:41:14.422 [140443274078864] INFO - Running forward migration 202206291100. +Jun 04, 2026 03:41:14.422 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.422 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.423 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.424 [140443274078864] INFO - Completed forward migration 202206291100. +Jun 04, 2026 03:41:14.424 [140443274078864] INFO - Running forward migration 20220818122500. +Jun 04, 2026 03:41:14.424 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.424 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.424 [140443274078864] INFO - Completed forward migration 20220818122500. +Jun 04, 2026 03:41:14.424 [140443274078864] INFO - Running forward migration 202209091100. +Jun 04, 2026 03:41:14.424 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.424 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.424 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.425 [140443274078864] INFO - Completed forward migration 202209091100. +Jun 04, 2026 03:41:14.425 [140443274078864] INFO - Running forward migration 20220911115800. +Jun 04, 2026 03:41:14.425 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.425 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.425 [140443274078864] INFO - Completed forward migration 20220911115800. +Jun 04, 2026 03:41:14.425 [140443274078864] INFO - Running forward migration 202209271322. +Jun 04, 2026 03:41:14.425 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.425 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.429 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.430 [140443274078864] INFO - Completed forward migration 202209271322. +Jun 04, 2026 03:41:14.430 [140443274078864] INFO - Running forward migration 202210260000. +Jun 04, 2026 03:41:14.430 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.430 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.431 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.431 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.431 [140443274078864] INFO - Completed forward migration 202210260000. +Jun 04, 2026 03:41:14.431 [140443274078864] INFO - Running forward migration 202210260100. +Jun 04, 2026 03:41:14.431 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.431 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.432 [140443274078864] INFO - Completed forward migration 202210260100. +Jun 04, 2026 03:41:14.432 [140443274078864] INFO - Running forward migration 202210260200. +Jun 04, 2026 03:41:14.432 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.432 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.433 [140443274078864] INFO - Completed forward migration 202210260200. +Jun 04, 2026 03:41:14.433 [140443274078864] INFO - Running forward migration 202212012200. +Jun 04, 2026 03:41:14.433 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.433 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.434 [140443274078864] INFO - Completed forward migration 202212012200. +Jun 04, 2026 03:41:14.434 [140443274078864] INFO - Running forward migration 202212012300. +Jun 04, 2026 03:41:14.434 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.434 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.435 [140443274078864] INFO - Completed forward migration 202212012300. +Jun 04, 2026 03:41:14.435 [140443274078864] INFO - Running forward migration 202212022100. +Jun 04, 2026 03:41:14.435 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.435 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.435 [140443274078864] INFO - Completed forward migration 202212022100. +Jun 04, 2026 03:41:14.435 [140443274078864] INFO - Running forward migration 202212022200. +Jun 04, 2026 03:41:14.435 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.435 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.436 [140443274078864] INFO - Completed forward migration 202212022200. +Jun 04, 2026 03:41:14.436 [140443274078864] INFO - Running forward migration 202212022300. +Jun 04, 2026 03:41:14.436 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.436 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.437 [140443274078864] INFO - Completed forward migration 202212022300. +Jun 04, 2026 03:41:14.437 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.437 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.437 [140443274078864] INFO - Analyzing database. +Jun 04, 2026 03:41:14.438 [140443274078864] INFO - Vacuuming database. +Jun 04, 2026 03:41:14.467 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.468 [140443274078864] INFO - Running forward migration 202301280000. +Jun 04, 2026 03:41:14.468 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.468 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.468 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.469 [140443274078864] INFO - Completed forward migration 202301280000. +Jun 04, 2026 03:41:14.469 [140443274078864] INFO - Running forward migration 20230118160000. +Jun 04, 2026 03:41:14.469 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.469 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.469 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Completed forward migration 20230118160000. +Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Running forward migration 20230830160000. +Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Completed forward migration 20230830160000. +Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Running forward migration 202309200901. +Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Completed forward migration 202309200901. +Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Running forward migration 202309200902. +Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Completed forward migration 202309200902. +Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Running forward migration 202309200903. +Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200903. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200904. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200904. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200905. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200905. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200906. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200906. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200907. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200907. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200908. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200908. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200909. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200909. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200910. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200910. +Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200911. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200911. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200912. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200912. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200913. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200913. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200914. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200914. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200915. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200915. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200916. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200916. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200917. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200917. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200918. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200918. +Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200919. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.473 [140443274078864] INFO - Completed forward migration 202309200919. +Jun 04, 2026 03:41:14.473 [140443274078864] INFO - Running forward migration 202311120800. +Jun 04, 2026 03:41:14.473 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.473 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.473 [140443274078864] INFO - Completed forward migration 202311120800. +Jun 04, 2026 03:41:14.473 [140443274078864] INFO - Running forward migration 202311171400. +Jun 04, 2026 03:41:14.473 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.473 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.473 [140443274078864] INFO - Completed forward migration 202311171400. +Jun 04, 2026 03:41:14.473 [140443274078864] INFO - Running forward migration 20231120161500. +Jun 04, 2026 03:41:14.473 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.473 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.474 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.475 [140443274078864] INFO - Completed forward migration 20231120161500. +Jun 04, 2026 03:41:14.475 [140443274078864] INFO - Running forward migration 202312190800. +Jun 04, 2026 03:41:14.475 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.475 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.475 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.475 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.475 [140443274078864] INFO - Completed forward migration 202312190800. +Jun 04, 2026 03:41:14.475 [140443274078864] INFO - Running forward migration 202401290800. +Jun 04, 2026 03:41:14.475 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.475 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.476 [140443274078864] INFO - Completed forward migration 202401290800. +Jun 04, 2026 03:41:14.476 [140443274078864] INFO - Running forward migration 202401290801. +Jun 04, 2026 03:41:14.476 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.476 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.477 [140443274078864] INFO - Completed forward migration 202401290801. +Jun 04, 2026 03:41:14.477 [140443274078864] INFO - Running forward migration 202401290802. +Jun 04, 2026 03:41:14.477 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.477 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.478 [140443274078864] INFO - Completed forward migration 202401290802. +Jun 04, 2026 03:41:14.478 [140443274078864] INFO - Running forward migration 202401290803. +Jun 04, 2026 03:41:14.478 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.478 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.479 [140443274078864] INFO - Completed forward migration 202401290803. +Jun 04, 2026 03:41:14.479 [140443274078864] INFO - Running forward migration 202401290804. +Jun 04, 2026 03:41:14.479 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.479 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.480 [140443274078864] INFO - Completed forward migration 202401290804. +Jun 04, 2026 03:41:14.480 [140443274078864] INFO - Running forward migration 202401290805. +Jun 04, 2026 03:41:14.480 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.480 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.481 [140443274078864] INFO - Completed forward migration 202401290805. +Jun 04, 2026 03:41:14.481 [140443274078864] INFO - Running forward migration 202401290806. +Jun 04, 2026 03:41:14.481 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.481 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.482 [140443274078864] INFO - Completed forward migration 202401290806. +Jun 04, 2026 03:41:14.482 [140443274078864] INFO - Running forward migration 202401290807. +Jun 04, 2026 03:41:14.482 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.482 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.482 [140443274078864] INFO - Completed forward migration 202401290807. +Jun 04, 2026 03:41:14.482 [140443274078864] INFO - Running forward migration 202401290808. +Jun 04, 2026 03:41:14.482 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.482 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.484 [140443274078864] INFO - Completed forward migration 202401290808. +Jun 04, 2026 03:41:14.484 [140443274078864] INFO - Running forward migration 202402260801. +Jun 04, 2026 03:41:14.484 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.484 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.484 [140443274078864] INFO - Completed forward migration 202402260801. +Jun 04, 2026 03:41:14.484 [140443274078864] INFO - Running forward migration 202402260802. +Jun 04, 2026 03:41:14.484 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.484 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.485 [140443274078864] INFO - Completed forward migration 202402260802. +Jun 04, 2026 03:41:14.485 [140443274078864] INFO - Running forward migration 202402260803. +Jun 04, 2026 03:41:14.485 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.485 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.486 [140443274078864] INFO - Completed forward migration 202402260803. +Jun 04, 2026 03:41:14.486 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.486 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.486 [140443274078864] INFO - Analyzing database. +Jun 04, 2026 03:41:14.487 [140443274078864] INFO - Vacuuming database. +Jun 04, 2026 03:41:14.510 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.511 [140443274078864] INFO - Running forward migration 202403110800. +Jun 04, 2026 03:41:14.511 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.511 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.511 [140443274078864] INFO - Completed forward migration 202403110800. +Jun 04, 2026 03:41:14.511 [140443274078864] INFO - Running forward migration 202403120800. +Jun 04, 2026 03:41:14.511 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.511 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.512 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.513 [140443274078864] INFO - Completed forward migration 202403120800. +Jun 04, 2026 03:41:14.513 [140443274078864] INFO - Running forward migration 202404300800. +Jun 04, 2026 03:41:14.513 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.513 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.513 [140443274078864] INFO - Completed forward migration 202404300800. +Jun 04, 2026 03:41:14.513 [140443274078864] INFO - Running forward migration 202406050800. +Jun 04, 2026 03:41:14.513 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.513 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.513 [140443274078864] INFO - Completed forward migration 202406050800. +Jun 04, 2026 03:41:14.513 [140443274078864] INFO - Running forward migration 202406250800. +Jun 04, 2026 03:41:14.513 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.513 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.514 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.514 [140443274078864] INFO - Completed forward migration 202406250800. +Jun 04, 2026 03:41:14.514 [140443274078864] INFO - Running forward migration 202407231422. +Jun 04, 2026 03:41:14.514 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.514 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.515 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Completed forward migration 202407231422. +Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Running forward migration 20240718114400. +Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Completed forward migration 20240718114400. +Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Running forward migration 202407301359. +Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Completed forward migration 202407301359. +Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Running forward migration 202409201238. +Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Completed forward migration 202409201238. +Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Running forward migration 202502171508. +Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.517 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.518 [140443274078864] INFO - Completed forward migration 202502171508. +Jun 04, 2026 03:41:14.518 [140443274078864] INFO - Running forward migration 202503041220. +Jun 04, 2026 03:41:14.518 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.518 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.518 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.519 [140443274078864] INFO - Completed forward migration 202503041220. +Jun 04, 2026 03:41:14.519 [140443274078864] INFO - Running forward migration 202503041514. +Jun 04, 2026 03:41:14.519 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.519 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.520 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.520 [140443274078864] INFO - Completed forward migration 202503041514. +Jun 04, 2026 03:41:14.520 [140443274078864] INFO - Running forward migration 202504160804. +Jun 04, 2026 03:41:14.520 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.520 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.521 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.521 [140443274078864] INFO - Completed forward migration 202504160804. +Jun 04, 2026 03:41:14.521 [140443274078864] INFO - Running forward migration 202504161541. +Jun 04, 2026 03:41:14.521 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.521 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.530 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.530 [140443274078864] INFO - Completed forward migration 202504161541. +Jun 04, 2026 03:41:14.530 [140443274078864] INFO - Running forward migration 202504211423. +Jun 04, 2026 03:41:14.530 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.530 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.531 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.531 [140443274078864] INFO - Completed forward migration 202504211423. +Jun 04, 2026 03:41:14.531 [140443274078864] INFO - Running forward migration 202504241552. +Jun 04, 2026 03:41:14.531 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.531 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.531 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.532 [140443274078864] INFO - Completed forward migration 202504241552. +Jun 04, 2026 03:41:14.532 [140443274078864] INFO - Running forward migration 202504301225. +Jun 04, 2026 03:41:14.532 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.532 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.533 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.533 [140443274078864] INFO - Completed forward migration 202504301225. +Jun 04, 2026 03:41:14.533 [140443274078864] INFO - Running forward migration 202507011200. +Jun 04, 2026 03:41:14.533 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.533 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.534 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.535 [140443274078864] INFO - Completed forward migration 202507011200. +Jun 04, 2026 03:41:14.535 [140443274078864] INFO - Running forward migration 202507311200. +Jun 04, 2026 03:41:14.535 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.535 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.537 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.538 [140443274078864] INFO - Completed forward migration 202507311200. +Jun 04, 2026 03:41:14.538 [140443274078864] INFO - Running forward migration 202510021115. +Jun 04, 2026 03:41:14.538 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.538 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.538 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:41:14.539 [140443274078864] INFO - Completed forward migration 202510021115. +Jun 04, 2026 03:41:14.539 [140443274078864] INFO - Running forward migration 202601121053. +Jun 04, 2026 03:41:14.539 [140443274078864] DEBUG - Captured session 0. +Jun 04, 2026 03:41:14.539 [140443274078864] DEBUG - Captured session 1. +Jun 04, 2026 03:41:14.539 [140443274078864] INFO - Completed forward migration 202601121053. +Jun 04, 2026 03:41:14.544 [140443251936056] DEBUG - Grabber: Cleaning up orphaned grabs. +Jun 04, 2026 03:41:14.544 [140443251936056] DEBUG - Grabber: Cleaned up 0 decrepit directories in 0.0 sec. +Jun 04, 2026 03:41:14.544 [140443274078864] DEBUG - Media Provider: Registering provider com.plexapp.plugins.library +Jun 04, 2026 03:41:14.544 [140443274078864] DEBUG - Auth: Refreshing tokens inside the token-based authentication filter. +Jun 04, 2026 03:41:14.544 [140443251936056] DEBUG - Auth: Refreshing tokens inside the token-based authentication filter. +Jun 04, 2026 03:41:14.544 [140443274078864] DEBUG - Opening 1 database sessions to library (), SQLite 3.39.4, threadsafe=1 +Jun 04, 2026 03:41:14.545 [140443249711928] DEBUG - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea" changed: -1 => 2026-05-19 18:20:18 (1779214818). +Jun 04, 2026 03:41:14.545 [140443249711928] WARN - Warning: ex: boost::filesystem::last_write_time: No such file or directory [system:2]: "/config/Library/Application Support/Plex Media Server/Plug-ins", couldn't check file: "/config/Library/Application Support/Plex Media Server/Plug-ins" +Jun 04, 2026 03:41:14.545 [140443249711928] DEBUG - Scanning for plug-ins in "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea" +Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - Scanning for plug-ins in "/config/Library/Application Support/Plex Media Server/Plug-ins" +Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - PluginRepository::setStartState: 1, startingSystem +Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/System.bundle. +Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - [com.plexapp.system] Setting plug-in to always running (daemon mode). +Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - Starting file watcher for com.plexapp.system +Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - Spawned plug-in com.plexapp.system with PID 293 +Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - [com.plexapp.system] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:14.948 [140443245435704] DEBUG - Request: [127.0.0.1:59932 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #1 GZIP Token () +Jun 04, 2026 03:41:14.948 [140443259251512] DEBUG - Completed: [127.0.0.1:59932] 503 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #1 GZIP 0ms 436 bytes +Jun 04, 2026 03:41:14.948 [140443245435704] DEBUG - Request: [127.0.0.1:59948 (Loopback)] GET / (3 live) #3 GZIP Token () +Jun 04, 2026 03:41:14.948 [140443261360952] DEBUG - Completed: [127.0.0.1:59948] 503 GET / (2 live) #3 GZIP 0ms 436 bytes +Jun 04, 2026 03:41:15.212 [140443245435704] DEBUG - Request: [127.0.0.1:59960 (Loopback)] GET /:/plugins/com.plexapp.agents.fanarttv (2 live) #4 GZIP Token () +Jun 04, 2026 03:41:15.212 [140443259251512] DEBUG - Completed: [127.0.0.1:59960] 503 GET /:/plugins/com.plexapp.agents.fanarttv (2 live) #4 GZIP 0ms 436 bytes +Jun 04, 2026 03:41:15.214 [140443245435704] DEBUG - Request: [127.0.0.1:59964 (Loopback)] GET /servers (2 live) #8 GZIP Token () +Jun 04, 2026 03:41:15.214 [140443261360952] DEBUG - Completed: [127.0.0.1:59964] 503 GET /servers (2 live) #8 GZIP 0ms 436 bytes +Jun 04, 2026 03:41:15.217 [140443245435704] DEBUG - Request: [127.0.0.1:59976 (Loopback)] GET /:/plugins/org.musicbrainz.agents.music (2 live) #a GZIP Token () +Jun 04, 2026 03:41:15.217 [140443259251512] DEBUG - Completed: [127.0.0.1:59976] 503 GET /:/plugins/org.musicbrainz.agents.music (2 live) #a GZIP 0ms 436 bytes +Jun 04, 2026 03:41:15.220 [140443245435704] DEBUG - Request: [127.0.0.1:59984 (Loopback)] GET /:/plugins/com.plexapp.agents.lyricfind (2 live) #c GZIP Token () +Jun 04, 2026 03:41:15.220 [140443259251512] DEBUG - Completed: [127.0.0.1:59984] 503 GET /:/plugins/com.plexapp.agents.lyricfind (2 live) #c GZIP 0ms 436 bytes +Jun 04, 2026 03:41:15.223 [140443245435704] DEBUG - Request: [127.0.0.1:59994 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #e GZIP Token () +Jun 04, 2026 03:41:15.223 [140443261360952] DEBUG - Completed: [127.0.0.1:59994] 503 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #e GZIP 0ms 436 bytes +Jun 04, 2026 03:41:15.225 [140443245435704] DEBUG - Request: [127.0.0.1:60010 (Loopback)] GET /:/plugins/com.plexapp.agents.themoviedb (2 live) #10 GZIP Token () +Jun 04, 2026 03:41:15.225 [140443261360952] DEBUG - Completed: [127.0.0.1:60010] 503 GET /:/plugins/com.plexapp.agents.themoviedb (2 live) #10 GZIP 0ms 436 bytes +Jun 04, 2026 03:41:15.228 [140443245435704] DEBUG - Request: [127.0.0.1:60018 (Loopback)] GET /:/plugins/com.plexapp.agents.localmedia (2 live) #12 GZIP Token () +Jun 04, 2026 03:41:15.228 [140443261360952] DEBUG - Completed: [127.0.0.1:60018] 503 GET /:/plugins/com.plexapp.agents.localmedia (2 live) #12 GZIP 0ms 436 bytes +Jun 04, 2026 03:41:15.230 [140443245435704] DEBUG - Request: [127.0.0.1:60034 (Loopback)] GET /:/plugins/com.plexapp.agents.none (2 live) #14 GZIP Token () +Jun 04, 2026 03:41:15.230 [140443261360952] DEBUG - Completed: [127.0.0.1:60034] 503 GET /:/plugins/com.plexapp.agents.none (2 live) #14 GZIP 0ms 436 bytes +Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - Reading 486 bytes in the body, code is 200 +Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - [com.plexapp.system] Plug-in running on port 33755. +Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - * Plug-in handles prefix: /system +Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - * Plug-in handles prefix: /player +Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - Read configuration for [com.plexapp.system], had 2 prefixes +Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - Updating [com.plexapp.system] in the database, it has changed. +Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - Done with 1 synchronous plug-in starts, starting the rest in parallel. +Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - PluginRepository::setStartState: 2, startingPlugins +Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - Updating the list of agents known by the system. +Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents +Jun 04, 2026 03:41:15.232 [140443249711928] DEBUG - [HCl#1] HTTP requesting GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:15.232 [140443274078864] DEBUG - Image transcode cache directory: "/config/Library/Application Support/Plex Media Server/Cache/PhotoTranscoder" +Jun 04, 2026 03:41:15.232 [140443245435704] DEBUG - Request: [127.0.0.1:60050 (Loopback)] GET /:/plugins/com.plexapp.agents.plexthememusic (2 live) #16 GZIP Token () +Jun 04, 2026 03:41:15.232 [140443261360952] DEBUG - Completed: [127.0.0.1:60050] 503 GET /:/plugins/com.plexapp.agents.plexthememusic (2 live) #16 GZIP 0ms 436 bytes +Jun 04, 2026 03:41:15.232 [140443274078864] DEBUG - Transcoder: Cleaning old transcode directories. +Jun 04, 2026 03:41:15.232 [140443274078864] DEBUG - MyPlex: stop public ip check and mapping - current mapped state: 'Unknown'. +Jun 04, 2026 03:41:15.232 [140443274078864] DEBUG - NetworkInterface: Starting watch thread. +Jun 04, 2026 03:41:15.232 [140443274078864] DEBUG - Network change. +Jun 04, 2026 03:41:15.232 [140443274078864] DEBUG - NetworkInterface: Notified of network changed (force=0) +Jun 04, 2026 03:41:15.233 [140443238914872] DEBUG - NetworkInterface: Watching for changes on the interfaces. +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - Detected primary interface: 172.22.0.2 +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - Network interfaces: +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - * 1 lo (127.0.0.1) (00-00-00-00-00-00) (loopback: 1) +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - * 2 eth0 (172.22.0.2) (86-A2-90-EC-DD-8A) (loopback: 0) +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - * 1 lo (::1) (00-00-00-00-00-00) (loopback: 1) +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - Creating NetworkServices singleton. +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkServices: Initializing... +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Creating new service. +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Got notification of changed network (first change: 1) +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Quick dispatch of network change. +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Creating new service. +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - Network change for advertiser. +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Got notification of changed network (first change: 1) +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Quick dispatch of network change. +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Creating new service. +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Setting up multicast listener on 0.0.0.0:32414 +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Got notification of changed network (first change: 1) +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Quick dispatch of network change. +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Creating new service. +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Got notification of changed network (first change: 1) +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Quick dispatch of network change. +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Creating new service. +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Got notification of changed network (first change: 1) +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Quick dispatch of network change. +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Creating new service. +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Got notification of changed network (first change: 1) +Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Quick dispatch of network change. +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - Network change for advertiser. +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Setting up multicast listener on 0.0.0.0:32410 +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - Network change for advertiser. +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Setting up multicast listener on 0.0.0.0:32412 +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Network change for browser (polled=0), closing 0 browse sockets. +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Setting up multicast listener on 0.0.0.0:32413 +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Browsing on interface 127.0.0.1 on broadcast address 127.255.255.255 (index: 0) +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Browsing on interface 172.22.0.2 on broadcast address 172.22.255.255 (index: 1) +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Network change for browser (polled=1), closing 0 browse sockets. +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Browsing on interface 127.0.0.1 on broadcast address 127.255.255.255 (index: 0) +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Browsing on interface 172.22.0.2 on broadcast address 172.22.255.255 (index: 1) +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Network change for browser (polled=0), closing 0 browse sockets. +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Setting up multicast listener on 0.0.0.0:1901 +Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Browsing on interface 172.22.0.2 on broadcast address 239.255.255.250 (index: 0) +Jun 04, 2026 03:41:15.234 [140443232586552] DEBUG - [ChildProcessMonitor] Plex Tuner Service starting. +Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups] Running fix-ups. +Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/31DatabaseFixupsCleanupRetroGames] Executing fixup +Jun 04, 2026 03:41:15.234 [140443232586552] DEBUG - [ChildProcessMonitor/JobRunner] Job running: "/usr/lib/plexmediaserver/Plex Tuner Service" /usr/lib/plexmediaserver/Resources/Tuner/Private /usr/lib/plexmediaserver/Resources/Tuner/Shared 1.43.2.10687-563d026ea 32600 +Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/31DatabaseFixupsCleanupRetroGames] Fixup completed +Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/39DatabaseFixupsEnsureLibrarySectionUuids] Executing fixup +Jun 04, 2026 03:41:15.234 [140443234695992] DEBUG - [HCl#2] HTTP requesting GET https://plex.tv/api/v2/release_channels?X-Plex-Token= +Jun 04, 2026 03:41:15.234 [140443232586552] DEBUG - [ChildProcessMonitor/JobRunner] Jobs: Starting child process with pid 341 +Jun 04, 2026 03:41:15.234 [140443274078864] DEBUG - Waiting for server condition to be signaled. +Jun 04, 2026 03:41:15.234 [140443230477112] DEBUG - [HCl#3] HTTP requesting GET https://plex.tv/api/v2/user/privacy?X-Plex-Token= +Jun 04, 2026 03:41:15.234 [140443224148792] DEBUG - [HCl#4] HTTP requesting GET https://plex.tv/api/v2/features?X-Plex-Token= +Jun 04, 2026 03:41:15.234 [140443219913528] DEBUG - DVR: Starting up. +Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/39DatabaseFixupsEnsureLibrarySectionUuids] Fixup completed +Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/38DatabaseFixupsEnsureMetadataItemHashes] Executing fixup +Jun 04, 2026 03:41:15.234 [140443217804088] DEBUG - MyPlex: Sending unclaimed device connections +Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/38DatabaseFixupsEnsureMetadataItemHashes] Fixup completed +Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/39DatabaseFixupsSetDefaultAccountLanguage] Executing fixup +Jun 04, 2026 03:41:15.234 [140443217804088] DEBUG - [HCl#5] HTTP requesting POST https://plex.tv/devices/b4e051156514c3673d6305f3df48b2bd645d6fd5/unclaimed?Connection[][uri]=http://172.22.0.2:32400 +Jun 04, 2026 03:41:15.235 [140443219913528] DEBUG - Activity: registered new activity 6b799016-6b14-47d1-9b4e-8a01dab8a338 - "Processing subscriptions" +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Request: [127.0.0.1:60060 (Loopback)] GET /:/plugins/com.plexapp.agents.htbackdrops (2 live) #18 GZIP Token () +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale af +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale ar +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale cs_CZ +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale da +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale de +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale en +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale es +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale et_EE +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale fi +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale fr +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale he +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale hr_HR +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale hu +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale hu_HU +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale it +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale ja_JP +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale ko +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale lt +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale nl +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale nl_BE +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale no +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale pl +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale pt +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale pt_BR +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale ro +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale ru +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale sk +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale sl +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale sr +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale sv +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale uk +Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale zh_CN +Jun 04, 2026 03:41:15.236 [140443251936056] DEBUG - [DatabaseFixups/39DatabaseFixupsSetDefaultAccountLanguage] MyPlex: Update my mapping state on myPlex +Jun 04, 2026 03:41:15.236 [140443251936056] DEBUG - [DatabaseFixups/39DatabaseFixupsSetDefaultAccountLanguage] Fixup completed +Jun 04, 2026 03:41:15.236 [140443251936056] DEBUG - [DatabaseFixups/52DatabaseFixupsCreateDefaultMediaProcessingTargetTags] Executing fixup +Jun 04, 2026 03:41:15.236 [140443207035704] DEBUG - MyPlex: mapping state set to 'Mapped - Not Published'. +Jun 04, 2026 03:41:15.237 [140443251936056] DEBUG - [DatabaseFixups/52DatabaseFixupsCreateDefaultMediaProcessingTargetTags] Fixup completed +Jun 04, 2026 03:41:15.237 [140443251936056] DEBUG - [DatabaseFixups/43DatabaseFixupsUpdateAutomaticLibraryFolders] Executing fixup +Jun 04, 2026 03:41:15.237 [140443251936056] DEBUG - [DatabaseFixups/43DatabaseFixupsUpdateAutomaticLibraryFolders] Fixup completed +Jun 04, 2026 03:41:15.238 [140443251936056] DEBUG - [DatabaseFixups/29DatabaseFixupsSyncCollections] Executing fixup +Jun 04, 2026 03:41:15.238 [140443251936056] DEBUG - [DatabaseFixups/29DatabaseFixupsSyncCollections] Fixup completed +Jun 04, 2026 03:41:15.238 [140443251936056] DEBUG - [DatabaseFixups/31DatabaseFixupsCleanupActivities] Executing fixup +Jun 04, 2026 03:41:15.238 [140443245435704] WARN - [Req#18] Request for plug-in [com.plexapp.agents.htbackdrops] but it doesn't exist. +Jun 04, 2026 03:41:15.239 [140443261360952] DEBUG - Completed: [127.0.0.1:60060] 404 GET /:/plugins/com.plexapp.agents.htbackdrops (2 live) #18 GZIP 3ms 350 bytes +Jun 04, 2026 03:41:15.239 [140443251936056] DEBUG - [DatabaseFixups/31DatabaseFixupsCleanupActivities] Fixup completed +Jun 04, 2026 03:41:15.239 [140443251936056] DEBUG - [DatabaseFixups/35DatabaseFixupsConsolidatePeopleTags] Executing fixup +Jun 04, 2026 03:41:15.240 [140443251936056] DEBUG - [DatabaseFixups/35DatabaseFixupsConsolidatePeopleTags] Fixup completed +Jun 04, 2026 03:41:15.240 [140443251936056] DEBUG - [DatabaseFixups/54DatabaseFixupsGarbageCollectTransientMetadataRelations] Executing fixup +Jun 04, 2026 03:41:15.240 [140443251936056] DEBUG - [DatabaseFixups/54DatabaseFixupsGarbageCollectTransientMetadataRelations] Fixup completed +Jun 04, 2026 03:41:15.240 [140443251936056] DEBUG - [DatabaseFixups/48DatabaseFixupsResetCorruptedMetadataItemClusters] Executing fixup +Jun 04, 2026 03:41:15.240 [140443251936056] DEBUG - [DatabaseFixups/48DatabaseFixupsResetCorruptedMetadataItemClusters] Fixup completed +Jun 04, 2026 03:41:15.240 [140443251936056] DEBUG - [DatabaseFixups] Running database fix-ups completed in 0.0 seconds. +Jun 04, 2026 03:41:15.242 [140443245435704] DEBUG - Request: [127.0.0.1:60070 (Loopback)] GET /:/plugins/com.plexapp.agents.movieposterdb (2 live) #1c GZIP Token () +Jun 04, 2026 03:41:15.242 [140443245435704] WARN - [Req#1c] Request for plug-in [com.plexapp.agents.movieposterdb] but it doesn't exist. +Jun 04, 2026 03:41:15.242 [140443261360952] DEBUG - Completed: [127.0.0.1:60070] 404 GET /:/plugins/com.plexapp.agents.movieposterdb (2 live) #1c GZIP 0ms 350 bytes +Jun 04, 2026 03:41:15.244 [140443245435704] DEBUG - Request: [127.0.0.1:60084 (Loopback)] GET /:/plugins/com.plexapp.agents.lastfm (2 live) #1e GZIP Token () +Jun 04, 2026 03:41:15.244 [140443245435704] WARN - [Req#1e] Request for plug-in [com.plexapp.agents.lastfm] but it doesn't exist. +Jun 04, 2026 03:41:15.244 [140443261360952] DEBUG - Completed: [127.0.0.1:60084] 404 GET /:/plugins/com.plexapp.agents.lastfm (2 live) #1e GZIP 0ms 350 bytes +Jun 04, 2026 03:41:15.246 [140443245435704] DEBUG - Request: [127.0.0.1:60096 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #20 GZIP Token () +Jun 04, 2026 03:41:15.246 [140443245435704] WARN - [Req#20] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. +Jun 04, 2026 03:41:15.246 [140443259251512] DEBUG - Completed: [127.0.0.1:60096] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #20 GZIP 0ms 350 bytes +Jun 04, 2026 03:41:15.248 [140443245435704] DEBUG - Request: [127.0.0.1:60110 (Loopback)] GET /:/plugins/com.plexapp.agents.imdb (2 live) #22 GZIP Token () +Jun 04, 2026 03:41:15.248 [140443245435704] WARN - [Req#22] Request for plug-in [com.plexapp.agents.imdb] but it doesn't exist. +Jun 04, 2026 03:41:15.248 [140443259251512] DEBUG - Completed: [127.0.0.1:60110] 404 GET /:/plugins/com.plexapp.agents.imdb (2 live) #22 GZIP 0ms 350 bytes +Jun 04, 2026 03:41:15.248 [140443245435704] DEBUG - Request: [127.0.0.1:60124 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #24 GZIP Token () +Jun 04, 2026 03:41:15.248 [140443245435704] WARN - [Req#24] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. +Jun 04, 2026 03:41:15.249 [140443261360952] DEBUG - Completed: [127.0.0.1:60124] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #24 GZIP 0ms 350 bytes +Jun 04, 2026 03:41:15.249 [140443245435704] DEBUG - Request: [127.0.0.1:60132 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #26 GZIP Token () +Jun 04, 2026 03:41:15.249 [140443245435704] WARN - [Req#26] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. +Jun 04, 2026 03:41:15.250 [140443261360952] DEBUG - Completed: [127.0.0.1:60132] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #26 GZIP 0ms 350 bytes +Jun 04, 2026 03:41:15.250 [140443243293496] DEBUG - [HttpClient/HCl#1] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:15.251 [140443249711928] DEBUG - [com.plexapp.system] HTTP reply status 200, with 130 bytes of content. +Jun 04, 2026 03:41:15.251 [140443249711928] DEBUG - The system knows about 0 agents. +Jun 04, 2026 03:41:15.251 [140443204926264] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Fanart-TV.bundle. +Jun 04, 2026 03:41:15.251 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle. +Jun 04, 2026 03:41:15.251 [140443200707384] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/HTbackdrops.bundle. +Jun 04, 2026 03:41:15.251 [140443249711928] DEBUG - Waiting for 16 plug-ins to finish starting. +Jun 04, 2026 03:41:15.252 [140443200707384] DEBUG - [com.plexapp.agents.htbackdrops] Agent not known by system, so we're starting for sure. +Jun 04, 2026 03:41:15.252 [140443200707384] DEBUG - Starting file watcher for com.plexapp.agents.htbackdrops +Jun 04, 2026 03:41:15.252 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:15.252 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:15.252 [140443204926264] DEBUG - [com.plexapp.agents.fanarttv] Agent not known by system, so we're starting for sure. +Jun 04, 2026 03:41:15.252 [140443204926264] DEBUG - Starting file watcher for com.plexapp.agents.fanarttv +Jun 04, 2026 03:41:15.252 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/LastFM.bundle. +Jun 04, 2026 03:41:15.253 [140443202816824] DEBUG - [com.plexapp.agents.lastfm] Agent not known by system, so we're starting for sure. +Jun 04, 2026 03:41:15.253 [140443202816824] DEBUG - Starting file watcher for com.plexapp.agents.lastfm +Jun 04, 2026 03:41:15.253 [140443200707384] DEBUG - Spawned plug-in com.plexapp.agents.htbackdrops with PID 370 +Jun 04, 2026 03:41:15.253 [140443200707384] DEBUG - [com.plexapp.agents.htbackdrops] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:15.253 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:15.253 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:15.253 [140443204926264] DEBUG - Spawned plug-in com.plexapp.agents.fanarttv with PID 373 +Jun 04, 2026 03:41:15.253 [140443204926264] DEBUG - [com.plexapp.agents.fanarttv] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:15.253 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:15.253 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:15.254 [140443202816824] DEBUG - Spawned plug-in com.plexapp.agents.lastfm with PID 374 +Jun 04, 2026 03:41:15.254 [140443202816824] DEBUG - [com.plexapp.agents.lastfm] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:15.382 [140443243293496] DEBUG - [HttpClient/HCl#5] HTTP/1.1 (0.1s) 200 response from POST https://plex.tv/devices/b4e051156514c3673d6305f3df48b2bd645d6fd5/unclaimed?Connection[][uri]=http://172.22.0.2:32400 +Jun 04, 2026 03:41:15.396 [140443243293496] DEBUG - [HttpClient/HCl#2] HTTP/1.1 (0.2s) 200 response from GET https://plex.tv/api/v2/release_channels?X-Plex-Token= +Jun 04, 2026 03:41:15.402 [140443243293496] DEBUG - [HttpClient/HCl#3] HTTP/1.1 (0.2s) 200 response from GET https://plex.tv/api/v2/user/privacy?X-Plex-Token= +Jun 04, 2026 03:41:15.409 [140443243293496] DEBUG - [HttpClient/HCl#4] HTTP/1.1 (0.2s) 200 response from GET https://plex.tv/api/v2/features?X-Plex-Token= +Jun 04, 2026 03:41:15.409 [140443224148792] DEBUG - [HCl#6] HTTP requesting GET https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 +Jun 04, 2026 03:41:15.467 [140443243293496] DEBUG - [HttpClient/HCl#6] HTTP/1.1 (0.1s) 401 response from GET https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 (reused) +Jun 04, 2026 03:41:15.467 [140443207035704] ERROR - MyPlex: Error 401 requesting JSON from: https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 +Jun 04, 2026 03:41:15.467 [140443224148792] WARN - FeatureManager: Couldn't get features. Trying again soon. +Jun 04, 2026 03:41:15.606 [140443226258232] DEBUG - [JobRunner] Job running: /usr/lib/plexmediaserver/CrashUploader "--directory=/config/Library/Application Support/Plex Media Server/Crash Reports/1.43.2.10687-563d026ea" --version=1.43.2.10687-563d026ea --platform=Linux --platformVersion=7.0.10-arch1-1 --serverUuid=b4e051156514c3673d6305f3df48b2bd645d6fd5 --userId=NOUSERID --sentryUrl=https://o17675.ingest.sentry.io/api/1233455/ --sentryKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --vendor=Docker --model=x86_64 "--device=Docker Container" +Jun 04, 2026 03:41:15.606 [140443226258232] DEBUG - [JobRunner] Jobs: Starting child process with pid 381 +Jun 04, 2026 03:41:15.610 [140443269335864] DEBUG - Jobs: '/usr/lib/plexmediaserver/CrashUploader' exit code for process 381 is 0 (success) +Jun 04, 2026 03:41:15.612 [140443245435704] DEBUG - Request: [127.0.0.1:60146 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.fanarttv (3 live) #28 GZIP Token () +Jun 04, 2026 03:41:15.612 [140443245435704] DEBUG - [Req#28] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.fanarttv +Jun 04, 2026 03:41:15.612 [140443245435704] DEBUG - [Req#28/HCl#7] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.fanarttv +Jun 04, 2026 03:41:15.612 [140443209292600] DEBUG - Request: [127.0.0.1:60156 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.lastfm (3 live) #2a GZIP Token () +Jun 04, 2026 03:41:15.612 [140443209292600] DEBUG - [Req#2a] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.lastfm +Jun 04, 2026 03:41:15.612 [140443209292600] DEBUG - [Req#2a/HCl#8] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.lastfm +Jun 04, 2026 03:41:15.616 [140443190213432] DEBUG - Request: [127.0.0.1:60172 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.htbackdrops (4 live) #2b GZIP Token () +Jun 04, 2026 03:41:15.616 [140443190213432] DEBUG - [Req#2b] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.htbackdrops +Jun 04, 2026 03:41:15.616 [140443190213432] DEBUG - [Req#2b/HCl#9] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.htbackdrops +Jun 04, 2026 03:41:15.624 [140443243293496] DEBUG - [HttpClient/HCl#8] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.lastfm +Jun 04, 2026 03:41:15.624 [140443209292600] DEBUG - [Req#2a] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:15.624 [140443259251512] DEBUG - Completed: [127.0.0.1:60156] 200 GET /system/messaging/clear_events/com.plexapp.agents.lastfm (4 live) #2a GZIP 11ms 280 bytes +Jun 04, 2026 03:41:15.624 [140443243293496] DEBUG - [HttpClient/HCl#7] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.fanarttv +Jun 04, 2026 03:41:15.624 [140443245435704] DEBUG - [Req#28] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:15.624 [140443259251512] DEBUG - Completed: [127.0.0.1:60146] 200 GET /system/messaging/clear_events/com.plexapp.agents.fanarttv (3 live) #28 GZIP 12ms 280 bytes +Jun 04, 2026 03:41:15.625 [140443243293496] DEBUG - [HttpClient/HCl#9] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.htbackdrops +Jun 04, 2026 03:41:15.625 [140443190213432] DEBUG - [Req#2b] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:15.625 [140443261360952] DEBUG - Completed: [127.0.0.1:60172] 200 GET /system/messaging/clear_events/com.plexapp.agents.htbackdrops (2 live) #2b GZIP 9ms 280 bytes +Jun 04, 2026 03:41:15.656 [140443209292600] DEBUG - Request: [127.0.0.1:60174 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #2c GZIP Token () +Jun 04, 2026 03:41:15.656 [140443209292600] DEBUG - [Req#2c] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:15.656 [140443209292600] DEBUG - [Req#2c/HCl#a] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:15.657 [140443245435704] DEBUG - Request: [127.0.0.1:60190 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (3 live) #30 GZIP Token () +Jun 04, 2026 03:41:15.657 [140443245435704] DEBUG - [Req#30] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:15.657 [140443245435704] DEBUG - [Req#30/HCl#b] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:15.660 [140443190213432] DEBUG - Request: [127.0.0.1:60192 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (4 live) #31 GZIP Token () +Jun 04, 2026 03:41:15.660 [140443190213432] DEBUG - [Req#31] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:15.660 [140443190213432] DEBUG - [Req#31/HCl#c] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:15.680 [140443243293496] DEBUG - [HttpClient/HCl#b] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:15.680 [140443245435704] DEBUG - [Req#30] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:15.680 [140443261360952] DEBUG - Completed: [127.0.0.1:60190] 404 GET /:/plugins/com.plexapp.system/resourceHashes (4 live) #30 GZIP 22ms 261 bytes +Jun 04, 2026 03:41:15.680 [140443243293496] DEBUG - [HttpClient/HCl#a] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:15.680 [140443209292600] DEBUG - [Req#2c] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:15.680 [140443261360952] DEBUG - Completed: [127.0.0.1:60174] 404 GET /:/plugins/com.plexapp.system/resourceHashes (3 live) #2c GZIP 23ms 261 bytes +Jun 04, 2026 03:41:15.681 [140443243293496] DEBUG - [HttpClient/HCl#c] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:15.681 [140443190213432] DEBUG - [Req#31] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:15.681 [140443261360952] DEBUG - Completed: [127.0.0.1:60192] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #31 GZIP 21ms 261 bytes +Jun 04, 2026 03:41:15.686 [140443245435704] DEBUG - Request: [127.0.0.1:60208 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #32 GZIP Token () +Jun 04, 2026 03:41:15.686 [140443245435704] DEBUG - [Req#32] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:15.686 [140443245435704] DEBUG - [Req#32/HCl#d] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:15.686 [140443209292600] DEBUG - Request: [127.0.0.1:60216 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (4 live) #36 GZIP Token () +Jun 04, 2026 03:41:15.686 [140443209292600] DEBUG - [Req#36] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:15.686 [140443190213432] DEBUG - Request: [127.0.0.1:60220 (Loopback)] GET / (4 live) #37 GZIP Token () +Jun 04, 2026 03:41:15.686 [140443209292600] DEBUG - [Req#36/HCl#e] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:15.687 [140443188103992] DEBUG - Request: [127.0.0.1:60226 (Loopback)] GET / (5 live) #38 GZIP Token () +Jun 04, 2026 03:41:15.687 [140443185994552] DEBUG - Request: [127.0.0.1:60236 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (6 live) #39 GZIP Token () +Jun 04, 2026 03:41:15.687 [140443185994552] DEBUG - [Req#39] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:15.687 [140443185994552] DEBUG - [Req#39/HCl#f] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:15.687 [140443261360952] DEBUG - Completed: [127.0.0.1:60220] 200 GET / (6 live) #37 GZIP 0ms 2666 bytes +Jun 04, 2026 03:41:15.687 [140443261360952] DEBUG - Completed: [127.0.0.1:60226] 200 GET / (5 live) #38 GZIP 0ms 2666 bytes +Jun 04, 2026 03:41:15.687 [140443190213432] DEBUG - Request: [127.0.0.1:60250 (Loopback)] GET / (5 live) #3a GZIP Token () +Jun 04, 2026 03:41:15.688 [140443261360952] DEBUG - Completed: [127.0.0.1:60250] 200 GET / (5 live) #3a GZIP 0ms 2666 bytes +Jun 04, 2026 03:41:15.689 [140443243293496] DEBUG - [HttpClient/HCl#d] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:15.689 [140443245435704] DEBUG - [Req#32] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:15.689 [140443261360952] DEBUG - Completed: [127.0.0.1:60208] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (4 live) #32 GZIP 3ms 746 bytes +Jun 04, 2026 03:41:15.690 [140443243293496] DEBUG - [HttpClient/HCl#e] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:15.690 [140443209292600] DEBUG - [Req#36] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:15.690 [140443261360952] DEBUG - Completed: [127.0.0.1:60216] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (3 live) #36 GZIP 3ms 746 bytes +Jun 04, 2026 03:41:15.691 [140443243293496] DEBUG - [HttpClient/HCl#f] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:15.691 [140443185994552] DEBUG - [Req#39] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:15.692 [140443261360952] DEBUG - Completed: [127.0.0.1:60236] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #39 GZIP 4ms 746 bytes +Jun 04, 2026 03:41:15.707 [140443188103992] DEBUG - Request: [127.0.0.1:60254 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK (2 live) #3d GZIP Token () +Jun 04, 2026 03:41:15.708 [140443188103992] DEBUG - [Req#3d] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK +Jun 04, 2026 03:41:15.708 [140443188103992] DEBUG - [Req#3d/HCl#10] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK +Jun 04, 2026 03:41:15.710 [140443243293496] DEBUG - [HttpClient/HCl#10] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK +Jun 04, 2026 03:41:15.710 [140443188103992] DEBUG - [Req#3d] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:15.710 [140443259251512] DEBUG - Completed: [127.0.0.1:60254] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK (2 live) #3d GZIP 2ms 415 bytes +Jun 04, 2026 03:41:15.712 [140443200707384] DEBUG - Reading 155 bytes in the body, code is 200 +Jun 04, 2026 03:41:15.712 [140443200707384] DEBUG - [com.plexapp.agents.htbackdrops] Plug-in running on port 38111. +Jun 04, 2026 03:41:15.712 [140443200707384] DEBUG - Read configuration for [com.plexapp.agents.htbackdrops], had 0 prefixes +Jun 04, 2026 03:41:15.713 [140443200707384] DEBUG - Updating [com.plexapp.agents.htbackdrops] in the database, it has changed. +Jun 04, 2026 03:41:15.713 [140443228367672] DEBUG - Updating the list of agents known by the system. +Jun 04, 2026 03:41:15.713 [140443200707384] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/LocalMedia.bundle. +Jun 04, 2026 03:41:15.713 [140443228367672] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents +Jun 04, 2026 03:41:15.713 [140443228367672] DEBUG - [HCl#11] HTTP requesting GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:15.715 [140443190213432] DEBUG - Request: [127.0.0.1:60270 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #42 GZIP Token () +Jun 04, 2026 03:41:15.715 [140443190213432] WARN - [Req#42] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. +Jun 04, 2026 03:41:15.715 [140443259251512] DEBUG - Completed: [127.0.0.1:60270] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #42 GZIP 0ms 350 bytes +Jun 04, 2026 03:41:15.716 [140443243293496] DEBUG - [HttpClient/HCl#11] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:15.716 [140443228367672] DEBUG - [com.plexapp.system] HTTP reply status 200, with 246 bytes of content. +Jun 04, 2026 03:41:15.716 [140443228367672] DEBUG - The system knows about 1 agents. +Jun 04, 2026 03:41:15.716 [140443200707384] DEBUG - [com.plexapp.agents.localmedia] Agent not known by system, so we're starting for sure. +Jun 04, 2026 03:41:15.716 [140443200707384] DEBUG - Starting file watcher for com.plexapp.agents.localmedia +Jun 04, 2026 03:41:15.716 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:15.716 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:15.717 [140443200707384] DEBUG - Spawned plug-in com.plexapp.agents.localmedia with PID 437 +Jun 04, 2026 03:41:15.717 [140443200707384] DEBUG - [com.plexapp.agents.localmedia] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:15.729 [140443245435704] DEBUG - Request: [127.0.0.1:60284 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (2 live) #44 GZIP Token () +Jun 04, 2026 03:41:15.729 [140443245435704] DEBUG - [Req#44] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +Jun 04, 2026 03:41:15.729 [140443245435704] DEBUG - [Req#44/HCl#12] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +Jun 04, 2026 03:41:15.731 [140443243293496] DEBUG - [HttpClient/HCl#12] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (reused) +Jun 04, 2026 03:41:15.731 [140443245435704] DEBUG - [Req#44] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:15.731 [140443259251512] DEBUG - Completed: [127.0.0.1:60284] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (2 live) #44 GZIP 2ms 415 bytes +Jun 04, 2026 03:41:15.732 [140443209292600] DEBUG - Request: [127.0.0.1:60298 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (2 live) #46 GZIP Token () +Jun 04, 2026 03:41:15.733 [140443209292600] DEBUG - [Req#46] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +Jun 04, 2026 03:41:15.733 [140443209292600] DEBUG - [Req#46/HCl#13] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +Jun 04, 2026 03:41:15.734 [140443243293496] DEBUG - [HttpClient/HCl#13] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +Jun 04, 2026 03:41:15.734 [140443209292600] DEBUG - [Req#46] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:15.735 [140443259251512] DEBUG - Completed: [127.0.0.1:60298] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (2 live) #46 GZIP 2ms 415 bytes +Jun 04, 2026 03:41:15.736 [140443185994552] DEBUG - Request: [127.0.0.1:60312 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK (2 live) #48 GZIP Token () +Jun 04, 2026 03:41:15.736 [140443185994552] DEBUG - [Req#48] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK +Jun 04, 2026 03:41:15.736 [140443185994552] DEBUG - [Req#48/HCl#14] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK +Jun 04, 2026 03:41:15.738 [140443243293496] DEBUG - [HttpClient/HCl#14] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK +Jun 04, 2026 03:41:15.738 [140443185994552] DEBUG - [Req#48] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:15.738 [140443259251512] DEBUG - Completed: [127.0.0.1:60312] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK (2 live) #48 GZIP 2ms 415 bytes +Jun 04, 2026 03:41:15.740 [140443188103992] DEBUG - Request: [127.0.0.1:60314 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK (2 live) #4a GZIP Token () +Jun 04, 2026 03:41:15.740 [140443188103992] DEBUG - [Req#4a] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK +Jun 04, 2026 03:41:15.740 [140443188103992] DEBUG - [Req#4a/HCl#15] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK +Jun 04, 2026 03:41:15.742 [140443243293496] DEBUG - [HttpClient/HCl#15] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK +Jun 04, 2026 03:41:15.742 [140443188103992] DEBUG - [Req#4a] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:15.743 [140443261360952] DEBUG - Completed: [127.0.0.1:60314] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK (2 live) #4a GZIP 2ms 415 bytes +Jun 04, 2026 03:41:15.745 [140443204926264] DEBUG - Reading 152 bytes in the body, code is 200 +Jun 04, 2026 03:41:15.745 [140443204926264] DEBUG - [com.plexapp.agents.fanarttv] Plug-in running on port 38641. +Jun 04, 2026 03:41:15.745 [140443204926264] DEBUG - Read configuration for [com.plexapp.agents.fanarttv], had 0 prefixes +Jun 04, 2026 03:41:15.745 [140443204926264] DEBUG - Updating [com.plexapp.agents.fanarttv] in the database, it has changed. +Jun 04, 2026 03:41:15.745 [140443251936056] DEBUG - Updating the list of agents known by the system. +Jun 04, 2026 03:41:15.745 [140443204926264] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/LyricFind.bundle. +Jun 04, 2026 03:41:15.745 [140443251936056] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents +Jun 04, 2026 03:41:15.745 [140443251936056] DEBUG - [HCl#16] HTTP requesting GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:15.747 [140443190213432] DEBUG - Request: [127.0.0.1:60326 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #4c GZIP Token () +Jun 04, 2026 03:41:15.747 [140443190213432] WARN - [Req#4c] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. +Jun 04, 2026 03:41:15.747 [140443261360952] DEBUG - Completed: [127.0.0.1:60326] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #4c GZIP 0ms 350 bytes +Jun 04, 2026 03:41:15.748 [140443243293496] DEBUG - [HttpClient/HCl#16] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:15.748 [140443251936056] DEBUG - [com.plexapp.system] HTTP reply status 200, with 342 bytes of content. +Jun 04, 2026 03:41:15.749 [140443251936056] DEBUG - The system knows about 2 agents. +Jun 04, 2026 03:41:15.749 [140443204926264] DEBUG - [com.plexapp.agents.lyricfind] Agent not known by system, so we're starting for sure. +Jun 04, 2026 03:41:15.749 [140443204926264] DEBUG - Starting file watcher for com.plexapp.agents.lyricfind +Jun 04, 2026 03:41:15.749 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:15.749 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:15.749 [140443204926264] DEBUG - Spawned plug-in com.plexapp.agents.lyricfind with PID 446 +Jun 04, 2026 03:41:15.749 [140443204926264] DEBUG - [com.plexapp.agents.lyricfind] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:15.779 [140443245435704] DEBUG - Request: [127.0.0.1:60330 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ (2 live) #4e GZIP Token () +Jun 04, 2026 03:41:15.780 [140443245435704] DEBUG - [Req#4e] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ +Jun 04, 2026 03:41:15.780 [140443245435704] DEBUG - [Req#4e/HCl#17] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ +Jun 04, 2026 03:41:15.781 [140443243293496] DEBUG - [HttpClient/HCl#17] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ (reused) +Jun 04, 2026 03:41:15.781 [140443245435704] DEBUG - [Req#4e] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:15.782 [140443261360952] DEBUG - Completed: [127.0.0.1:60330] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ (2 live) #4e GZIP 2ms 415 bytes +Jun 04, 2026 03:41:15.783 [140443209292600] DEBUG - Request: [127.0.0.1:60338 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ (2 live) #50 GZIP Token () +Jun 04, 2026 03:41:15.783 [140443209292600] DEBUG - [Req#50] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ +Jun 04, 2026 03:41:15.783 [140443209292600] DEBUG - [Req#50/HCl#18] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ +Jun 04, 2026 03:41:15.785 [140443243293496] DEBUG - [HttpClient/HCl#18] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ +Jun 04, 2026 03:41:15.785 [140443209292600] DEBUG - [Req#50] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:15.786 [140443261360952] DEBUG - Completed: [127.0.0.1:60338] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ (2 live) #50 GZIP 2ms 415 bytes +Jun 04, 2026 03:41:15.788 [140443202816824] DEBUG - Reading 150 bytes in the body, code is 200 +Jun 04, 2026 03:41:15.788 [140443202816824] DEBUG - [com.plexapp.agents.lastfm] Plug-in running on port 33769. +Jun 04, 2026 03:41:15.788 [140443202816824] DEBUG - Read configuration for [com.plexapp.agents.lastfm], had 0 prefixes +Jun 04, 2026 03:41:15.788 [140443202816824] DEBUG - Updating [com.plexapp.agents.lastfm] in the database, it has changed. +Jun 04, 2026 03:41:15.788 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Media-Flags.bundle. +Jun 04, 2026 03:41:15.788 [140443217804088] DEBUG - Updating the list of agents known by the system. +Jun 04, 2026 03:41:15.788 [140443217804088] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents +Jun 04, 2026 03:41:15.788 [140443217804088] DEBUG - [HCl#19] HTTP requesting GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:15.789 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/MoviePosterDB.bundle. +Jun 04, 2026 03:41:15.790 [140443185994552] DEBUG - Request: [127.0.0.1:60342 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #52 GZIP Token () +Jun 04, 2026 03:41:15.790 [140443185994552] WARN - [Req#52] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. +Jun 04, 2026 03:41:15.790 [140443261360952] DEBUG - Completed: [127.0.0.1:60342] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #52 GZIP 0ms 350 bytes +Jun 04, 2026 03:41:15.791 [140443243293496] DEBUG - [HttpClient/HCl#19] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:15.791 [140443217804088] DEBUG - [com.plexapp.system] HTTP reply status 200, with 1242 bytes of content. +Jun 04, 2026 03:41:15.791 [140443217804088] DEBUG - The system knows about 3 agents. +Jun 04, 2026 03:41:15.791 [140443202816824] DEBUG - [com.plexapp.agents.movieposterdb] Agent not known by system, so we're starting for sure. +Jun 04, 2026 03:41:15.791 [140443202816824] DEBUG - Starting file watcher for com.plexapp.agents.movieposterdb +Jun 04, 2026 03:41:15.791 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:15.791 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:15.792 [140443202816824] DEBUG - Spawned plug-in com.plexapp.agents.movieposterdb with PID 453 +Jun 04, 2026 03:41:15.792 [140443202816824] DEBUG - [com.plexapp.agents.movieposterdb] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:16.071 [140443188103992] DEBUG - Request: [127.0.0.1:60358 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.localmedia (2 live) #54 GZIP Token () +Jun 04, 2026 03:41:16.072 [140443188103992] DEBUG - [Req#54] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.localmedia +Jun 04, 2026 03:41:16.072 [140443188103992] DEBUG - [Req#54/HCl#1a] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.localmedia +Jun 04, 2026 03:41:16.073 [140443243293496] DEBUG - [HttpClient/HCl#1a] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.localmedia (reused) +Jun 04, 2026 03:41:16.073 [140443188103992] DEBUG - [Req#54] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:16.073 [140443261360952] DEBUG - Completed: [127.0.0.1:60358] 200 GET /system/messaging/clear_events/com.plexapp.agents.localmedia (2 live) #54 GZIP 1ms 280 bytes +Jun 04, 2026 03:41:16.112 [140443190213432] DEBUG - Request: [127.0.0.1:60360 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.lyricfind (2 live) #56 GZIP Token () +Jun 04, 2026 03:41:16.112 [140443190213432] DEBUG - [Req#56] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.lyricfind +Jun 04, 2026 03:41:16.112 [140443190213432] DEBUG - [Req#56/HCl#1b] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.lyricfind +Jun 04, 2026 03:41:16.113 [140443243293496] DEBUG - [HttpClient/HCl#1b] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.lyricfind +Jun 04, 2026 03:41:16.113 [140443190213432] DEBUG - [Req#56] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:16.113 [140443261360952] DEBUG - Completed: [127.0.0.1:60360] 200 GET /system/messaging/clear_events/com.plexapp.agents.lyricfind (2 live) #56 GZIP 1ms 280 bytes +Jun 04, 2026 03:41:16.117 [140443245435704] DEBUG - Request: [127.0.0.1:60364 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #58 GZIP Token () +Jun 04, 2026 03:41:16.117 [140443245435704] DEBUG - [Req#58] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.117 [140443245435704] DEBUG - [Req#58/HCl#1c] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.119 [140443243293496] DEBUG - [HttpClient/HCl#1c] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.119 [140443245435704] DEBUG - [Req#58] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:16.119 [140443261360952] DEBUG - Completed: [127.0.0.1:60364] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #58 GZIP 1ms 261 bytes +Jun 04, 2026 03:41:16.125 [140443209292600] DEBUG - Request: [127.0.0.1:60366 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #5a GZIP Token () +Jun 04, 2026 03:41:16.125 [140443209292600] DEBUG - [Req#5a] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.125 [140443209292600] DEBUG - [Req#5a/HCl#1d] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.125 [140443185994552] DEBUG - Request: [127.0.0.1:60372 (Loopback)] GET / (3 live) #5c GZIP Token () +Jun 04, 2026 03:41:16.125 [140443261360952] DEBUG - Completed: [127.0.0.1:60372] 200 GET / (3 live) #5c GZIP 0ms 2666 bytes +Jun 04, 2026 03:41:16.127 [140443243293496] DEBUG - [HttpClient/HCl#1d] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.127 [140443209292600] DEBUG - [Req#5a] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:16.127 [140443261360952] DEBUG - Completed: [127.0.0.1:60366] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #5a GZIP 1ms 746 bytes +Jun 04, 2026 03:41:16.153 [140443188103992] DEBUG - Request: [127.0.0.1:60382 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.movieposterdb (2 live) #5d GZIP Token () +Jun 04, 2026 03:41:16.153 [140443188103992] DEBUG - [Req#5d] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.movieposterdb +Jun 04, 2026 03:41:16.153 [140443188103992] DEBUG - [Req#5d/HCl#1e] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.movieposterdb +Jun 04, 2026 03:41:16.154 [140443243293496] DEBUG - [HttpClient/HCl#1e] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.movieposterdb +Jun 04, 2026 03:41:16.154 [140443188103992] DEBUG - [Req#5d] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:16.154 [140443261360952] DEBUG - Completed: [127.0.0.1:60382] 200 GET /system/messaging/clear_events/com.plexapp.agents.movieposterdb (2 live) #5d GZIP 1ms 280 bytes +Jun 04, 2026 03:41:16.160 [140443190213432] DEBUG - Request: [127.0.0.1:60388 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #60 GZIP Token () +Jun 04, 2026 03:41:16.160 [140443190213432] DEBUG - [Req#60] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.160 [140443190213432] DEBUG - [Req#60/HCl#1f] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.161 [140443243293496] DEBUG - [HttpClient/HCl#1f] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.161 [140443190213432] DEBUG - [Req#60] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:16.161 [140443259251512] DEBUG - Completed: [127.0.0.1:60388] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #60 GZIP 1ms 261 bytes +Jun 04, 2026 03:41:16.167 [140443245435704] DEBUG - Request: [127.0.0.1:60390 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #62 GZIP Token () +Jun 04, 2026 03:41:16.167 [140443245435704] DEBUG - [Req#62] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.167 [140443245435704] DEBUG - [Req#62/HCl#20] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.167 [140443185994552] DEBUG - Request: [127.0.0.1:60396 (Loopback)] GET / (3 live) #64 GZIP Token () +Jun 04, 2026 03:41:16.167 [140443261360952] DEBUG - Completed: [127.0.0.1:60396] 200 GET / (3 live) #64 GZIP 0ms 2666 bytes +Jun 04, 2026 03:41:16.168 [140443243293496] DEBUG - [HttpClient/HCl#20] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.168 [140443245435704] DEBUG - [Req#62] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:16.168 [140443261360952] DEBUG - Completed: [127.0.0.1:60390] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #62 GZIP 1ms 746 bytes +Jun 04, 2026 03:41:16.184 [140443209292600] DEBUG - Request: [127.0.0.1:60402 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ (2 live) #65 GZIP Token () +Jun 04, 2026 03:41:16.184 [140443209292600] DEBUG - [Req#65] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ +Jun 04, 2026 03:41:16.184 [140443209292600] DEBUG - [Req#65/HCl#21] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ +Jun 04, 2026 03:41:16.186 [140443243293496] DEBUG - [HttpClient/HCl#21] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ +Jun 04, 2026 03:41:16.186 [140443209292600] DEBUG - [Req#65] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.186 [140443261360952] DEBUG - Completed: [127.0.0.1:60402] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ (2 live) #65 GZIP 1ms 415 bytes +Jun 04, 2026 03:41:16.188 [140443204926264] DEBUG - Reading 153 bytes in the body, code is 200 +Jun 04, 2026 03:41:16.188 [140443204926264] DEBUG - [com.plexapp.agents.lyricfind] Plug-in running on port 35737. +Jun 04, 2026 03:41:16.188 [140443204926264] DEBUG - Read configuration for [com.plexapp.agents.lyricfind], had 0 prefixes +Jun 04, 2026 03:41:16.188 [140443204926264] DEBUG - Updating [com.plexapp.agents.lyricfind] in the database, it has changed. +Jun 04, 2026 03:41:16.188 [140443204926264] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Musicbrainz.bundle. +Jun 04, 2026 03:41:16.188 [140443230477112] DEBUG - Updating the list of agents known by the system. +Jun 04, 2026 03:41:16.188 [140443230477112] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents +Jun 04, 2026 03:41:16.189 [140443230477112] DEBUG - [HCl#22] HTTP requesting GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:16.194 [140443188103992] DEBUG - Request: [127.0.0.1:60416 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #68 GZIP Token () +Jun 04, 2026 03:41:16.194 [140443188103992] WARN - [Req#68] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. +Jun 04, 2026 03:41:16.194 [140443261360952] DEBUG - Completed: [127.0.0.1:60416] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #68 GZIP 0ms 350 bytes +Jun 04, 2026 03:41:16.195 [140443243293496] DEBUG - [HttpClient/HCl#22] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:16.195 [140443230477112] DEBUG - [com.plexapp.system] HTTP reply status 200, with 1339 bytes of content. +Jun 04, 2026 03:41:16.196 [140443230477112] DEBUG - The system knows about 4 agents. +Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - [org.musicbrainz.agents.music] Agent not known by system, so we're starting for sure. +Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - Starting file watcher for org.musicbrainz.agents.music +Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - Plug-in limit of 6 exceeded. +Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.fanarttv. +Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - Stopping [com.plexapp.agents.fanarttv]. +Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - [com.plexapp.agents.fanarttv] Killing. +Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - Spawned plug-in org.musicbrainz.agents.music with PID 505 +Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - [org.musicbrainz.agents.music] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:16.197 [140443269335864] WARN - JobManager: Could not find job for handle 373 +Jun 04, 2026 03:41:16.198 [140443190213432] DEBUG - Request: [127.0.0.1:60430 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #6a GZIP Token () +Jun 04, 2026 03:41:16.198 [140443190213432] DEBUG - [Req#6a] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.198 [140443190213432] DEBUG - [Req#6a/HCl#23] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.199 [140443243293496] DEBUG - [HttpClient/HCl#23] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes (reused) +Jun 04, 2026 03:41:16.199 [140443190213432] DEBUG - [Req#6a] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:16.199 [140443261360952] DEBUG - Completed: [127.0.0.1:60430] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #6a GZIP 1ms 261 bytes +Jun 04, 2026 03:41:16.204 [140443185994552] DEBUG - Request: [127.0.0.1:60446 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #6c GZIP Token () +Jun 04, 2026 03:41:16.204 [140443185994552] DEBUG - [Req#6c] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.204 [140443185994552] DEBUG - [Req#6c/HCl#24] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.205 [140443245435704] DEBUG - Request: [127.0.0.1:60456 (Loopback)] GET / (3 live) #6e GZIP Token () +Jun 04, 2026 03:41:16.205 [140443259251512] DEBUG - Completed: [127.0.0.1:60456] 200 GET / (3 live) #6e GZIP 0ms 2666 bytes +Jun 04, 2026 03:41:16.206 [140443243293496] DEBUG - [HttpClient/HCl#24] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.206 [140443185994552] DEBUG - [Req#6c] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:16.206 [140443259251512] DEBUG - Completed: [127.0.0.1:60446] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #6c GZIP 2ms 746 bytes +Jun 04, 2026 03:41:16.214 [140443209292600] DEBUG - Request: [127.0.0.1:60468 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ (2 live) #6f GZIP Token () +Jun 04, 2026 03:41:16.215 [140443209292600] DEBUG - [Req#6f] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.215 [140443209292600] DEBUG - [Req#6f/HCl#25] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.216 [140443243293496] DEBUG - [HttpClient/HCl#25] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.216 [140443209292600] DEBUG - [Req#6f] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.216 [140443259251512] DEBUG - Completed: [127.0.0.1:60468] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ (2 live) #6f GZIP 1ms 415 bytes +Jun 04, 2026 03:41:16.218 [140443202816824] DEBUG - Reading 157 bytes in the body, code is 200 +Jun 04, 2026 03:41:16.218 [140443202816824] DEBUG - [com.plexapp.agents.movieposterdb] Plug-in running on port 43189. +Jun 04, 2026 03:41:16.218 [140443202816824] DEBUG - Read configuration for [com.plexapp.agents.movieposterdb], had 0 prefixes +Jun 04, 2026 03:41:16.218 [140443202816824] DEBUG - Updating [com.plexapp.agents.movieposterdb] in the database, it has changed. +Jun 04, 2026 03:41:16.218 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/PersonalMedia.bundle. +Jun 04, 2026 03:41:16.218 [140443226258232] DEBUG - Updating the list of agents known by the system. +Jun 04, 2026 03:41:16.218 [140443226258232] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents +Jun 04, 2026 03:41:16.218 [140443226258232] DEBUG - [HCl#26] HTTP requesting GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:16.220 [140443188103992] DEBUG - Request: [127.0.0.1:60482 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #72 GZIP Token () +Jun 04, 2026 03:41:16.220 [140443188103992] WARN - [Req#72] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. +Jun 04, 2026 03:41:16.220 [140443259251512] DEBUG - Completed: [127.0.0.1:60482] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #72 GZIP 0ms 350 bytes +Jun 04, 2026 03:41:16.221 [140443243293496] DEBUG - [HttpClient/HCl#26] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:16.221 [140443226258232] DEBUG - [com.plexapp.system] HTTP reply status 200, with 1440 bytes of content. +Jun 04, 2026 03:41:16.222 [140443226258232] DEBUG - The system knows about 5 agents. +Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - [com.plexapp.agents.none] Agent not known by system, so we're starting for sure. +Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - Starting file watcher for com.plexapp.agents.none +Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - Plug-in limit of 6 exceeded. +Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.htbackdrops. +Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - Stopping [com.plexapp.agents.htbackdrops]. +Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - [com.plexapp.agents.htbackdrops] Killing. +Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - Spawned plug-in com.plexapp.agents.none with PID 516 +Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - [com.plexapp.agents.none] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:16.223 [140443269335864] WARN - JobManager: Could not find job for handle 370 +Jun 04, 2026 03:41:16.390 [140443190213432] DEBUG - Request: [127.0.0.1:60498 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #74 GZIP Token () +Jun 04, 2026 03:41:16.390 [140443190213432] DEBUG - [Req#74] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.390 [140443190213432] DEBUG - [Req#74/HCl#27] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.392 [140443243293496] DEBUG - [HttpClient/HCl#27] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (reused) +Jun 04, 2026 03:41:16.392 [140443190213432] DEBUG - [Req#74] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.392 [140443259251512] DEBUG - Completed: [127.0.0.1:60498] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #74 GZIP 1ms 415 bytes +Jun 04, 2026 03:41:16.393 [140443245435704] DEBUG - Request: [127.0.0.1:60500 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #76 GZIP Token () +Jun 04, 2026 03:41:16.394 [140443245435704] DEBUG - [Req#76] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.394 [140443245435704] DEBUG - [Req#76/HCl#28] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.396 [140443243293496] DEBUG - [HttpClient/HCl#28] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.396 [140443245435704] DEBUG - [Req#76] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.396 [140443259251512] DEBUG - Completed: [127.0.0.1:60500] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #76 GZIP 2ms 415 bytes +Jun 04, 2026 03:41:16.398 [140443185994552] DEBUG - Request: [127.0.0.1:60504 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK (2 live) #78 GZIP Token () +Jun 04, 2026 03:41:16.398 [140443185994552] DEBUG - [Req#78] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +Jun 04, 2026 03:41:16.398 [140443185994552] DEBUG - [Req#78/HCl#29] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +Jun 04, 2026 03:41:16.400 [140443243293496] DEBUG - [HttpClient/HCl#29] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +Jun 04, 2026 03:41:16.400 [140443185994552] DEBUG - [Req#78] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.400 [140443259251512] DEBUG - Completed: [127.0.0.1:60504] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK (2 live) #78 GZIP 2ms 415 bytes +Jun 04, 2026 03:41:16.402 [140443209292600] DEBUG - Request: [127.0.0.1:60514 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK (2 live) #7a GZIP Token () +Jun 04, 2026 03:41:16.403 [140443209292600] DEBUG - [Req#7a] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +Jun 04, 2026 03:41:16.403 [140443209292600] DEBUG - [Req#7a/HCl#2a] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +Jun 04, 2026 03:41:16.405 [140443243293496] DEBUG - [HttpClient/HCl#2a] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +Jun 04, 2026 03:41:16.405 [140443209292600] DEBUG - [Req#7a] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.405 [140443259251512] DEBUG - Completed: [127.0.0.1:60514] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK (2 live) #7a GZIP 2ms 415 bytes +Jun 04, 2026 03:41:16.407 [140443188103992] DEBUG - Request: [127.0.0.1:60522 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ (2 live) #7c GZIP Token () +Jun 04, 2026 03:41:16.407 [140443188103992] DEBUG - [Req#7c] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.407 [140443188103992] DEBUG - [Req#7c/HCl#2b] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.410 [140443243293496] DEBUG - [HttpClient/HCl#2b] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.410 [140443188103992] DEBUG - [Req#7c] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.410 [140443259251512] DEBUG - Completed: [127.0.0.1:60522] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ (2 live) #7c GZIP 2ms 415 bytes +Jun 04, 2026 03:41:16.411 [140443200707384] DEBUG - Reading 154 bytes in the body, code is 200 +Jun 04, 2026 03:41:16.411 [140443200707384] DEBUG - [com.plexapp.agents.localmedia] Plug-in running on port 40699. +Jun 04, 2026 03:41:16.411 [140443200707384] DEBUG - Read configuration for [com.plexapp.agents.localmedia], had 0 prefixes +Jun 04, 2026 03:41:16.412 [140443200707384] DEBUG - Updating [com.plexapp.agents.localmedia] in the database, it has changed. +Jun 04, 2026 03:41:16.412 [140443228367672] DEBUG - Updating the list of agents known by the system. +Jun 04, 2026 03:41:16.412 [140443200707384] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/PlexMovie.bundle. +Jun 04, 2026 03:41:16.412 [140443228367672] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents +Jun 04, 2026 03:41:16.412 [140443228367672] DEBUG - [HCl#2c] HTTP requesting GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:16.414 [140443190213432] DEBUG - Request: [127.0.0.1:60536 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #7e GZIP Token () +Jun 04, 2026 03:41:16.414 [140443190213432] WARN - [Req#7e] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. +Jun 04, 2026 03:41:16.414 [140443259251512] DEBUG - Completed: [127.0.0.1:60536] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #7e GZIP 0ms 350 bytes +Jun 04, 2026 03:41:16.415 [140443243293496] DEBUG - [HttpClient/HCl#2c] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:16.415 [140443228367672] DEBUG - [com.plexapp.system] HTTP reply status 200, with 1538 bytes of content. +Jun 04, 2026 03:41:16.415 [140443228367672] DEBUG - The system knows about 6 agents. +Jun 04, 2026 03:41:16.415 [140443200707384] DEBUG - [com.plexapp.agents.imdb] Agent not known by system, so we're starting for sure. +Jun 04, 2026 03:41:16.415 [140443200707384] DEBUG - Starting file watcher for com.plexapp.agents.imdb +Jun 04, 2026 03:41:16.415 [140443200707384] DEBUG - Plug-in limit of 6 exceeded. +Jun 04, 2026 03:41:16.415 [140443200707384] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.lastfm. +Jun 04, 2026 03:41:16.415 [140443200707384] DEBUG - Stopping [com.plexapp.agents.lastfm]. +Jun 04, 2026 03:41:16.415 [140443200707384] DEBUG - [com.plexapp.agents.lastfm] Killing. +Jun 04, 2026 03:41:16.416 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:16.416 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:16.416 [140443200707384] DEBUG - Spawned plug-in com.plexapp.agents.imdb with PID 526 +Jun 04, 2026 03:41:16.416 [140443200707384] DEBUG - [com.plexapp.agents.imdb] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:16.418 [140443269335864] WARN - JobManager: Could not find job for handle 374 +Jun 04, 2026 03:41:16.554 [140443245435704] DEBUG - Request: [127.0.0.1:60548 (Loopback)] GET /system/messaging/clear_events/org.musicbrainz.agents.music (2 live) #80 GZIP Token () +Jun 04, 2026 03:41:16.554 [140443245435704] DEBUG - [Req#80] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/org.musicbrainz.agents.music +Jun 04, 2026 03:41:16.554 [140443245435704] DEBUG - [Req#80/HCl#2d] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/org.musicbrainz.agents.music +Jun 04, 2026 03:41:16.555 [140443243293496] DEBUG - [HttpClient/HCl#2d] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/org.musicbrainz.agents.music (reused) +Jun 04, 2026 03:41:16.555 [140443245435704] DEBUG - [Req#80] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:16.555 [140443261360952] DEBUG - Completed: [127.0.0.1:60548] 200 GET /system/messaging/clear_events/org.musicbrainz.agents.music (2 live) #80 GZIP 1ms 280 bytes +Jun 04, 2026 03:41:16.580 [140443185994552] DEBUG - Request: [127.0.0.1:60564 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.none (2 live) #82 GZIP Token () +Jun 04, 2026 03:41:16.580 [140443185994552] DEBUG - [Req#82] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.none +Jun 04, 2026 03:41:16.580 [140443185994552] DEBUG - [Req#82/HCl#2e] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.none +Jun 04, 2026 03:41:16.582 [140443243293496] DEBUG - [HttpClient/HCl#2e] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.none +Jun 04, 2026 03:41:16.582 [140443185994552] DEBUG - [Req#82] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:16.582 [140443261360952] DEBUG - Completed: [127.0.0.1:60564] 200 GET /system/messaging/clear_events/com.plexapp.agents.none (2 live) #82 GZIP 1ms 280 bytes +Jun 04, 2026 03:41:16.598 [140443209292600] DEBUG - Request: [127.0.0.1:60572 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #84 GZIP Token () +Jun 04, 2026 03:41:16.598 [140443209292600] DEBUG - [Req#84] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.598 [140443209292600] DEBUG - [Req#84/HCl#2f] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.599 [140443243293496] DEBUG - [HttpClient/HCl#2f] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.599 [140443209292600] DEBUG - [Req#84] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:16.599 [140443259251512] DEBUG - Completed: [127.0.0.1:60572] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #84 GZIP 1ms 261 bytes +Jun 04, 2026 03:41:16.605 [140443188103992] DEBUG - Request: [127.0.0.1:60584 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (3 live) #86 GZIP Token () +Jun 04, 2026 03:41:16.605 [140443190213432] DEBUG - Request: [127.0.0.1:60596 (Loopback)] GET / (3 live) #88 GZIP Token () +Jun 04, 2026 03:41:16.605 [140443188103992] DEBUG - [Req#86] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.605 [140443188103992] DEBUG - [Req#86/HCl#30] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.606 [140443259251512] DEBUG - Completed: [127.0.0.1:60596] 200 GET / (3 live) #88 GZIP 0ms 2666 bytes +Jun 04, 2026 03:41:16.607 [140443243293496] DEBUG - [HttpClient/HCl#30] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.607 [140443188103992] DEBUG - [Req#86] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:16.607 [140443259251512] DEBUG - Completed: [127.0.0.1:60584] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #86 GZIP 1ms 746 bytes +Jun 04, 2026 03:41:16.615 [140443245435704] DEBUG - Request: [127.0.0.1:60606 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK (2 live) #89 GZIP Token () +Jun 04, 2026 03:41:16.615 [140443245435704] DEBUG - [Req#89] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK +Jun 04, 2026 03:41:16.615 [140443245435704] DEBUG - [Req#89/HCl#31] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK +Jun 04, 2026 03:41:16.617 [140443243293496] DEBUG - [HttpClient/HCl#31] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK +Jun 04, 2026 03:41:16.617 [140443245435704] DEBUG - [Req#89] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.617 [140443259251512] DEBUG - Completed: [127.0.0.1:60606] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK (2 live) #89 GZIP 2ms 415 bytes +Jun 04, 2026 03:41:16.619 [140443185994552] DEBUG - Request: [127.0.0.1:60614 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK (2 live) #8c GZIP Token () +Jun 04, 2026 03:41:16.619 [140443185994552] DEBUG - [Req#8c] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK +Jun 04, 2026 03:41:16.619 [140443185994552] DEBUG - [Req#8c/HCl#32] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK +Jun 04, 2026 03:41:16.620 [140443243293496] DEBUG - [HttpClient/HCl#32] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK +Jun 04, 2026 03:41:16.620 [140443185994552] DEBUG - [Req#8c] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.621 [140443259251512] DEBUG - Completed: [127.0.0.1:60614] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK (2 live) #8c GZIP 2ms 415 bytes +Jun 04, 2026 03:41:16.623 [140443204926264] DEBUG - Reading 153 bytes in the body, code is 200 +Jun 04, 2026 03:41:16.623 [140443204926264] DEBUG - [org.musicbrainz.agents.music] Plug-in running on port 46041. +Jun 04, 2026 03:41:16.623 [140443204926264] DEBUG - Read configuration for [org.musicbrainz.agents.music], had 0 prefixes +Jun 04, 2026 03:41:16.623 [140443204926264] DEBUG - Updating [org.musicbrainz.agents.music] in the database, it has changed. +Jun 04, 2026 03:41:16.623 [140443204926264] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/PlexThemeMusic.bundle. +Jun 04, 2026 03:41:16.623 [140443251936056] DEBUG - Updating the list of agents known by the system. +Jun 04, 2026 03:41:16.623 [140443251936056] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents +Jun 04, 2026 03:41:16.623 [140443251936056] DEBUG - [HCl#33] HTTP requesting GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:16.625 [140443209292600] DEBUG - Request: [127.0.0.1:60630 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #8e GZIP Token () +Jun 04, 2026 03:41:16.625 [140443209292600] WARN - [Req#8e] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. +Jun 04, 2026 03:41:16.625 [140443259251512] DEBUG - Completed: [127.0.0.1:60630] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #8e GZIP 0ms 350 bytes +Jun 04, 2026 03:41:16.626 [140443190213432] DEBUG - Request: [127.0.0.1:60632 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #90 GZIP Token () +Jun 04, 2026 03:41:16.626 [140443190213432] DEBUG - [Req#90] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.626 [140443190213432] DEBUG - [Req#90/HCl#34] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.628 [140443243293496] DEBUG - [HttpClient/HCl#33] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:16.628 [140443251936056] DEBUG - [com.plexapp.system] HTTP reply status 200, with 3457 bytes of content. +Jun 04, 2026 03:41:16.629 [140443251936056] DEBUG - The system knows about 7 agents. +Jun 04, 2026 03:41:16.629 [140443204926264] DEBUG - [com.plexapp.agents.plexthememusic] Agent not known by system, so we're starting for sure. +Jun 04, 2026 03:41:16.629 [140443204926264] DEBUG - Starting file watcher for com.plexapp.agents.plexthememusic +Jun 04, 2026 03:41:16.629 [140443204926264] DEBUG - Plug-in limit of 6 exceeded. +Jun 04, 2026 03:41:16.629 [140443204926264] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.imdb. +Jun 04, 2026 03:41:16.629 [140443243293496] DEBUG - [HttpClient/HCl#34] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.629 [140443190213432] DEBUG - [Req#90] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:16.629 [140443259251512] DEBUG - Completed: [127.0.0.1:60632] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #90 GZIP 3ms 261 bytes +Jun 04, 2026 03:41:16.635 [140443188103992] DEBUG - Request: [127.0.0.1:60640 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #92 GZIP Token () +Jun 04, 2026 03:41:16.635 [140443188103992] DEBUG - [Req#92] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.635 [140443188103992] DEBUG - [Req#92/HCl#35] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.635 [140443245435704] DEBUG - Request: [127.0.0.1:60648 (Loopback)] GET / (3 live) #94 GZIP Token () +Jun 04, 2026 03:41:16.635 [140443259251512] DEBUG - Completed: [127.0.0.1:60648] 200 GET / (3 live) #94 GZIP 0ms 2666 bytes +Jun 04, 2026 03:41:16.636 [140443243293496] DEBUG - [HttpClient/HCl#35] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (reused) +Jun 04, 2026 03:41:16.636 [140443188103992] DEBUG - [Req#92] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:16.636 [140443259251512] DEBUG - Completed: [127.0.0.1:60640] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #92 GZIP 1ms 746 bytes +Jun 04, 2026 03:41:16.651 [140443185994552] DEBUG - Request: [127.0.0.1:60652 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ (2 live) #95 GZIP Token () +Jun 04, 2026 03:41:16.651 [140443185994552] DEBUG - [Req#95] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ +Jun 04, 2026 03:41:16.651 [140443185994552] DEBUG - [Req#95/HCl#36] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ +Jun 04, 2026 03:41:16.653 [140443243293496] DEBUG - [HttpClient/HCl#36] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ +Jun 04, 2026 03:41:16.653 [140443185994552] DEBUG - [Req#95] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.653 [140443259251512] DEBUG - Completed: [127.0.0.1:60652] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ (2 live) #95 GZIP 1ms 415 bytes +Jun 04, 2026 03:41:16.654 [140443209292600] DEBUG - Request: [127.0.0.1:60668 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK (2 live) #98 GZIP Token () +Jun 04, 2026 03:41:16.654 [140443209292600] DEBUG - [Req#98] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK +Jun 04, 2026 03:41:16.654 [140443209292600] DEBUG - [Req#98/HCl#37] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK +Jun 04, 2026 03:41:16.656 [140443243293496] DEBUG - [HttpClient/HCl#37] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK +Jun 04, 2026 03:41:16.656 [140443209292600] DEBUG - [Req#98] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.656 [140443259251512] DEBUG - Completed: [127.0.0.1:60668] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK (2 live) #98 GZIP 2ms 415 bytes +Jun 04, 2026 03:41:16.658 [140443190213432] DEBUG - Request: [127.0.0.1:60682 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ (2 live) #9a GZIP Token () +Jun 04, 2026 03:41:16.658 [140443190213432] DEBUG - [Req#9a] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.658 [140443190213432] DEBUG - [Req#9a/HCl#38] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.660 [140443243293496] DEBUG - [HttpClient/HCl#38] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ +Jun 04, 2026 03:41:16.660 [140443190213432] DEBUG - [Req#9a] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.660 [140443259251512] DEBUG - Completed: [127.0.0.1:60682] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ (2 live) #9a GZIP 2ms 415 bytes +Jun 04, 2026 03:41:16.661 [140443245435704] DEBUG - Request: [127.0.0.1:60690 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK (2 live) #9c GZIP Token () +Jun 04, 2026 03:41:16.661 [140443245435704] DEBUG - [Req#9c] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK +Jun 04, 2026 03:41:16.661 [140443245435704] DEBUG - [Req#9c/HCl#39] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK +Jun 04, 2026 03:41:16.663 [140443243293496] DEBUG - [HttpClient/HCl#39] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK +Jun 04, 2026 03:41:16.663 [140443245435704] DEBUG - [Req#9c] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.663 [140443259251512] DEBUG - Completed: [127.0.0.1:60690] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK (2 live) #9c GZIP 2ms 415 bytes +Jun 04, 2026 03:41:16.665 [140443188103992] DEBUG - Request: [127.0.0.1:60706 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK (2 live) #9e GZIP Token () +Jun 04, 2026 03:41:16.666 [140443188103992] DEBUG - [Req#9e] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK +Jun 04, 2026 03:41:16.666 [140443188103992] DEBUG - [Req#9e/HCl#3a] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK +Jun 04, 2026 03:41:16.668 [140443243293496] DEBUG - [HttpClient/HCl#3a] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK +Jun 04, 2026 03:41:16.668 [140443188103992] DEBUG - [Req#9e] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:16.668 [140443259251512] DEBUG - Completed: [127.0.0.1:60706] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK (2 live) #9e GZIP 2ms 415 bytes +Jun 04, 2026 03:41:16.670 [140443202816824] DEBUG - Reading 148 bytes in the body, code is 200 +Jun 04, 2026 03:41:16.670 [140443202816824] DEBUG - [com.plexapp.agents.none] Plug-in running on port 46761. +Jun 04, 2026 03:41:16.670 [140443202816824] DEBUG - Read configuration for [com.plexapp.agents.none], had 0 prefixes +Jun 04, 2026 03:41:16.670 [140443202816824] DEBUG - Updating [com.plexapp.agents.none] in the database, it has changed. +Jun 04, 2026 03:41:16.670 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Scanners.bundle. +Jun 04, 2026 03:41:16.670 [140443217804088] DEBUG - Updating the list of agents known by the system. +Jun 04, 2026 03:41:16.670 [140443217804088] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents +Jun 04, 2026 03:41:16.670 [140443217804088] DEBUG - [HCl#3b] HTTP requesting GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:16.671 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/TheMovieDB.bundle. +Jun 04, 2026 03:41:16.672 [140443185994552] DEBUG - Request: [127.0.0.1:60708 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #a0 GZIP Token () +Jun 04, 2026 03:41:16.672 [140443185994552] WARN - [Req#a0] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. +Jun 04, 2026 03:41:16.672 [140443261360952] DEBUG - Completed: [127.0.0.1:60708] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #a0 GZIP 0ms 350 bytes +Jun 04, 2026 03:41:16.674 [140443243293496] DEBUG - [HttpClient/HCl#3b] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:16.674 [140443217804088] DEBUG - [com.plexapp.system] HTTP reply status 200, with 5262 bytes of content. +Jun 04, 2026 03:41:16.675 [140443217804088] DEBUG - The system knows about 8 agents. +Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - [com.plexapp.agents.themoviedb] Agent not known by system, so we're starting for sure. +Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - Starting file watcher for com.plexapp.agents.themoviedb +Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - Plug-in limit of 6 exceeded. +Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.localmedia. +Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - Stopping [com.plexapp.agents.localmedia]. +Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - [com.plexapp.agents.localmedia] Killing. +Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - Spawned plug-in com.plexapp.agents.themoviedb with PID 576 +Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - [com.plexapp.agents.themoviedb] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:16.678 [140443269335864] WARN - JobManager: Could not find job for handle 437 +Jun 04, 2026 03:41:16.764 [140443209292600] DEBUG - Request: [127.0.0.1:60712 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.imdb (2 live) #a2 GZIP Token () +Jun 04, 2026 03:41:16.764 [140443209292600] DEBUG - [Req#a2] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.imdb +Jun 04, 2026 03:41:16.764 [140443209292600] DEBUG - [Req#a2/HCl#3c] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.imdb +Jun 04, 2026 03:41:16.765 [140443243293496] DEBUG - [HttpClient/HCl#3c] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.imdb (reused) +Jun 04, 2026 03:41:16.765 [140443209292600] DEBUG - [Req#a2] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:16.765 [140443261360952] DEBUG - Completed: [127.0.0.1:60712] 200 GET /system/messaging/clear_events/com.plexapp.agents.imdb (2 live) #a2 GZIP 1ms 280 bytes +Jun 04, 2026 03:41:16.807 [140443190213432] DEBUG - Request: [127.0.0.1:60714 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #a4 GZIP Token () +Jun 04, 2026 03:41:16.807 [140443190213432] DEBUG - [Req#a4] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.807 [140443190213432] DEBUG - [Req#a4/HCl#3d] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.809 [140443243293496] DEBUG - [HttpClient/HCl#3d] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:16.809 [140443190213432] DEBUG - [Req#a4] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:16.809 [140443259251512] DEBUG - Completed: [127.0.0.1:60714] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #a4 GZIP 1ms 261 bytes +Jun 04, 2026 03:41:16.814 [140443245435704] DEBUG - Request: [127.0.0.1:60724 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #a6 GZIP Token () +Jun 04, 2026 03:41:16.814 [140443245435704] DEBUG - [Req#a6] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.814 [140443245435704] DEBUG - [Req#a6/HCl#3e] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.814 [140443188103992] DEBUG - Request: [127.0.0.1:60740 (Loopback)] GET / (3 live) #a8 GZIP Token () +Jun 04, 2026 03:41:16.815 [140443261360952] DEBUG - Completed: [127.0.0.1:60740] 200 GET / (3 live) #a8 GZIP 0ms 2666 bytes +Jun 04, 2026 03:41:16.816 [140443243293496] DEBUG - [HttpClient/HCl#3e] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:16.816 [140443245435704] DEBUG - [Req#a6] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:16.816 [140443261360952] DEBUG - Completed: [127.0.0.1:60724] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #a6 GZIP 2ms 746 bytes +Jun 04, 2026 03:41:17.034 [140443185994552] DEBUG - Request: [127.0.0.1:60754 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.themoviedb (2 live) #a9 GZIP Token () +Jun 04, 2026 03:41:17.034 [140443185994552] DEBUG - [Req#a9] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.themoviedb +Jun 04, 2026 03:41:17.034 [140443185994552] DEBUG - [Req#a9/HCl#3f] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.themoviedb +Jun 04, 2026 03:41:17.036 [140443243293496] DEBUG - [HttpClient/HCl#3f] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.themoviedb +Jun 04, 2026 03:41:17.036 [140443185994552] DEBUG - [Req#a9] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:17.036 [140443261360952] DEBUG - Completed: [127.0.0.1:60754] 200 GET /system/messaging/clear_events/com.plexapp.agents.themoviedb (2 live) #a9 GZIP 1ms 280 bytes +Jun 04, 2026 03:41:17.041 [140443209292600] DEBUG - Request: [127.0.0.1:60760 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ (2 live) #ac GZIP Token () +Jun 04, 2026 03:41:17.041 [140443209292600] DEBUG - [Req#ac] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ +Jun 04, 2026 03:41:17.041 [140443209292600] DEBUG - [Req#ac/HCl#40] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ +Jun 04, 2026 03:41:17.043 [140443243293496] DEBUG - [HttpClient/HCl#40] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ +Jun 04, 2026 03:41:17.043 [140443209292600] DEBUG - [Req#ac] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:17.043 [140443259251512] DEBUG - Completed: [127.0.0.1:60760] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ (2 live) #ac GZIP 2ms 415 bytes +Jun 04, 2026 03:41:17.045 [140443200707384] DEBUG - Reading 148 bytes in the body, code is 200 +Jun 04, 2026 03:41:17.045 [140443200707384] DEBUG - [com.plexapp.agents.imdb] Plug-in running on port 39585. +Jun 04, 2026 03:41:17.045 [140443200707384] DEBUG - Read configuration for [com.plexapp.agents.imdb], had 0 prefixes +Jun 04, 2026 03:41:17.045 [140443200707384] DEBUG - Updating [com.plexapp.agents.imdb] in the database, it has changed. +Jun 04, 2026 03:41:17.046 [140443204926264] DEBUG - Stopping [com.plexapp.agents.imdb]. +Jun 04, 2026 03:41:17.046 [140443230477112] DEBUG - Updating the list of agents known by the system. +Jun 04, 2026 03:41:17.046 [140443200707384] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/TheTVDB.bundle. +Jun 04, 2026 03:41:17.046 [140443204926264] DEBUG - [com.plexapp.agents.imdb] Killing. +Jun 04, 2026 03:41:17.046 [140443230477112] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents +Jun 04, 2026 03:41:17.046 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:17.046 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:17.046 [140443230477112] DEBUG - [HCl#41] HTTP requesting GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:17.046 [140443204926264] DEBUG - Spawned plug-in com.plexapp.agents.plexthememusic with PID 608 +Jun 04, 2026 03:41:17.046 [140443204926264] DEBUG - [com.plexapp.agents.plexthememusic] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:17.048 [140443190213432] DEBUG - Request: [127.0.0.1:60772 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #ae GZIP Token () +Jun 04, 2026 03:41:17.048 [140443269335864] WARN - JobManager: Could not find job for handle 526 +Jun 04, 2026 03:41:17.078 [140443188103992] DEBUG - Request: [127.0.0.1:60780 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (3 live) #b0 GZIP Token () +Jun 04, 2026 03:41:17.078 [140443188103992] DEBUG - [Req#b0] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:17.079 [140443188103992] DEBUG - [Req#b0/HCl#42] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:17.080 [140443243293496] DEBUG - [HttpClient/HCl#42] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:17.080 [140443188103992] DEBUG - [Req#b0] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:17.080 [140443259251512] DEBUG - Completed: [127.0.0.1:60780] 404 GET /:/plugins/com.plexapp.system/resourceHashes (3 live) #b0 GZIP 1ms 261 bytes +Jun 04, 2026 03:41:17.085 [140443245435704] DEBUG - Request: [127.0.0.1:60788 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (3 live) #b1 GZIP Token () +Jun 04, 2026 03:41:17.085 [140443245435704] DEBUG - [Req#b1] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:17.086 [140443245435704] DEBUG - [Req#b1/HCl#43] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:17.086 [140443185994552] DEBUG - Request: [127.0.0.1:60794 (Loopback)] GET / (4 live) #b3 GZIP Token () +Jun 04, 2026 03:41:17.086 [140443259251512] DEBUG - Completed: [127.0.0.1:60794] 200 GET / (4 live) #b3 GZIP 0ms 2666 bytes +Jun 04, 2026 03:41:17.088 [140443243293496] DEBUG - [HttpClient/HCl#43] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:17.088 [140443245435704] DEBUG - [Req#b1] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:17.088 [140443259251512] DEBUG - Completed: [127.0.0.1:60788] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (3 live) #b1 GZIP 2ms 746 bytes +Jun 04, 2026 03:41:17.207 [140443209292600] DEBUG - Request: [127.0.0.1:60808 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ (3 live) #b4 GZIP Token () +Jun 04, 2026 03:41:17.207 [140443209292600] DEBUG - [Req#b4] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ +Jun 04, 2026 03:41:17.207 [140443209292600] DEBUG - [Req#b4/HCl#44] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ +Jun 04, 2026 03:41:17.396 [140443188103992] DEBUG - Request: [127.0.0.1:60810 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.plexthememusic (4 live) #b7 GZIP Token () +Jun 04, 2026 03:41:17.396 [140443188103992] DEBUG - [Req#b7] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.plexthememusic +Jun 04, 2026 03:41:17.396 [140443188103992] DEBUG - [Req#b7/HCl#45] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.plexthememusic +Jun 04, 2026 03:41:17.397 [140443243293496] DEBUG - [HttpClient/HCl#45] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.plexthememusic +Jun 04, 2026 03:41:17.397 [140443188103992] DEBUG - [Req#b7] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:17.397 [140443261360952] DEBUG - Completed: [127.0.0.1:60810] 200 GET /system/messaging/clear_events/com.plexapp.agents.plexthememusic (4 live) #b7 GZIP 1ms 280 bytes +Jun 04, 2026 03:41:17.439 [140443185994552] DEBUG - Request: [127.0.0.1:60826 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (4 live) #b8 GZIP Token () +Jun 04, 2026 03:41:17.439 [140443185994552] DEBUG - [Req#b8] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:17.440 [140443185994552] DEBUG - [Req#b8/HCl#46] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:17.441 [140443243293496] DEBUG - [HttpClient/HCl#46] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:17.441 [140443185994552] DEBUG - [Req#b8] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:17.441 [140443261360952] DEBUG - Completed: [127.0.0.1:60826] 404 GET /:/plugins/com.plexapp.system/resourceHashes (4 live) #b8 GZIP 1ms 261 bytes +Jun 04, 2026 03:41:17.447 [140443245435704] DEBUG - Request: [127.0.0.1:60830 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (5 live) #ba GZIP Token () +Jun 04, 2026 03:41:17.448 [140443188103992] DEBUG - Request: [127.0.0.1:60844 (Loopback)] GET / (5 live) #bc GZIP Token () +Jun 04, 2026 03:41:17.448 [140443245435704] DEBUG - [Req#ba] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:17.448 [140443245435704] DEBUG - [Req#ba/HCl#47] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:17.448 [140443261360952] DEBUG - Completed: [127.0.0.1:60844] 200 GET / (5 live) #bc GZIP 0ms 2666 bytes +Jun 04, 2026 03:41:17.450 [140443243293496] DEBUG - [HttpClient/HCl#47] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:17.450 [140443245435704] DEBUG - [Req#ba] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:17.450 [140443261360952] DEBUG - Completed: [127.0.0.1:60830] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (4 live) #ba GZIP 2ms 746 bytes +Jun 04, 2026 03:41:17.457 [140443185994552] DEBUG - Request: [127.0.0.1:60848 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (4 live) #bd GZIP Token () +Jun 04, 2026 03:41:17.457 [140443185994552] DEBUG - [Req#bd] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +Jun 04, 2026 03:41:17.457 [140443185994552] DEBUG - [Req#bd/HCl#48] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +Jun 04, 2026 03:41:18.235 [140443222039352] DEBUG - [MediaProviderManager] Refreshing media providers +Jun 04, 2026 03:41:18.355 [140443188103992] DEBUG - Request: [[::1]:38892 (Loopback)] GET /identity (5 live) #c0 +Jun 04, 2026 03:41:18.355 [140443261360952] DEBUG - Completed: [[::1]:38892] 200 GET /identity (5 live) #c0 0ms 447 bytes (pipelined: 1) +Jun 04, 2026 03:41:18.402 [140443222039352] DEBUG - [MediaProviderManager] we had 0 cloud providers online, we now have 1 +Jun 04, 2026 03:41:18.402 [140443222039352] DEBUG - [MediaProviderManager] cloud provider (Metadata) is online and available +Jun 04, 2026 03:41:18.402 [140443222039352] DEBUG - [MediaProviderManager/MetadataAgentManager] Found media provider for agent provider 'tv.plex.agents.movie' with source URI 'provider://tv.plex.provider.metadata' +Jun 04, 2026 03:41:18.402 [140443222039352] DEBUG - [MediaProviderManager/MetadataAgentManager] Found media provider for agent provider 'tv.plex.agents.series' with source URI 'provider://tv.plex.provider.metadata' +Jun 04, 2026 03:41:18.403 [140443222039352] DEBUG - [MediaProviderManager/MetadataAgentManager] Found media provider for agent provider 'tv.plex.agents.music' with source URI 'provider://tv.plex.provider.metadata' +Jun 04, 2026 03:41:18.403 [140443222039352] DEBUG - [MediaProviderManager/MetadataAgentManager] Found media provider for agent provider 'org.musicbrainz.agents.music' with source URI 'provider://tv.plex.provider.metadata' +Jun 04, 2026 03:41:18.403 [140443222039352] DEBUG - [MediaProviderManager] Media provider refresh complete +Jun 04, 2026 03:41:20.233 [140443236805432] DEBUG - [NSB] NetworkServiceBrowser: SERVER arrived: 127.0.0.1 (b6f2a1226b70) +Jun 04, 2026 03:41:20.233 [140443236805432] DEBUG - [NSB] Notifying the system bundle an update to server /system/notify/serverUpdated?host=127.0.0.1 +Jun 04, 2026 03:41:20.233 [140443236805432] DEBUG - [NSB] [com.plexapp.system] Sending command over HTTP (GET): /system/notify/serverUpdated?host=127.0.0.1 +Jun 04, 2026 03:41:20.233 [140443236805432] DEBUG - [NSB/HCl#4f] HTTP requesting GET http://127.0.0.1:33755/system/notify/serverUpdated?host=127.0.0.1 +Jun 04, 2026 03:41:20.235 [140443188103992] DEBUG - Request: [127.0.0.1:60854 (Loopback)] GET /servers (5 live) #c1 GZIP Token () +Jun 04, 2026 03:41:20.235 [140443259251512] DEBUG - Completed: [127.0.0.1:60854] 200 GET /servers (5 live) #c1 GZIP 0ms 490 bytes +Jun 04, 2026 03:41:20.237 [140443243293496] DEBUG - [HttpClient/HCl#4f] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/notify/serverUpdated?host=127.0.0.1 +Jun 04, 2026 03:41:20.237 [140443236805432] DEBUG - [NSB] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:21.285 [140443245435704] DEBUG - Request: [172.22.0.1:48422 (Subnet)] GET /identity (5 live) #c6 +Jun 04, 2026 03:41:21.285 [140443259251512] DEBUG - Completed: [172.22.0.1:48422] 200 GET /identity (5 live) #c6 0ms 447 bytes (pipelined: 1) +Jun 04, 2026 03:41:24.253 [140443198597944] DEBUG - Stopping file watcher for com.plexapp.agents.htbackdrops +Jun 04, 2026 03:41:24.253 [140443196488504] DEBUG - Stopping file watcher for com.plexapp.agents.fanarttv +Jun 04, 2026 03:41:24.253 [140443194379064] DEBUG - Stopping file watcher for com.plexapp.agents.lastfm +Jun 04, 2026 03:41:24.545 [140443251936056] DEBUG - DVR:Device: Discovering and refreshing all devices. +Jun 04, 2026 03:41:24.545 [140443251936056] DEBUG - Grabber: HDHomerun discovered 0 compatible devices. +Jun 04, 2026 03:41:24.545 [140443251936056] DEBUG - [HCl#50] HTTP requesting POST http://127.0.0.1:32600/devices/discover +Jun 04, 2026 03:41:24.717 [140443183885112] DEBUG - Stopping file watcher for com.plexapp.agents.localmedia +Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Grabber: Cleaning up orphaned grabs. +Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Grabber: Cleaned up 0 decrepit directories in 0.0 sec. +Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Activity: registered new activity 7073d5c2-c0c4-4eb7-92c5-f2aa0d5e153e - "Processing subscriptions" +Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Subscription: Scheduling subscriptions. +Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Subscription: Initialized 0 schedulers. +Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Subscription: Starting with 0 grabs, scheduled 0 active ones preemptively. +Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Subscription: Scheduled all subscriptions in 0 ms. +Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Activity: Ended activity 7073d5c2-c0c4-4eb7-92c5-f2aa0d5e153e. +Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Subscription: There are 0 active grabs at the end. +Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Activity: Ended activity 6b799016-6b14-47d1-9b4e-8a01dab8a338. +Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Subscription: Refreshed all content in 0 ms. +Jun 04, 2026 03:41:25.416 [140443173337912] DEBUG - Stopping file watcher for com.plexapp.agents.imdb +Jun 04, 2026 03:41:26.968 [140443243293496] DEBUG - [HttpClient/HCl#50] HTTP/1.1 (2.4s) 200 response from POST http://127.0.0.1:32600/devices/discover +Jun 04, 2026 03:41:28.380 [140443188103992] DEBUG - Request: [[::1]:59386 (Loopback)] GET /identity (5 live) #c8 +Jun 04, 2026 03:41:28.380 [140443259251512] DEBUG - Completed: [[::1]:59386] 200 GET /identity (5 live) #c8 0ms 447 bytes (pipelined: 1) +Jun 04, 2026 03:41:31.197 [140443245435704] DEBUG - Request: [172.22.0.1:44934 (Subnet)] GET /identity (5 live) #cb +Jun 04, 2026 03:41:31.197 [140443259251512] DEBUG - Completed: [172.22.0.1:44934] 200 GET /identity (5 live) #cb 0ms 447 bytes (pipelined: 1) +Jun 04, 2026 03:41:37.053 [140443243293496] DEBUG - [HttpClient/HCl#44] HTTP/1.1 (19.8s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ +Jun 04, 2026 03:41:37.053 [140443209292600] DEBUG - [Req#b4] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:37.053 [140443259251512] DEBUG - Completed: [127.0.0.1:60808] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ (4 live) #b4 GZIP 19846ms 415 bytes +Jun 04, 2026 03:41:37.056 [140443245435704] DEBUG - Request: [127.0.0.1:34974 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK (4 live) #ce GZIP Token () +Jun 04, 2026 03:41:37.056 [140443245435704] DEBUG - [Req#ce] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK +Jun 04, 2026 03:41:37.056 [140443245435704] DEBUG - [Req#ce/HCl#51] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK +Jun 04, 2026 03:41:37.056 [140443243293496] DEBUG - [HttpClient/HCl#48] HTTP/1.1 (19.6s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ +Jun 04, 2026 03:41:37.056 [140443185994552] DEBUG - [Req#bd] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:37.056 [140443261360952] DEBUG - Completed: [127.0.0.1:60848] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (4 live) #bd GZIP 19599ms 415 bytes +Jun 04, 2026 03:41:37.058 [140443243293496] DEBUG - [HttpClient/HCl#41] HTTP/1.1 (20.0s) 200 response from GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:37.058 [140443230477112] DEBUG - [com.plexapp.system] HTTP reply status 200, with 7374 bytes of content. +Jun 04, 2026 03:41:37.058 [140443204926264] DEBUG - Reading 158 bytes in the body, code is 200 +Jun 04, 2026 03:41:37.058 [140443204926264] DEBUG - [com.plexapp.agents.plexthememusic] Plug-in running on port 39625. +Jun 04, 2026 03:41:37.059 [140443204926264] DEBUG - Read configuration for [com.plexapp.agents.plexthememusic], had 0 prefixes +Jun 04, 2026 03:41:37.059 [140443204926264] DEBUG - Updating [com.plexapp.agents.plexthememusic] in the database, it has changed. +Jun 04, 2026 03:41:37.061 [140443243293496] DEBUG - [HttpClient/HCl#51] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK (reused) +Jun 04, 2026 03:41:37.061 [140443245435704] DEBUG - [Req#ce] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:37.062 [140443261360952] DEBUG - Completed: [127.0.0.1:34974] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK (3 live) #ce GZIP 5ms 415 bytes +Jun 04, 2026 03:41:37.062 [140443230477112] DEBUG - The system knows about 10 agents. +Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - [com.plexapp.agents.thetvdb] Agent not known by system, so we're starting for sure. +Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - Starting file watcher for com.plexapp.agents.thetvdb +Jun 04, 2026 03:41:37.062 [140443204926264] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/WebClient.bundle. +Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - Plug-in limit of 6 exceeded. +Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.lyricfind. +Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - Stopping [com.plexapp.agents.lyricfind]. +Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - [com.plexapp.agents.lyricfind] Killing. +Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - Spawned plug-in com.plexapp.agents.thetvdb with PID 660 +Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - [com.plexapp.agents.thetvdb] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:37.064 [140443202816824] DEBUG - Reading 154 bytes in the body, code is 200 +Jun 04, 2026 03:41:37.064 [140443202816824] DEBUG - [com.plexapp.agents.themoviedb] Plug-in running on port 46579. +Jun 04, 2026 03:41:37.064 [140443202816824] DEBUG - Read configuration for [com.plexapp.agents.themoviedb], had 0 prefixes +Jun 04, 2026 03:41:37.064 [140443202816824] DEBUG - Updating [com.plexapp.agents.themoviedb] in the database, it has changed. +Jun 04, 2026 03:41:37.064 [140443269335864] WARN - JobManager: Could not find job for handle 446 +Jun 04, 2026 03:41:37.064 [140443251936056] DEBUG - Updating the list of agents known by the system. +Jun 04, 2026 03:41:37.064 [140443251936056] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents +Jun 04, 2026 03:41:37.064 [140443251936056] DEBUG - [HCl#52] HTTP requesting GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:37.066 [140443188103992] DEBUG - Request: [127.0.0.1:34982 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (3 live) #d2 GZIP Token () +Jun 04, 2026 03:41:37.428 [140443209292600] DEBUG - Request: [127.0.0.1:34990 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.thetvdb (4 live) #d5 GZIP Token () +Jun 04, 2026 03:41:37.429 [140443209292600] DEBUG - [Req#d5] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.thetvdb +Jun 04, 2026 03:41:37.429 [140443209292600] DEBUG - [Req#d5/HCl#53] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.thetvdb +Jun 04, 2026 03:41:37.430 [140443243293496] DEBUG - [HttpClient/HCl#53] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.thetvdb +Jun 04, 2026 03:41:37.430 [140443209292600] DEBUG - [Req#d5] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:37.430 [140443261360952] DEBUG - Completed: [127.0.0.1:34990] 200 GET /system/messaging/clear_events/com.plexapp.agents.thetvdb (4 live) #d5 GZIP 1ms 280 bytes +Jun 04, 2026 03:41:37.475 [140443185994552] DEBUG - Request: [127.0.0.1:35002 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (4 live) #d6 GZIP Token () +Jun 04, 2026 03:41:37.475 [140443185994552] DEBUG - [Req#d6] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:37.475 [140443185994552] DEBUG - [Req#d6/HCl#54] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:37.477 [140443243293496] DEBUG - [HttpClient/HCl#54] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:37.477 [140443185994552] DEBUG - [Req#d6] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:37.477 [140443261360952] DEBUG - Completed: [127.0.0.1:35002] 404 GET /:/plugins/com.plexapp.system/resourceHashes (4 live) #d6 GZIP 1ms 261 bytes +Jun 04, 2026 03:41:37.483 [140443245435704] DEBUG - Request: [127.0.0.1:35014 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (5 live) #d8 GZIP Token () +Jun 04, 2026 03:41:37.483 [140443209292600] DEBUG - Request: [127.0.0.1:35024 (Loopback)] GET / (5 live) #da GZIP Token () +Jun 04, 2026 03:41:37.483 [140443245435704] DEBUG - [Req#d8] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:37.483 [140443245435704] DEBUG - [Req#d8/HCl#55] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:37.483 [140443261360952] DEBUG - Completed: [127.0.0.1:35024] 200 GET / (5 live) #da GZIP 0ms 2666 bytes +Jun 04, 2026 03:41:37.484 [140443243293496] DEBUG - [HttpClient/HCl#55] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:37.484 [140443245435704] DEBUG - [Req#d8] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:37.484 [140443261360952] DEBUG - Completed: [127.0.0.1:35014] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (4 live) #d8 GZIP 1ms 746 bytes +Jun 04, 2026 03:41:37.623 [140443185994552] DEBUG - Request: [127.0.0.1:35028 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ (4 live) #db GZIP Token () +Jun 04, 2026 03:41:37.623 [140443185994552] DEBUG - [Req#db] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ +Jun 04, 2026 03:41:37.623 [140443185994552] DEBUG - [Req#db/HCl#56] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ +Jun 04, 2026 03:41:38.405 [140443209292600] DEBUG - Request: [[::1]:37272 (Loopback)] GET /identity (5 live) #de +Jun 04, 2026 03:41:38.406 [140443261360952] DEBUG - Completed: [[::1]:37272] 200 GET /identity (5 live) #de 0ms 447 bytes (pipelined: 1) +Jun 04, 2026 03:41:44.750 [140443181775672] DEBUG - Stopping file watcher for com.plexapp.agents.lyricfind +Jun 04, 2026 03:41:48.431 [140443245435704] DEBUG - Request: [[::1]:34064 (Loopback)] GET /identity (5 live) #df +Jun 04, 2026 03:41:48.431 [140443259251512] DEBUG - Completed: [[::1]:34064] 200 GET /identity (5 live) #df 0ms 447 bytes (pipelined: 1) +Jun 04, 2026 03:41:57.121 [140443243293496] DEBUG - [HttpClient/HCl#56] HTTP/1.1 (19.5s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ +Jun 04, 2026 03:41:57.121 [140443185994552] DEBUG - [Req#db] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:57.121 [140443261360952] DEBUG - Completed: [127.0.0.1:35028] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ (4 live) #db GZIP 19498ms 415 bytes +Jun 04, 2026 03:41:57.123 [140443200707384] DEBUG - Reading 151 bytes in the body, code is 200 +Jun 04, 2026 03:41:57.123 [140443200707384] DEBUG - [com.plexapp.agents.thetvdb] Plug-in running on port 46809. +Jun 04, 2026 03:41:57.123 [140443200707384] DEBUG - Read configuration for [com.plexapp.agents.thetvdb], had 0 prefixes +Jun 04, 2026 03:41:57.123 [140443200707384] DEBUG - Updating [com.plexapp.agents.thetvdb] in the database, it has changed. +Jun 04, 2026 03:41:57.124 [140443243293496] DEBUG - [HttpClient/HCl#52] HTTP/1.1 (20.1s) 200 response from GET http://127.0.0.1:33755/system/agents (reused) +Jun 04, 2026 03:41:57.124 [140443251936056] DEBUG - [com.plexapp.system] HTTP reply status 200, with 8986 bytes of content. +Jun 04, 2026 03:41:57.125 [140443251936056] DEBUG - The system knows about 12 agents. +Jun 04, 2026 03:41:57.125 [140443188103992] DEBUG - [Req#d2] [com.plexapp.agents.thetvdb] Sending command over HTTP (GET): /:/plugins/com.plexapp.agents.thetvdb +Jun 04, 2026 03:41:57.125 [140443190213432] DEBUG - [Req#ae] [com.plexapp.agents.thetvdb] Sending command over HTTP (GET): /:/plugins/com.plexapp.agents.thetvdb +Jun 04, 2026 03:41:57.125 [140443188103992] DEBUG - [Req#d2/HCl#57] HTTP requesting GET http://127.0.0.1:46809/:/plugins/com.plexapp.agents.thetvdb +Jun 04, 2026 03:41:57.125 [140443190213432] DEBUG - [Req#ae/HCl#58] HTTP requesting GET http://127.0.0.1:46809/:/plugins/com.plexapp.agents.thetvdb +Jun 04, 2026 03:41:57.125 [140443249711928] DEBUG - Starting scheduled updates, every 3600 seconds +Jun 04, 2026 03:41:57.125 [140443249711928] INFO - LibraryUpdateManager path watching is disabled +Jun 04, 2026 03:41:57.125 [140443249711928] DEBUG - Done waiting for all plug-ins to start. +Jun 04, 2026 03:41:57.125 [140443249711928] DEBUG - Starting file watcher for com.plexapp.agents.localmedia +Jun 04, 2026 03:41:57.125 [140443222039352] DEBUG - Downloading document http://127.0.0.1:32400/:/plugins/com.plexapp.agents.imdb/prefs +Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - Plug-in limit of 6 exceeded. +Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.movieposterdb. +Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - Stopping [com.plexapp.agents.movieposterdb]. +Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - [com.plexapp.agents.movieposterdb] Killing. +Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:57.126 [140443222039352] DEBUG - [Req#e6] Starting file watcher for com.plexapp.agents.imdb +Jun 04, 2026 03:41:57.126 [140443222039352] DEBUG - [Req#e6] Plug-in limit of 6 exceeded. +Jun 04, 2026 03:41:57.126 [140443222039352] DEBUG - [Req#e6] * Bringing down the older plug-in: com.plexapp.agents.localmedia. +Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - Spawned plug-in com.plexapp.agents.localmedia with PID 701 +Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:57.127 [140443269335864] WARN - JobManager: Could not find job for handle 453 +Jun 04, 2026 03:41:57.132 [140443243293496] DEBUG - [HttpClient/HCl#57] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:46809/:/plugins/com.plexapp.agents.thetvdb +Jun 04, 2026 03:41:57.132 [140443188103992] DEBUG - [Req#d2] [com.plexapp.agents.thetvdb] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:57.133 [140443261360952] DEBUG - Completed: [127.0.0.1:34982] 404 GET /:/plugins/com.plexapp.agents.thetvdb (3 live) #d2 GZIP 20067ms 269 bytes +Jun 04, 2026 03:41:57.134 [140443243293496] DEBUG - [HttpClient/HCl#58] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:46809/:/plugins/com.plexapp.agents.thetvdb +Jun 04, 2026 03:41:57.134 [140443190213432] DEBUG - [Req#ae] [com.plexapp.agents.thetvdb] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:57.134 [140443261360952] DEBUG - Completed: [127.0.0.1:60772] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #ae GZIP 40086ms 269 bytes +Jun 04, 2026 03:41:57.490 [140443185994552] DEBUG - Request: [127.0.0.1:46144 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.localmedia (2 live) #e2 GZIP Token () +Jun 04, 2026 03:41:57.490 [140443185994552] DEBUG - [Req#e2] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.localmedia +Jun 04, 2026 03:41:57.490 [140443185994552] DEBUG - [Req#e2/HCl#59] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.localmedia +Jun 04, 2026 03:41:57.493 [140443243293496] DEBUG - [HttpClient/HCl#59] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.localmedia (reused) +Jun 04, 2026 03:41:57.493 [140443185994552] DEBUG - [Req#e2] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:57.493 [140443261360952] DEBUG - Completed: [127.0.0.1:46144] 200 GET /system/messaging/clear_events/com.plexapp.agents.localmedia (2 live) #e2 GZIP 2ms 280 bytes +Jun 04, 2026 03:41:57.534 [140443188103992] DEBUG - Request: [127.0.0.1:46146 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #e9 GZIP Token () +Jun 04, 2026 03:41:57.534 [140443188103992] DEBUG - [Req#e9] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:57.534 [140443188103992] DEBUG - [Req#e9/HCl#5a] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:57.536 [140443243293496] DEBUG - [HttpClient/HCl#5a] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:57.536 [140443188103992] DEBUG - [Req#e9] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:57.536 [140443261360952] DEBUG - Completed: [127.0.0.1:46146] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #e9 GZIP 2ms 261 bytes +Jun 04, 2026 03:41:57.542 [140443190213432] DEBUG - Request: [127.0.0.1:46154 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #eb GZIP Token () +Jun 04, 2026 03:41:57.542 [140443190213432] DEBUG - [Req#eb] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:57.542 [140443190213432] DEBUG - [Req#eb/HCl#5b] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:57.542 [140443245435704] DEBUG - Request: [127.0.0.1:46160 (Loopback)] GET / (3 live) #ed GZIP Token () +Jun 04, 2026 03:41:57.542 [140443259251512] DEBUG - Completed: [127.0.0.1:46160] 200 GET / (3 live) #ed GZIP 0ms 2671 bytes +Jun 04, 2026 03:41:57.544 [140443243293496] DEBUG - [HttpClient/HCl#5b] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:57.544 [140443190213432] DEBUG - [Req#eb] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:57.544 [140443259251512] DEBUG - Completed: [127.0.0.1:46154] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #eb GZIP 2ms 746 bytes +Jun 04, 2026 03:41:57.808 [140443185994552] DEBUG - Request: [127.0.0.1:46168 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #ee GZIP Token () +Jun 04, 2026 03:41:57.808 [140443185994552] DEBUG - [Req#ee] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:41:57.809 [140443185994552] DEBUG - [Req#ee/HCl#5c] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:41:57.811 [140443243293496] DEBUG - [HttpClient/HCl#5c] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:41:57.811 [140443185994552] DEBUG - [Req#ee] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:57.811 [140443259251512] DEBUG - Completed: [127.0.0.1:46168] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #ee GZIP 2ms 415 bytes +Jun 04, 2026 03:41:57.812 [140443188103992] DEBUG - Request: [127.0.0.1:46180 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #f1 GZIP Token () +Jun 04, 2026 03:41:57.813 [140443188103992] DEBUG - [Req#f1] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:41:57.813 [140443188103992] DEBUG - [Req#f1/HCl#5d] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:41:57.815 [140443243293496] DEBUG - [HttpClient/HCl#5d] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:41:57.815 [140443188103992] DEBUG - [Req#f1] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:57.815 [140443259251512] DEBUG - Completed: [127.0.0.1:46180] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #f1 GZIP 2ms 415 bytes +Jun 04, 2026 03:41:57.817 [140443245435704] DEBUG - Request: [127.0.0.1:46194 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK (2 live) #f3 GZIP Token () +Jun 04, 2026 03:41:57.817 [140443245435704] DEBUG - [Req#f3] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +Jun 04, 2026 03:41:57.817 [140443245435704] DEBUG - [Req#f3/HCl#5e] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +Jun 04, 2026 03:41:57.819 [140443243293496] DEBUG - [HttpClient/HCl#5e] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +Jun 04, 2026 03:41:57.819 [140443245435704] DEBUG - [Req#f3] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:57.820 [140443261360952] DEBUG - Completed: [127.0.0.1:46194] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK (2 live) #f3 GZIP 2ms 415 bytes +Jun 04, 2026 03:41:57.821 [140443190213432] DEBUG - Request: [127.0.0.1:46202 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK (2 live) #f5 GZIP Token () +Jun 04, 2026 03:41:57.821 [140443190213432] DEBUG - [Req#f5] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +Jun 04, 2026 03:41:57.821 [140443190213432] DEBUG - [Req#f5/HCl#5f] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +Jun 04, 2026 03:41:57.824 [140443243293496] DEBUG - [HttpClient/HCl#5f] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +Jun 04, 2026 03:41:57.824 [140443190213432] DEBUG - [Req#f5] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:57.824 [140443261360952] DEBUG - Completed: [127.0.0.1:46202] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK (2 live) #f5 GZIP 3ms 415 bytes +Jun 04, 2026 03:41:57.826 [140443185994552] DEBUG - Request: [127.0.0.1:46206 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ (2 live) #f7 GZIP Token () +Jun 04, 2026 03:41:57.826 [140443185994552] DEBUG - [Req#f7] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +Jun 04, 2026 03:41:57.826 [140443185994552] DEBUG - [Req#f7/HCl#60] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +Jun 04, 2026 03:41:57.828 [140443243293496] DEBUG - [HttpClient/HCl#60] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +Jun 04, 2026 03:41:57.828 [140443185994552] DEBUG - [Req#f7] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:57.829 [140443261360952] DEBUG - Completed: [127.0.0.1:46206] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ (2 live) #f7 GZIP 3ms 415 bytes +Jun 04, 2026 03:41:57.831 [140443249711928] DEBUG - Reading 154 bytes in the body, code is 200 +Jun 04, 2026 03:41:57.831 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] Plug-in running on port 34913. +Jun 04, 2026 03:41:57.831 [140443249711928] DEBUG - Read configuration for [com.plexapp.agents.localmedia], had 0 prefixes +Jun 04, 2026 03:41:57.831 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] Sending command over HTTP (GET): /:/plugins/com.plexapp.agents.localmedia/prefs +Jun 04, 2026 03:41:57.831 [140443222039352] DEBUG - [Req#e6] Stopping [com.plexapp.agents.localmedia]. +Jun 04, 2026 03:41:57.831 [140443249711928] DEBUG - [HCl#61] HTTP requesting GET http://127.0.0.1:34913/:/plugins/com.plexapp.agents.localmedia/prefs +Jun 04, 2026 03:41:57.831 [140443222039352] DEBUG - [Req#e6] [com.plexapp.agents.localmedia] Killing. +Jun 04, 2026 03:41:57.831 [140443222039352] DEBUG - [Req#e6] Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:57.831 [140443222039352] DEBUG - [Req#e6] Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:57.831 [140443222039352] DEBUG - [Req#e6] Spawned plug-in com.plexapp.agents.imdb with PID 726 +Jun 04, 2026 03:41:57.831 [140443222039352] DEBUG - [Req#e6] [com.plexapp.agents.imdb] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:57.834 [140443243293496] WARN - [HttpClient/HCl#61] HTTP error requesting GET http://127.0.0.1:34913/:/plugins/com.plexapp.agents.localmedia/prefs (56, Failure when receiving data from the peer) (Recv failure: Connection reset by peer) +Jun 04, 2026 03:41:57.834 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] HTTP reply status -56, with 0 bytes of content. +Jun 04, 2026 03:41:57.834 [140443269335864] WARN - JobManager: Could not find job for handle 701 +Jun 04, 2026 03:41:57.834 [140443249711928] DEBUG - PluginRepository::setStartState: 3, complete +Jun 04, 2026 03:41:58.190 [140443188103992] DEBUG - Request: [127.0.0.1:46220 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.imdb (2 live) #f9 GZIP Token () +Jun 04, 2026 03:41:58.190 [140443188103992] DEBUG - [Req#f9] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.imdb +Jun 04, 2026 03:41:58.190 [140443188103992] DEBUG - [Req#f9/HCl#62] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.imdb +Jun 04, 2026 03:41:58.192 [140443243293496] DEBUG - [HttpClient/HCl#62] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.imdb +Jun 04, 2026 03:41:58.192 [140443188103992] DEBUG - [Req#f9] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:41:58.192 [140443261360952] DEBUG - Completed: [127.0.0.1:46220] 200 GET /system/messaging/clear_events/com.plexapp.agents.imdb (2 live) #f9 GZIP 1ms 280 bytes +Jun 04, 2026 03:41:58.237 [140443245435704] DEBUG - Request: [127.0.0.1:46230 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #fb GZIP Token () +Jun 04, 2026 03:41:58.237 [140443245435704] DEBUG - [Req#fb] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:58.237 [140443245435704] DEBUG - [Req#fb/HCl#63] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:58.239 [140443243293496] DEBUG - [HttpClient/HCl#63] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:41:58.239 [140443245435704] DEBUG - [Req#fb] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:41:58.239 [140443261360952] DEBUG - Completed: [127.0.0.1:46230] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #fb GZIP 1ms 261 bytes +Jun 04, 2026 03:41:58.244 [140443190213432] DEBUG - Request: [127.0.0.1:46238 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #fd GZIP Token () +Jun 04, 2026 03:41:58.244 [140443190213432] DEBUG - [Req#fd] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:58.244 [140443190213432] DEBUG - [Req#fd/HCl#64] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:58.245 [140443185994552] DEBUG - Request: [127.0.0.1:46252 (Loopback)] GET / (3 live) #ff GZIP Token () +Jun 04, 2026 03:41:58.245 [140443259251512] DEBUG - Completed: [127.0.0.1:46252] 200 GET / (3 live) #ff GZIP 0ms 2654 bytes +Jun 04, 2026 03:41:58.246 [140443243293496] DEBUG - [HttpClient/HCl#64] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:41:58.246 [140443190213432] DEBUG - [Req#fd] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:41:58.246 [140443259251512] DEBUG - Completed: [127.0.0.1:46238] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #fd GZIP 2ms 746 bytes +Jun 04, 2026 03:41:58.455 [140443188103992] DEBUG - Request: [[::1]:41466 (Loopback)] GET /identity (2 live) #100 +Jun 04, 2026 03:41:58.456 [140443259251512] DEBUG - Completed: [[::1]:41466] 200 GET /identity (2 live) #100 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:41:58.469 [140443245435704] DEBUG - Request: [127.0.0.1:46260 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ (2 live) #103 GZIP Token () +Jun 04, 2026 03:41:58.469 [140443245435704] DEBUG - [Req#103] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ +Jun 04, 2026 03:41:58.469 [140443245435704] DEBUG - [Req#103/HCl#65] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ +Jun 04, 2026 03:41:58.471 [140443243293496] DEBUG - [HttpClient/HCl#65] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ +Jun 04, 2026 03:41:58.471 [140443245435704] DEBUG - [Req#103] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:41:58.471 [140443261360952] DEBUG - Completed: [127.0.0.1:46260] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ (2 live) #103 GZIP 2ms 415 bytes +Jun 04, 2026 03:41:58.473 [140443222039352] DEBUG - [Req#e6] Reading 148 bytes in the body, code is 200 +Jun 04, 2026 03:41:58.473 [140443222039352] DEBUG - [Req#e6] [com.plexapp.agents.imdb] Plug-in running on port 40185. +Jun 04, 2026 03:41:58.473 [140443222039352] DEBUG - [Req#e6] Read configuration for [com.plexapp.agents.imdb], had 0 prefixes +Jun 04, 2026 03:41:58.473 [140443222039352] DEBUG - [Req#e6] [com.plexapp.agents.imdb] Sending command over HTTP (GET): /:/plugins/com.plexapp.agents.imdb/prefs +Jun 04, 2026 03:41:58.474 [140443222039352] DEBUG - [Req#e6/HCl#66] HTTP requesting GET http://127.0.0.1:40185/:/plugins/com.plexapp.agents.imdb/prefs +Jun 04, 2026 03:41:58.480 [140443243293496] DEBUG - [HttpClient/HCl#66] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:40185/:/plugins/com.plexapp.agents.imdb/prefs +Jun 04, 2026 03:41:58.480 [140443222039352] DEBUG - [Req#e6] [com.plexapp.agents.imdb] HTTP reply status 200, with 2224 bytes of content. +Jun 04, 2026 03:41:58.480 [140443222039352] DEBUG - Caching document http://127.0.0.1:32400/:/plugins/com.plexapp.agents.imdb/prefs as 584183bdb017f226470e9202aed4e772801b19b0 +Jun 04, 2026 03:41:58.480 [140443222039352] DEBUG - IVA: Downloading trailer lists. +Jun 04, 2026 03:41:58.666 [140443230477112] ERROR - downloadContainer: expected MediaContainer element, found Error +Jun 04, 2026 03:41:58.666 [140443222039352] ERROR - IVA: Error downloading trailers for source 1. +Jun 04, 2026 03:41:58.801 [140443230477112] ERROR - downloadContainer: expected MediaContainer element, found Error +Jun 04, 2026 03:41:58.801 [140443222039352] ERROR - IVA: Error downloading trailers for source 2. +Jun 04, 2026 03:41:58.834 [140443249711928] DEBUG - File "/config/Library/Application Support/Plex Media Server/Plug-ins" changed: 2026-05-19 18:20:18 (1779214818) => 2026-06-04 03:41:15 (1780544475). +Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - Scanning for plug-ins in "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea" +Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - Scanning for plug-ins in "/config/Library/Application Support/Plex Media Server/Plug-ins" +Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - PluginRepository::setStartState: 1, startingSystem +Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - PluginRepository::setStartState: 2, startingPlugins +Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - Updating the list of agents known by the system. +Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents +Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - [HCl#6b] HTTP requesting GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:59.839 [140443243293496] DEBUG - [HttpClient/HCl#6b] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents +Jun 04, 2026 03:41:59.839 [140443249711928] DEBUG - [com.plexapp.system] HTTP reply status 200, with 8986 bytes of content. +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - The system knows about 12 agents. +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Waiting for 0 plug-ins to finish starting. +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Starting scheduled updates, every 3600 seconds +Jun 04, 2026 03:41:59.840 [140443249711928] INFO - LibraryUpdateManager path watching is disabled +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Done waiting for all plug-ins to start. +Jun 04, 2026 03:41:59.840 [140443234695992] DEBUG - Downloading document http://127.0.0.1:32400/:/plugins/com.plexapp.agents.imdb/prefs +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Starting file watcher for com.plexapp.agents.localmedia +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Plug-in limit of 6 exceeded. +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.none. +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Stopping [com.plexapp.agents.none]. +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - [com.plexapp.agents.none] Killing. +Jun 04, 2026 03:41:59.840 [140443234695992] DEBUG - Cache hit for document http://127.0.0.1:32400/:/plugins/com.plexapp.agents.imdb/prefs +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' +Jun 04, 2026 03:41:59.840 [140443234695992] DEBUG - IVA: Downloading trailer lists. +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Spawned plug-in com.plexapp.agents.localmedia with PID 755 +Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] Sending command: GET /:/prefixes +Jun 04, 2026 03:41:59.842 [140443269335864] WARN - JobManager: Could not find job for handle 516 +Jun 04, 2026 03:41:59.994 [140443230477112] ERROR - downloadContainer: expected MediaContainer element, found Error +Jun 04, 2026 03:41:59.994 [140443234695992] ERROR - IVA: Error downloading trailers for source 1. +Jun 04, 2026 03:42:00.132 [140443230477112] ERROR - downloadContainer: expected MediaContainer element, found Error +Jun 04, 2026 03:42:00.132 [140443234695992] ERROR - IVA: Error downloading trailers for source 2. +Jun 04, 2026 03:42:00.200 [140443185994552] DEBUG - Request: [127.0.0.1:46272 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.localmedia (2 live) #106 GZIP Token () +Jun 04, 2026 03:42:00.200 [140443185994552] DEBUG - [Req#106] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.localmedia +Jun 04, 2026 03:42:00.200 [140443185994552] DEBUG - [Req#106/HCl#70] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.localmedia +Jun 04, 2026 03:42:00.201 [140443243293496] DEBUG - [HttpClient/HCl#70] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.localmedia (reused) +Jun 04, 2026 03:42:00.201 [140443185994552] DEBUG - [Req#106] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. +Jun 04, 2026 03:42:00.201 [140443261360952] DEBUG - Completed: [127.0.0.1:46272] 200 GET /system/messaging/clear_events/com.plexapp.agents.localmedia (2 live) #106 GZIP 1ms 280 bytes +Jun 04, 2026 03:42:00.244 [140443190213432] DEBUG - Request: [127.0.0.1:46280 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #109 GZIP Token () +Jun 04, 2026 03:42:00.244 [140443190213432] DEBUG - [Req#109] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:42:00.244 [140443190213432] DEBUG - [Req#109/HCl#71] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:42:00.246 [140443243293496] DEBUG - [HttpClient/HCl#71] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes +Jun 04, 2026 03:42:00.246 [140443190213432] DEBUG - [Req#109] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:42:00.246 [140443261360952] DEBUG - Completed: [127.0.0.1:46280] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #109 GZIP 1ms 261 bytes +Jun 04, 2026 03:42:00.251 [140443188103992] DEBUG - Request: [127.0.0.1:46282 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #10b GZIP Token () +Jun 04, 2026 03:42:00.251 [140443188103992] DEBUG - [Req#10b] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:42:00.251 [140443188103992] DEBUG - [Req#10b/HCl#72] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:42:00.252 [140443245435704] DEBUG - Request: [127.0.0.1:46286 (Loopback)] GET / (3 live) #10d GZIP Token () +Jun 04, 2026 03:42:00.252 [140443259251512] DEBUG - Completed: [127.0.0.1:46286] 200 GET / (3 live) #10d GZIP 0ms 2671 bytes +Jun 04, 2026 03:42:00.253 [140443243293496] DEBUG - [HttpClient/HCl#72] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ +Jun 04, 2026 03:42:00.253 [140443188103992] DEBUG - [Req#10b] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. +Jun 04, 2026 03:42:00.253 [140443259251512] DEBUG - Completed: [127.0.0.1:46282] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #10b GZIP 1ms 746 bytes +Jun 04, 2026 03:42:00.506 [140443185994552] DEBUG - Request: [127.0.0.1:46288 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #10e GZIP Token () +Jun 04, 2026 03:42:00.506 [140443185994552] DEBUG - [Req#10e] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:42:00.506 [140443185994552] DEBUG - [Req#10e/HCl#73] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:42:00.508 [140443243293496] DEBUG - [HttpClient/HCl#73] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:42:00.508 [140443185994552] DEBUG - [Req#10e] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:42:00.508 [140443259251512] DEBUG - Completed: [127.0.0.1:46288] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #10e GZIP 1ms 415 bytes +Jun 04, 2026 03:42:00.509 [140443190213432] DEBUG - Request: [127.0.0.1:46294 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #111 GZIP Token () +Jun 04, 2026 03:42:00.509 [140443190213432] DEBUG - [Req#111] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:42:00.509 [140443190213432] DEBUG - [Req#111/HCl#74] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:42:00.511 [140443243293496] DEBUG - [HttpClient/HCl#74] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ +Jun 04, 2026 03:42:00.511 [140443190213432] DEBUG - [Req#111] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:42:00.511 [140443259251512] DEBUG - Completed: [127.0.0.1:46294] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #111 GZIP 2ms 415 bytes +Jun 04, 2026 03:42:00.512 [140443245435704] DEBUG - Request: [127.0.0.1:46300 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK (2 live) #113 GZIP Token () +Jun 04, 2026 03:42:00.512 [140443245435704] DEBUG - [Req#113] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +Jun 04, 2026 03:42:00.512 [140443245435704] DEBUG - [Req#113/HCl#75] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +Jun 04, 2026 03:42:00.514 [140443243293496] DEBUG - [HttpClient/HCl#75] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK +Jun 04, 2026 03:42:00.514 [140443245435704] DEBUG - [Req#113] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:42:00.514 [140443259251512] DEBUG - Completed: [127.0.0.1:46300] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK (2 live) #113 GZIP 2ms 415 bytes +Jun 04, 2026 03:42:00.516 [140443188103992] DEBUG - Request: [127.0.0.1:46310 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK (2 live) #115 GZIP Token () +Jun 04, 2026 03:42:00.516 [140443188103992] DEBUG - [Req#115] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +Jun 04, 2026 03:42:00.516 [140443188103992] DEBUG - [Req#115/HCl#76] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +Jun 04, 2026 03:42:00.519 [140443243293496] DEBUG - [HttpClient/HCl#76] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK +Jun 04, 2026 03:42:00.519 [140443188103992] DEBUG - [Req#115] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:42:00.519 [140443259251512] DEBUG - Completed: [127.0.0.1:46310] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK (2 live) #115 GZIP 2ms 415 bytes +Jun 04, 2026 03:42:00.520 [140443185994552] DEBUG - Request: [127.0.0.1:46318 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ (2 live) #117 GZIP Token () +Jun 04, 2026 03:42:00.520 [140443185994552] DEBUG - [Req#117] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +Jun 04, 2026 03:42:00.520 [140443185994552] DEBUG - [Req#117/HCl#77] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +Jun 04, 2026 03:42:00.522 [140443243293496] DEBUG - [HttpClient/HCl#77] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ +Jun 04, 2026 03:42:00.522 [140443185994552] DEBUG - [Req#117] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. +Jun 04, 2026 03:42:00.523 [140443259251512] DEBUG - Completed: [127.0.0.1:46318] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ (2 live) #117 GZIP 2ms 415 bytes +Jun 04, 2026 03:42:00.524 [140443249711928] DEBUG - Reading 154 bytes in the body, code is 200 +Jun 04, 2026 03:42:00.525 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] Plug-in running on port 35691. +Jun 04, 2026 03:42:00.525 [140443249711928] DEBUG - Read configuration for [com.plexapp.agents.localmedia], had 0 prefixes +Jun 04, 2026 03:42:00.525 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] Sending command over HTTP (GET): /:/plugins/com.plexapp.agents.localmedia/prefs +Jun 04, 2026 03:42:00.525 [140443249711928] DEBUG - [HCl#78] HTTP requesting GET http://127.0.0.1:35691/:/plugins/com.plexapp.agents.localmedia/prefs +Jun 04, 2026 03:42:00.530 [140443243293496] DEBUG - [HttpClient/HCl#78] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:35691/:/plugins/com.plexapp.agents.localmedia/prefs +Jun 04, 2026 03:42:00.530 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] HTTP reply status 200, with 281 bytes of content. +Jun 04, 2026 03:42:00.530 [140443249711928] DEBUG - PluginRepository::setStartState: 3, complete +Jun 04, 2026 03:42:02.161 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET / (2 live) #119 GZIP +Jun 04, 2026 03:42:02.162 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET / (2 live) #119 GZIP 0ms 2683 bytes (pipelined: 1) +Jun 04, 2026 03:42:02.368 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /identity (2 live) #11c GZIP +Jun 04, 2026 03:42:02.368 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /identity (2 live) #11c GZIP 0ms 487 bytes (pipelined: 2) +Jun 04, 2026 03:42:02.569 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library (2 live) #11d GZIP +Jun 04, 2026 03:42:02.570 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /library (2 live) #11d GZIP 0ms 597 bytes (pipelined: 3) +Jun 04, 2026 03:42:02.771 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library/sections (2 live) #11e GZIP +Jun 04, 2026 03:42:02.771 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /library/sections (2 live) #11e GZIP 0ms 432 bytes (pipelined: 4) +Jun 04, 2026 03:42:02.973 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library/sections/1/all (2 live) #11f GZIP +Jun 04, 2026 03:42:02.973 [140443188103992] WARN - [Req#11f] Invalid library section ID 1 passed. +Jun 04, 2026 03:42:02.973 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /library/sections/1/all (2 live) #11f GZIP 0ms 379 bytes (pipelined: 5) +Jun 04, 2026 03:42:03.174 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library/sections/1/onDeck (2 live) #120 GZIP +Jun 04, 2026 03:42:03.174 [140443185994552] WARN - [Req#120] Invalid library section ID 1 passed. +Jun 04, 2026 03:42:03.174 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 404 GET /library/sections/1/onDeck (2 live) #120 GZIP 0ms 379 bytes (pipelined: 6) +Jun 04, 2026 03:42:03.376 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library/sections/1/recentlyAdded (2 live) #121 GZIP +Jun 04, 2026 03:42:03.376 [140443190213432] WARN - [Req#121] Invalid library section ID 1 passed. +Jun 04, 2026 03:42:03.376 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /library/sections/1/recentlyAdded (2 live) #121 GZIP 0ms 379 bytes (pipelined: 7) +Jun 04, 2026 03:42:03.577 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library/metadata/1 (2 live) #122 GZIP +Jun 04, 2026 03:42:03.578 [140443245435704] WARN - [Req#122] Invalid library metadata ID 1 passed. +Jun 04, 2026 03:42:03.578 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 404 GET /library/metadata/1 (2 live) #122 GZIP 0ms 379 bytes (pipelined: 8) +Jun 04, 2026 03:42:03.779 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library/metadata/1/children (2 live) #123 GZIP +Jun 04, 2026 03:42:03.780 [140443188103992] WARN - [Req#123] Invalid library metadata ID 1 passed. +Jun 04, 2026 03:42:03.780 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /library/metadata/1/children (2 live) #123 GZIP 0ms 379 bytes (pipelined: 9) +Jun 04, 2026 03:42:03.981 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /status/sessions (2 live) #124 GZIP +Jun 04, 2026 03:42:03.981 [140443185994552] DEBUG - [Req#124] [Now] Adding 0 sessions. +Jun 04, 2026 03:42:03.981 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /status/sessions (2 live) #124 GZIP 0ms 397 bytes (pipelined: 10) +Jun 04, 2026 03:42:04.182 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /status/sessions/history/all (2 live) #125 GZIP +Jun 04, 2026 03:42:04.183 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /status/sessions/history/all (2 live) #125 GZIP 0ms 397 bytes (pipelined: 11) +Jun 04, 2026 03:42:04.384 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /accounts (2 live) #126 GZIP +Jun 04, 2026 03:42:04.385 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /accounts (2 live) #126 GZIP 0ms 521 bytes (pipelined: 12) +Jun 04, 2026 03:42:04.586 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /devices (2 live) #127 GZIP +Jun 04, 2026 03:42:04.586 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /devices (2 live) #127 GZIP 0ms 483 bytes (pipelined: 13) +Jun 04, 2026 03:42:04.786 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /clients (2 live) #128 GZIP +Jun 04, 2026 03:42:04.787 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /clients (2 live) #128 GZIP 0ms 397 bytes (pipelined: 14) +Jun 04, 2026 03:42:04.793 [140443179666232] DEBUG - Stopping file watcher for com.plexapp.agents.movieposterdb +Jun 04, 2026 03:42:04.988 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /servers (2 live) #129 GZIP +Jun 04, 2026 03:42:04.988 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /servers (2 live) #129 GZIP 0ms 519 bytes (pipelined: 15) +Jun 04, 2026 03:42:05.189 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /hubs/search (2 live) #12a GZIP +Jun 04, 2026 03:42:05.190 [140443245435704] ERROR - [Req#12a] Missing required query parameter query +Jun 04, 2026 03:42:05.190 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 400 GET /hubs/search (2 live) #12a GZIP 0ms 384 bytes (pipelined: 16) +Jun 04, 2026 03:42:05.224 [140443175447352] DEBUG - Stopping file watcher for com.plexapp.agents.none +Jun 04, 2026 03:42:05.391 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /playlists (2 live) #12b GZIP +Jun 04, 2026 03:42:05.392 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /playlists (2 live) #12b GZIP 1ms 397 bytes (pipelined: 17) +Jun 04, 2026 03:42:05.593 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /butler (2 live) #12c GZIP +Jun 04, 2026 03:42:05.594 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /butler (2 live) #12c GZIP 0ms 799 bytes (pipelined: 18) +Jun 04, 2026 03:42:05.795 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /activities (2 live) #12d GZIP +Jun 04, 2026 03:42:05.796 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /activities (2 live) #12d GZIP 0ms 397 bytes (pipelined: 19) +Jun 04, 2026 03:42:05.997 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /updater/status (2 live) #12e GZIP +Jun 04, 2026 03:42:05.997 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /updater/status (2 live) #12e GZIP 0ms 433 bytes (pipelined: 20) +Jun 04, 2026 03:42:06.199 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /system/agents (2 live) #12f GZIP +Jun 04, 2026 03:42:06.200 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /system/agents (2 live) #12f GZIP 1ms 1917 bytes (pipelined: 21) +Jun 04, 2026 03:42:06.401 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /system/settings (2 live) #130 GZIP +Jun 04, 2026 03:42:06.402 [140443185994552] DEBUG - [Req#130] [com.plexapp.system] Sending command over HTTP (GET): /system/settings +Jun 04, 2026 03:42:06.402 [140443185994552] DEBUG - [Req#130/HCl#79] HTTP requesting GET http://127.0.0.1:33755/system/settings +Jun 04, 2026 03:42:06.404 [140443243293496] DEBUG - [HttpClient/HCl#79] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/system/settings +Jun 04, 2026 03:42:06.404 [140443185994552] DEBUG - [Req#130] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:42:06.404 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /system/settings (2 live) #130 GZIP 2ms 177 bytes (pipelined: 22) +Jun 04, 2026 03:42:06.605 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /system/updates (2 live) #131 GZIP +Jun 04, 2026 03:42:06.605 [140443190213432] DEBUG - [Req#131] [com.plexapp.system] Sending command over HTTP (GET): /system/updates +Jun 04, 2026 03:42:06.605 [140443190213432] DEBUG - [Req#131/HCl#7a] HTTP requesting GET http://127.0.0.1:33755/system/updates +Jun 04, 2026 03:42:06.607 [140443243293496] DEBUG - [HttpClient/HCl#7a] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/system/updates (reused) +Jun 04, 2026 03:42:06.607 [140443190213432] DEBUG - [Req#131] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:42:06.607 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 404 GET /system/updates (2 live) #131 GZIP 2ms 177 bytes (pipelined: 23) +Jun 04, 2026 03:42:06.809 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /statistics/bandwidth (2 live) #132 GZIP +Jun 04, 2026 03:42:06.809 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /statistics/bandwidth (2 live) #132 GZIP 0ms 379 bytes (pipelined: 24) +Jun 04, 2026 03:42:07.010 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /statistics/resources (2 live) #133 GZIP +Jun 04, 2026 03:42:07.010 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 404 GET /statistics/resources (2 live) #133 GZIP 0ms 379 bytes (pipelined: 25) +Jun 04, 2026 03:42:07.211 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /diagnostics (2 live) #134 GZIP +Jun 04, 2026 03:42:07.211 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /diagnostics (2 live) #134 GZIP 0ms 416 bytes (pipelined: 26) +Jun 04, 2026 03:42:07.412 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /sync (2 live) #135 GZIP +Jun 04, 2026 03:42:07.412 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /sync (2 live) #135 GZIP 0ms 416 bytes (pipelined: 27) +Jun 04, 2026 03:42:07.613 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /sync/items (2 live) #136 GZIP +Jun 04, 2026 03:42:07.613 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /sync/items (2 live) #136 GZIP 0ms 379 bytes (pipelined: 28) +Jun 04, 2026 03:42:07.814 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /sync/queue (2 live) #137 GZIP +Jun 04, 2026 03:42:07.814 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 404 GET /sync/queue (2 live) #137 GZIP 0ms 379 bytes (pipelined: 29) +Jun 04, 2026 03:42:08.015 [140443185994552] INFO - Request: [172.22.0.1:49246 (Subnet)] GET /services/browse (2 live) #138 GZIP +Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: overlay Path: / Name: overlay +Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: cgroup2 Path: /sys/fs/cgroup Name: cgroup +Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: mqueue Path: /dev/mqueue Name: mqueue +Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: btrfs Path: /config Name: /dev/mapper/root +Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: btrfs Path: /transcode Name: /dev/mapper/root +Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: btrfs Path: /data/media Name: /dev/mapper/root +Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: btrfs Path: /etc/resolv.conf Name: /dev/mapper/root +Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: btrfs Path: /etc/hostname Name: /dev/mapper/root +Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: btrfs Path: /etc/hosts Name: /dev/mapper/root +Jun 04, 2026 03:42:08.015 [140443261360952] INFO - Completed: [172.22.0.1:49246] 200 GET /services/browse (2 live) #138 GZIP 0ms 615 bytes (pipelined: 30) +Jun 04, 2026 03:42:08.216 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /media/grabbers (2 live) #139 GZIP +Jun 04, 2026 03:42:08.217 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /media/grabbers (2 live) #139 GZIP 0ms 516 bytes (pipelined: 31) +Jun 04, 2026 03:42:08.417 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /livetv/dvrs (2 live) #13a GZIP +Jun 04, 2026 03:42:08.417 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /livetv/dvrs (2 live) #13a GZIP 0ms 397 bytes (pipelined: 32) +Jun 04, 2026 03:42:08.481 [140443188103992] DEBUG - Request: [[::1]:39164 (Loopback)] GET /identity (3 live) #11b +Jun 04, 2026 03:42:08.481 [140443261360952] DEBUG - Completed: [[::1]:39164] 200 GET /identity (3 live) #11b 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:42:08.618 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /livetv/epg (2 live) #13b GZIP +Jun 04, 2026 03:42:08.619 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /livetv/epg (2 live) #13b GZIP 0ms 379 bytes (pipelined: 33) +Jun 04, 2026 03:42:08.819 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /channels (2 live) #13f GZIP +Jun 04, 2026 03:42:08.819 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /channels (2 live) #13f GZIP 0ms 454 bytes (pipelined: 34) +Jun 04, 2026 03:42:09.020 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /player/timeline/poll (2 live) #140 GZIP +Jun 04, 2026 03:42:09.020 [140443245435704] ERROR - [Req#140/CompanionProxy] Missing required query parameter commandID +Jun 04, 2026 03:42:09.021 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 400 GET /player/timeline/poll (2 live) #140 GZIP 0ms 384 bytes (pipelined: 35) +Jun 04, 2026 03:42:09.221 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /player/playback/playMedia (2 live) #141 GZIP +Jun 04, 2026 03:42:09.222 [140443188103992] ERROR - [Req#141/CompanionProxy] Missing required path parameter X-Plex-Target-Client-Identifier +Jun 04, 2026 03:42:09.222 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 400 GET /player/playback/playMedia (2 live) #141 GZIP 0ms 384 bytes (pipelined: 36) +Jun 04, 2026 03:42:09.421 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /transcode/sessions (2 live) #142 GZIP +Jun 04, 2026 03:42:09.422 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /transcode/sessions (2 live) #142 GZIP 0ms 397 bytes (pipelined: 37) +Jun 04, 2026 03:42:09.623 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /security/resources (2 live) #143 GZIP +Jun 04, 2026 03:42:09.623 [140443190213432] ERROR - [Req#143] Missing required query parameter source +Jun 04, 2026 03:42:09.623 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 400 GET /security/resources (2 live) #143 GZIP 0ms 384 bytes (pipelined: 38) +Jun 04, 2026 03:42:09.824 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /security/token (2 live) #144 GZIP +Jun 04, 2026 03:42:09.824 [140443245435704] ERROR - [Req#144] Missing required query parameter type +Jun 04, 2026 03:42:09.825 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 400 GET /security/token (2 live) #144 GZIP 0ms 384 bytes (pipelined: 39) +Jun 04, 2026 03:42:10.025 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /downloadQueue (2 live) #145 GZIP +Jun 04, 2026 03:42:10.025 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 404 GET /downloadQueue (2 live) #145 GZIP 0ms 379 bytes (pipelined: 40) +Jun 04, 2026 03:42:18.506 [140443190213432] DEBUG - Request: [[::1]:59980 (Loopback)] GET /identity (2 live) #13c +Jun 04, 2026 03:42:18.506 [140443259251512] DEBUG - Completed: [[::1]:59980] 200 GET /identity (2 live) #13c 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:42:26.351 [140443190213432] DEBUG - Request: [172.22.0.1:58328 (Subnet)] GET / (2 live) #148 +Jun 04, 2026 03:42:26.351 [140443261360952] DEBUG - Completed: [172.22.0.1:58328] 200 GET / (2 live) #148 0ms 5131 bytes (pipelined: 1) +Jun 04, 2026 03:42:28.533 [140443190213432] DEBUG - Request: [[::1]:38916 (Loopback)] GET /identity (2 live) #14b +Jun 04, 2026 03:42:28.533 [140443261360952] DEBUG - Completed: [[::1]:38916] 200 GET /identity (2 live) #14b 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:42:38.559 [140443190213432] DEBUG - Request: [[::1]:34410 (Loopback)] GET /identity (2 live) #14e +Jun 04, 2026 03:42:38.559 [140443261360952] DEBUG - Completed: [[::1]:34410] 200 GET /identity (2 live) #14e 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:42:48.584 [140443190213432] DEBUG - Request: [[::1]:39882 (Loopback)] GET /identity (2 live) #151 +Jun 04, 2026 03:42:48.585 [140443259251512] DEBUG - Completed: [[::1]:39882] 200 GET /identity (2 live) #151 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.619 [140443190213432] DEBUG - Request: [172.22.0.1:35550 (Subnet)] GET / (2 live) #154 +Jun 04, 2026 03:42:54.619 [140443259251512] DEBUG - Completed: [172.22.0.1:35550] 200 GET / (2 live) #154 0ms 5131 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.623 [140443190213432] DEBUG - Request: [172.22.0.1:35560 (Subnet)] GET /identity (2 live) #157 +Jun 04, 2026 03:42:54.623 [140443261360952] DEBUG - Completed: [172.22.0.1:35560] 200 GET /identity (2 live) #157 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.626 [140443190213432] DEBUG - Request: [172.22.0.1:35572 (Subnet)] GET /library (2 live) #15a +Jun 04, 2026 03:42:54.626 [140443261360952] DEBUG - Completed: [172.22.0.1:35572] 200 GET /library (2 live) #15a 0ms 670 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.630 [140443190213432] DEBUG - Request: [172.22.0.1:35574 (Subnet)] GET /library/sections (2 live) #15d +Jun 04, 2026 03:42:54.630 [140443261360952] DEBUG - Completed: [172.22.0.1:35574] 200 GET /library/sections (2 live) #15d 0ms 329 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.633 [140443190213432] DEBUG - Request: [172.22.0.1:35578 (Subnet)] GET /status/sessions (2 live) #160 +Jun 04, 2026 03:42:54.633 [140443190213432] DEBUG - [Req#160] [Now] Adding 0 sessions. +Jun 04, 2026 03:42:54.633 [140443261360952] DEBUG - Completed: [172.22.0.1:35578] 200 GET /status/sessions (2 live) #160 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.636 [140443190213432] DEBUG - Request: [172.22.0.1:35580 (Subnet)] GET /accounts (2 live) #163 +Jun 04, 2026 03:42:54.636 [140443261360952] DEBUG - Completed: [172.22.0.1:35580] 200 GET /accounts (2 live) #163 0ms 493 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.642 [140443190213432] DEBUG - Request: [172.22.0.1:35592 (Subnet)] GET /devices (2 live) #166 +Jun 04, 2026 03:42:54.642 [140443261360952] DEBUG - Completed: [172.22.0.1:35592] 200 GET /devices (2 live) #166 0ms 414 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.646 [140443190213432] DEBUG - Request: [172.22.0.1:35608 (Subnet)] GET /clients (2 live) #169 +Jun 04, 2026 03:42:54.646 [140443259251512] DEBUG - Completed: [172.22.0.1:35608] 200 GET /clients (2 live) #169 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.649 [140443190213432] DEBUG - Request: [172.22.0.1:35620 (Subnet)] GET /servers (2 live) #16c +Jun 04, 2026 03:42:54.650 [140443261360952] DEBUG - Completed: [172.22.0.1:35620] 200 GET /servers (2 live) #16c 0ms 470 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.653 [140443190213432] DEBUG - Request: [172.22.0.1:35626 (Subnet)] GET /playlists (2 live) #16f +Jun 04, 2026 03:42:54.653 [140443261360952] DEBUG - Completed: [172.22.0.1:35626] 200 GET /playlists (2 live) #16f 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.657 [140443190213432] DEBUG - Request: [172.22.0.1:35640 (Subnet)] GET /butler (2 live) #172 +Jun 04, 2026 03:42:54.657 [140443261360952] DEBUG - Completed: [172.22.0.1:35640] 200 GET /butler (2 live) #172 0ms 2509 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.660 [140443190213432] DEBUG - Request: [172.22.0.1:35654 (Subnet)] GET /activities (2 live) #175 +Jun 04, 2026 03:42:54.660 [140443259251512] DEBUG - Completed: [172.22.0.1:35654] 200 GET /activities (2 live) #175 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.663 [140443190213432] DEBUG - Request: [172.22.0.1:35664 (Subnet)] GET /updater/status (2 live) #178 +Jun 04, 2026 03:42:54.664 [140443259251512] DEBUG - Completed: [172.22.0.1:35664] 200 GET /updater/status (2 live) #178 0ms 334 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.667 [140443190213432] DEBUG - Request: [172.22.0.1:35670 (Subnet)] GET /system/agents (2 live) #17b +Jun 04, 2026 03:42:54.667 [140443261360952] DEBUG - Completed: [172.22.0.1:35670] 200 GET /system/agents (2 live) #17b 0ms 17417 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.671 [140443190213432] DEBUG - Request: [172.22.0.1:35682 (Subnet)] GET /system/settings (2 live) #17e +Jun 04, 2026 03:42:54.671 [140443190213432] DEBUG - [Req#17e] [com.plexapp.system] Sending command over HTTP (GET): /system/settings +Jun 04, 2026 03:42:54.671 [140443190213432] DEBUG - [Req#17e/HCl#7b] HTTP requesting GET http://127.0.0.1:33755/system/settings +Jun 04, 2026 03:42:54.672 [140443243293496] DEBUG - [HttpClient/HCl#7b] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/system/settings (reused) +Jun 04, 2026 03:42:54.672 [140443190213432] DEBUG - [Req#17e] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:42:54.672 [140443259251512] DEBUG - Completed: [172.22.0.1:35682] 404 GET /system/settings (2 live) #17e 1ms 177 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.675 [140443190213432] DEBUG - Request: [172.22.0.1:35696 (Subnet)] GET /system/updates (2 live) #181 +Jun 04, 2026 03:42:54.675 [140443190213432] DEBUG - [Req#181] [com.plexapp.system] Sending command over HTTP (GET): /system/updates +Jun 04, 2026 03:42:54.675 [140443190213432] DEBUG - [Req#181/HCl#7c] HTTP requesting GET http://127.0.0.1:33755/system/updates +Jun 04, 2026 03:42:54.676 [140443243293496] DEBUG - [HttpClient/HCl#7c] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/system/updates (reused) +Jun 04, 2026 03:42:54.676 [140443190213432] DEBUG - [Req#181] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:42:54.676 [140443261360952] DEBUG - Completed: [172.22.0.1:35696] 404 GET /system/updates (2 live) #181 0ms 177 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.680 [140443190213432] DEBUG - Request: [172.22.0.1:35700 (Subnet)] GET /statistics/bandwidth (2 live) #184 +Jun 04, 2026 03:42:54.680 [140443259251512] DEBUG - Completed: [172.22.0.1:35700] 404 GET /statistics/bandwidth (2 live) #184 0ms 288 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.684 [140443190213432] DEBUG - Request: [172.22.0.1:35712 (Subnet)] GET /statistics/resources (2 live) #187 +Jun 04, 2026 03:42:54.684 [140443259251512] DEBUG - Completed: [172.22.0.1:35712] 404 GET /statistics/resources (2 live) #187 0ms 288 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.688 [140443190213432] DEBUG - Request: [172.22.0.1:35714 (Subnet)] GET /sync (2 live) #18a +Jun 04, 2026 03:42:54.688 [140443261360952] DEBUG - Completed: [172.22.0.1:35714] 200 GET /sync (2 live) #18a 0ms 311 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.691 [140443190213432] DEBUG - Request: [172.22.0.1:35718 (Subnet)] GET /channels (2 live) #18d +Jun 04, 2026 03:42:54.691 [140443259251512] DEBUG - Completed: [172.22.0.1:35718] 200 GET /channels (2 live) #18d 0ms 388 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.695 [140443190213432] DEBUG - Request: [172.22.0.1:35730 (Subnet)] GET /transcode/sessions (2 live) #190 +Jun 04, 2026 03:42:54.695 [140443259251512] DEBUG - Completed: [172.22.0.1:35730] 200 GET /transcode/sessions (2 live) #190 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:42:54.698 [140443190213432] DEBUG - Request: [172.22.0.1:35732 (Subnet)] GET /hubs/search (2 live) #193 +Jun 04, 2026 03:42:54.698 [140443190213432] ERROR - [Req#193] Missing required query parameter query +Jun 04, 2026 03:42:54.698 [140443259251512] DEBUG - Completed: [172.22.0.1:35732] 400 GET /hubs/search (2 live) #193 0ms 294 bytes (pipelined: 1) +Jun 04, 2026 03:42:58.609 [140443190213432] DEBUG - Request: [[::1]:44466 (Loopback)] GET /identity (2 live) #196 +Jun 04, 2026 03:42:58.609 [140443261360952] DEBUG - Completed: [[::1]:44466] 200 GET /identity (2 live) #196 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:43:07.033 [140443190213432] DEBUG - Request: [172.22.0.1:43570 (Subnet)] GET /butler (2 live) #199 +Jun 04, 2026 03:43:07.034 [140443261360952] DEBUG - Completed: [172.22.0.1:43570] 200 GET /butler (2 live) #199 0ms 2509 bytes (pipelined: 1) +Jun 04, 2026 03:43:07.051 [140443190213432] DEBUG - Request: [172.22.0.1:43574 (Subnet)] GET /accounts (2 live) #19c +Jun 04, 2026 03:43:07.052 [140443259251512] DEBUG - Completed: [172.22.0.1:43574] 200 GET /accounts (2 live) #19c 0ms 493 bytes (pipelined: 1) +Jun 04, 2026 03:43:07.073 [140443190213432] DEBUG - Request: [172.22.0.1:43582 (Subnet)] GET /devices (2 live) #19f +Jun 04, 2026 03:43:07.073 [140443259251512] DEBUG - Completed: [172.22.0.1:43582] 200 GET /devices (2 live) #19f 0ms 414 bytes (pipelined: 1) +Jun 04, 2026 03:43:07.092 [140443190213432] DEBUG - Request: [172.22.0.1:43584 (Subnet)] GET /clients (2 live) #1a2 +Jun 04, 2026 03:43:07.092 [140443259251512] DEBUG - Completed: [172.22.0.1:43584] 200 GET /clients (2 live) #1a2 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:43:08.635 [140443190213432] DEBUG - Request: [[::1]:57554 (Loopback)] GET /identity (2 live) #1a5 +Jun 04, 2026 03:43:08.635 [140443261360952] DEBUG - Completed: [[::1]:57554] 200 GET /identity (2 live) #1a5 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:43:13.606 [140443245435704] DEBUG - BPQ: [Starting] -> [Processing] +Jun 04, 2026 03:43:13.607 [140443245435704] DEBUG - BPQ: generating queue items from 0 generator(s) +Jun 04, 2026 03:43:13.607 [140443245435704] DEBUG - BPQ: generated 0 item(s) for queue +Jun 04, 2026 03:43:13.607 [140443245435704] DEBUG - BPQ: [Processing] -> [Idle] +Jun 04, 2026 03:43:15.214 [140443190213432] DEBUG - Request: [127.0.0.1:54380 (Loopback)] GET /servers (2 live) #1a8 GZIP Token () +Jun 04, 2026 03:43:15.215 [140443259251512] DEBUG - Completed: [127.0.0.1:54380] 200 GET /servers (2 live) #1a8 GZIP 0ms 490 bytes +Jun 04, 2026 03:43:15.216 [140443190213432] DEBUG - Request: [127.0.0.1:54384 (Loopback)] GET / (2 live) #1ab GZIP Token () +Jun 04, 2026 03:43:15.217 [140443259251512] DEBUG - Completed: [127.0.0.1:54384] 200 GET / (2 live) #1ab GZIP 0ms 2654 bytes +Jun 04, 2026 03:43:15.218 [140443190213432] DEBUG - Request: [127.0.0.1:54390 (Loopback)] GET /library/sections (2 live) #1ad GZIP Token () +Jun 04, 2026 03:43:15.218 [140443259251512] DEBUG - Completed: [127.0.0.1:54390] 200 GET /library/sections (2 live) #1ad GZIP 0ms 403 bytes +Jun 04, 2026 03:43:15.219 [140443190213432] DEBUG - Request: [127.0.0.1:54392 (Loopback)] GET /channels/all (2 live) #1af GZIP Token () +Jun 04, 2026 03:43:15.219 [140443259251512] DEBUG - Completed: [127.0.0.1:54392] 200 GET /channels/all (2 live) #1af GZIP 0ms 387 bytes +Jun 04, 2026 03:43:15.220 [140443190213432] DEBUG - Request: [127.0.0.1:54406 (Loopback)] GET /library/sections (2 live) #1b1 GZIP Token () +Jun 04, 2026 03:43:15.221 [140443259251512] DEBUG - Completed: [127.0.0.1:54406] 200 GET /library/sections (2 live) #1b1 GZIP 0ms 403 bytes +Jun 04, 2026 03:43:15.221 [140443190213432] DEBUG - Request: [127.0.0.1:54414 (Loopback)] GET /channels/all (2 live) #1b3 GZIP Token () +Jun 04, 2026 03:43:15.221 [140443259251512] DEBUG - Completed: [127.0.0.1:54414] 200 GET /channels/all (2 live) #1b3 GZIP 0ms 387 bytes +Jun 04, 2026 03:43:18.660 [140443190213432] DEBUG - Request: [[::1]:37864 (Loopback)] GET /identity (2 live) #1b5 +Jun 04, 2026 03:43:18.660 [140443259251512] DEBUG - Completed: [[::1]:37864] 200 GET /identity (2 live) #1b5 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:43:28.684 [140443190213432] DEBUG - Request: [[::1]:40456 (Loopback)] GET /identity (2 live) #1b7 +Jun 04, 2026 03:43:28.684 [140443261360952] DEBUG - Completed: [[::1]:40456] 200 GET /identity (2 live) #1b7 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:43:29.323 [140443190213432] DEBUG - Request: [172.22.0.1:41462 (Subnet)] GET /activities (2 live) #1ba +Jun 04, 2026 03:43:29.323 [140443259251512] DEBUG - Completed: [172.22.0.1:41462] 200 GET /activities (2 live) #1ba 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:43:29.341 [140443190213432] DEBUG - Request: [172.22.0.1:41466 (Subnet)] GET /library (2 live) #1bd +Jun 04, 2026 03:43:29.341 [140443261360952] DEBUG - Completed: [172.22.0.1:41466] 200 GET /library (2 live) #1bd 0ms 670 bytes (pipelined: 1) +Jun 04, 2026 03:43:29.363 [140443190213432] DEBUG - Request: [172.22.0.1:41468 (Subnet)] GET /library/sections (2 live) #1c0 +Jun 04, 2026 03:43:29.363 [140443259251512] DEBUG - Completed: [172.22.0.1:41468] 200 GET /library/sections (2 live) #1c0 0ms 329 bytes (pipelined: 1) +Jun 04, 2026 03:43:29.384 [140443190213432] DEBUG - Request: [172.22.0.1:41474 (Subnet)] GET /updater/status (2 live) #1c3 +Jun 04, 2026 03:43:29.384 [140443261360952] DEBUG - Completed: [172.22.0.1:41474] 200 GET /updater/status (2 live) #1c3 0ms 334 bytes (pipelined: 1) +Jun 04, 2026 03:43:38.593 [140443190213432] DEBUG - Request: [172.22.0.1:60026 (Subnet)] GET /system/agents (2 live) #1c6 +Jun 04, 2026 03:43:38.594 [140443259251512] DEBUG - Completed: [172.22.0.1:60026] 200 GET /system/agents (2 live) #1c6 0ms 17417 bytes (pipelined: 1) +Jun 04, 2026 03:43:38.613 [140443190213432] DEBUG - Request: [172.22.0.1:60030 (Subnet)] GET /transcode/sessions (2 live) #1c9 +Jun 04, 2026 03:43:38.614 [140443259251512] DEBUG - Completed: [172.22.0.1:60030] 200 GET /transcode/sessions (2 live) #1c9 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:43:38.635 [140443190213432] DEBUG - Request: [172.22.0.1:60040 (Subnet)] GET /sync (2 live) #1cc +Jun 04, 2026 03:43:38.635 [140443261360952] DEBUG - Completed: [172.22.0.1:60040] 200 GET /sync (2 live) #1cc 0ms 311 bytes (pipelined: 1) +Jun 04, 2026 03:43:38.655 [140443190213432] DEBUG - Request: [172.22.0.1:60052 (Subnet)] GET /channels (2 live) #1cf +Jun 04, 2026 03:43:38.655 [140443259251512] DEBUG - Completed: [172.22.0.1:60052] 200 GET /channels (2 live) #1cf 0ms 388 bytes (pipelined: 1) +Jun 04, 2026 03:43:38.709 [140443190213432] DEBUG - Request: [[::1]:56630 (Loopback)] GET /identity (2 live) #1d2 +Jun 04, 2026 03:43:38.709 [140443259251512] DEBUG - Completed: [[::1]:56630] 200 GET /identity (2 live) #1d2 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:43:48.734 [140443190213432] DEBUG - Request: [[::1]:35684 (Loopback)] GET /identity (2 live) #1d5 +Jun 04, 2026 03:43:48.734 [140443261360952] DEBUG - Completed: [[::1]:35684] 200 GET /identity (2 live) #1d5 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:43:58.758 [140443190213432] DEBUG - Request: [[::1]:47054 (Loopback)] GET /identity (2 live) #1d8 +Jun 04, 2026 03:43:58.759 [140443259251512] DEBUG - Completed: [[::1]:47054] 200 GET /identity (2 live) #1d8 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:44:08.785 [140443190213432] DEBUG - Request: [[::1]:50588 (Loopback)] GET /identity (2 live) #1db +Jun 04, 2026 03:44:08.786 [140443261360952] DEBUG - Completed: [[::1]:50588] 200 GET /identity (2 live) #1db 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:44:18.814 [140443190213432] DEBUG - Request: [[::1]:53316 (Loopback)] GET /identity (2 live) #1de +Jun 04, 2026 03:44:18.814 [140443259251512] DEBUG - Completed: [[::1]:53316] 200 GET /identity (2 live) #1de 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:44:28.838 [140443190213432] DEBUG - Request: [[::1]:51820 (Loopback)] GET /identity (2 live) #1e1 +Jun 04, 2026 03:44:28.838 [140443259251512] DEBUG - Completed: [[::1]:51820] 200 GET /identity (2 live) #1e1 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:44:38.863 [140443190213432] DEBUG - Request: [[::1]:40170 (Loopback)] GET /identity (2 live) #1e4 +Jun 04, 2026 03:44:38.863 [140443261360952] DEBUG - Completed: [[::1]:40170] 200 GET /identity (2 live) #1e4 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:44:48.889 [140443190213432] DEBUG - Request: [[::1]:42750 (Loopback)] GET /identity (2 live) #1e7 +Jun 04, 2026 03:44:48.889 [140443261360952] DEBUG - Completed: [[::1]:42750] 200 GET /identity (2 live) #1e7 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.382 [140443190213432] DEBUG - Request: [172.22.0.1:36318 (Subnet)] GET / (2 live) #1ea +Jun 04, 2026 03:44:49.382 [140443261360952] DEBUG - Completed: [172.22.0.1:36318] 200 GET / (2 live) #1ea 0ms 5131 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.387 [140443190213432] DEBUG - Request: [172.22.0.1:36322 (Subnet)] GET /identity (2 live) #1ed +Jun 04, 2026 03:44:49.387 [140443259251512] DEBUG - Completed: [172.22.0.1:36322] 200 GET /identity (2 live) #1ed 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.391 [140443190213432] DEBUG - Request: [172.22.0.1:36334 (Subnet)] GET /library (2 live) #1f0 +Jun 04, 2026 03:44:49.391 [140443259251512] DEBUG - Completed: [172.22.0.1:36334] 200 GET /library (2 live) #1f0 0ms 670 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.395 [140443190213432] DEBUG - Request: [172.22.0.1:36344 (Subnet)] GET /library/sections (2 live) #1f3 +Jun 04, 2026 03:44:49.395 [140443259251512] DEBUG - Completed: [172.22.0.1:36344] 200 GET /library/sections (2 live) #1f3 0ms 329 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.399 [140443190213432] DEBUG - Request: [172.22.0.1:36346 (Subnet)] GET /library/sections/all (2 live) #1f6 +Jun 04, 2026 03:44:49.399 [140443259251512] DEBUG - Completed: [172.22.0.1:36346] 200 GET /library/sections/all (2 live) #1f6 0ms 329 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.402 [140443190213432] DEBUG - Request: [172.22.0.1:36348 (Subnet)] GET /status/sessions (2 live) #1f9 +Jun 04, 2026 03:44:49.402 [140443190213432] DEBUG - [Req#1f9] [Now] Adding 0 sessions. +Jun 04, 2026 03:44:49.402 [140443261360952] DEBUG - Completed: [172.22.0.1:36348] 200 GET /status/sessions (2 live) #1f9 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.406 [140443190213432] DEBUG - Request: [172.22.0.1:36354 (Subnet)] GET /accounts (2 live) #1fc +Jun 04, 2026 03:44:49.406 [140443261360952] DEBUG - Completed: [172.22.0.1:36354] 200 GET /accounts (2 live) #1fc 0ms 493 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.409 [140443190213432] DEBUG - Request: [172.22.0.1:36360 (Subnet)] GET /devices (2 live) #1ff +Jun 04, 2026 03:44:49.409 [140443261360952] DEBUG - Completed: [172.22.0.1:36360] 200 GET /devices (2 live) #1ff 0ms 414 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.413 [140443190213432] DEBUG - Request: [172.22.0.1:36376 (Subnet)] GET /clients (2 live) #202 +Jun 04, 2026 03:44:49.413 [140443261360952] DEBUG - Completed: [172.22.0.1:36376] 200 GET /clients (2 live) #202 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.416 [140443190213432] DEBUG - Request: [172.22.0.1:36392 (Subnet)] GET /servers (2 live) #205 +Jun 04, 2026 03:44:49.416 [140443259251512] DEBUG - Completed: [172.22.0.1:36392] 200 GET /servers (2 live) #205 0ms 470 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.419 [140443190213432] DEBUG - Request: [172.22.0.1:36406 (Subnet)] GET /playlists (2 live) #208 +Jun 04, 2026 03:44:49.420 [140443261360952] DEBUG - Completed: [172.22.0.1:36406] 200 GET /playlists (2 live) #208 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.423 [140443190213432] DEBUG - Request: [172.22.0.1:36410 (Subnet)] GET /butler (2 live) #20b +Jun 04, 2026 03:44:49.423 [140443259251512] DEBUG - Completed: [172.22.0.1:36410] 200 GET /butler (2 live) #20b 0ms 2509 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.426 [140443190213432] DEBUG - Request: [172.22.0.1:36414 (Subnet)] GET /activities (2 live) #20e +Jun 04, 2026 03:44:49.426 [140443259251512] DEBUG - Completed: [172.22.0.1:36414] 200 GET /activities (2 live) #20e 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.430 [140443190213432] DEBUG - Request: [172.22.0.1:36420 (Subnet)] GET /updater/status (2 live) #211 +Jun 04, 2026 03:44:49.430 [140443261360952] DEBUG - Completed: [172.22.0.1:36420] 200 GET /updater/status (2 live) #211 0ms 334 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.433 [140443190213432] DEBUG - Request: [172.22.0.1:36424 (Subnet)] GET /system/agents (2 live) #214 +Jun 04, 2026 03:44:49.433 [140443259251512] DEBUG - Completed: [172.22.0.1:36424] 200 GET /system/agents (2 live) #214 0ms 17417 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.437 [140443190213432] DEBUG - Request: [172.22.0.1:36426 (Subnet)] GET /sync (2 live) #217 +Jun 04, 2026 03:44:49.437 [140443261360952] DEBUG - Completed: [172.22.0.1:36426] 200 GET /sync (2 live) #217 0ms 311 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.440 [140443190213432] DEBUG - Request: [172.22.0.1:36430 (Subnet)] GET /channels (2 live) #21a +Jun 04, 2026 03:44:49.440 [140443259251512] DEBUG - Completed: [172.22.0.1:36430] 200 GET /channels (2 live) #21a 0ms 388 bytes (pipelined: 1) +Jun 04, 2026 03:44:49.444 [140443190213432] DEBUG - Request: [172.22.0.1:36442 (Subnet)] GET /transcode/sessions (2 live) #21d +Jun 04, 2026 03:44:49.444 [140443261360952] DEBUG - Completed: [172.22.0.1:36442] 200 GET /transcode/sessions (2 live) #21d 0ms 292 bytes (pipelined: 1) +Jun 04, 2026 03:44:58.914 [140443190213432] DEBUG - Request: [[::1]:48604 (Loopback)] GET /identity (2 live) #220 +Jun 04, 2026 03:44:58.914 [140443259251512] DEBUG - Completed: [[::1]:48604] 200 GET /identity (2 live) #220 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:45:08.941 [140443190213432] DEBUG - Request: [[::1]:53484 (Loopback)] GET /identity (2 live) #223 +Jun 04, 2026 03:45:08.941 [140443259251512] DEBUG - Completed: [[::1]:53484] 200 GET /identity (2 live) #223 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:45:18.968 [140443190213432] DEBUG - Request: [[::1]:34716 (Loopback)] GET /identity (2 live) #226 +Jun 04, 2026 03:45:18.968 [140443261360952] DEBUG - Completed: [[::1]:34716] 200 GET /identity (2 live) #226 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:45:28.994 [140443190213432] DEBUG - Request: [[::1]:53400 (Loopback)] GET /identity (2 live) #229 +Jun 04, 2026 03:45:28.994 [140443259251512] DEBUG - Completed: [[::1]:53400] 200 GET /identity (2 live) #229 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:45:39.021 [140443190213432] DEBUG - Request: [[::1]:56074 (Loopback)] GET /identity (2 live) #22c +Jun 04, 2026 03:45:39.021 [140443261360952] DEBUG - Completed: [[::1]:56074] 200 GET /identity (2 live) #22c 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:45:49.045 [140443190213432] DEBUG - Request: [[::1]:36144 (Loopback)] GET /identity (2 live) #22f +Jun 04, 2026 03:45:49.045 [140443259251512] DEBUG - Completed: [[::1]:36144] 200 GET /identity (2 live) #22f 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:45:59.070 [140443190213432] DEBUG - Request: [[::1]:47838 (Loopback)] GET /identity (2 live) #232 +Jun 04, 2026 03:45:59.070 [140443261360952] DEBUG - Completed: [[::1]:47838] 200 GET /identity (2 live) #232 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:46:09.095 [140443190213432] DEBUG - Request: [[::1]:38150 (Loopback)] GET /identity (2 live) #235 +Jun 04, 2026 03:46:09.095 [140443261360952] DEBUG - Completed: [[::1]:38150] 200 GET /identity (2 live) #235 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:46:15.233 [140443219913528] DEBUG - Butler: we're in the window, starting. +Jun 04, 2026 03:46:15.233 [140443219913528] DEBUG - Butler: Waking up! +Jun 04, 2026 03:46:15.233 [140443219913528] DEBUG - Butler: Scheduling randomized task 'RefreshEpgGuides' in 40 minutes. +Jun 04, 2026 03:46:15.233 [140443219913528] DEBUG - Butler: Scheduling randomized task 'RefreshPeriodicMetadata' in 68 minutes. +Jun 04, 2026 03:46:15.233 [140443219913528] DEBUG - Butler: Scheduling randomized task 'ButlerTaskGenerateCreditsMarkers' in 13 minutes. +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - Activity: registered new activity 4221855c-8f07-4471-b01c-a13f5266c301 - "Butler tasks" +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - Activity: registered new activity 4362e8a9-7ee7-48d0-9d8d-f9b59b3ff4f7 - "Optimizing database" +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Optimizing database. Starting by capturing all sessions. +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Activity: updated activity 4362e8a9-7ee7-48d0-9d8d-f9b59b3ff4f7 - completed 0.0% - Optimizing database +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Activity: updated activity 4362e8a9-7ee7-48d0-9d8d-f9b59b3ff4f7 - completed 10.0% - Optimizing database +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups] Running fix-ups. +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/42DatabaseFixupsGarbageCollectTransientItems] Executing fixup +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/42DatabaseFixupsGarbageCollectTransientItems] Destroyed 0 transient items. +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/42DatabaseFixupsGarbageCollectTransientItems] Fixup completed +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/41DatabaseFixupsDeleteUnusedTagsAndTaggings] Executing fixup +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/41DatabaseFixupsDeleteUnusedTagsAndTaggings] Fixup completed +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/33DatabaseFixupsDeleteEmptyClusters] Executing fixup +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/33DatabaseFixupsDeleteEmptyClusters] Fixup completed +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/35DatabaseFixupsDeleteOrphanLocations] Executing fixup +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/35DatabaseFixupsDeleteOrphanLocations] Fixup completed +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/31DatabaseFixupsCleanupStatistics] Executing fixup +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/31DatabaseFixupsCleanupStatistics] Fixup completed +Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/35DatabaseFixupsConsolidatePeopleTags] Executing fixup +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/35DatabaseFixupsConsolidatePeopleTags] Fixup completed +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/34DatabaseFixupsRemoveRelatedOrphans] Executing fixup +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/34DatabaseFixupsRemoveRelatedOrphans] Fixup completed +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups] Running database fix-ups completed in 0.0 seconds. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 0. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 1. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 2. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 3. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 4. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 5. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 6. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 7. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 8. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 9. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 10. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 11. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 12. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 13. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 14. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 15. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 16. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 17. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 18. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 19. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Rebuilding full text search tables. +Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Activity: updated activity 4362e8a9-7ee7-48d0-9d8d-f9b59b3ff4f7 - completed 40.0% - Optimizing database +Jun 04, 2026 03:46:15.236 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Database optimization: starting. +Jun 04, 2026 03:46:15.237 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Activity: updated activity 4362e8a9-7ee7-48d0-9d8d-f9b59b3ff4f7 - completed 60.0% - Optimizing database +Jun 04, 2026 03:46:15.258 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Database optimization: complete. +Jun 04, 2026 03:46:15.259 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.260 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.260 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.261 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.262 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.263 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.263 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.264 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.265 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.266 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.266 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.267 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.268 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.268 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.269 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.270 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.270 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.271 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.272 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Activity: Ended activity 4362e8a9-7ee7-48d0-9d8d-f9b59b3ff4f7. +Jun 04, 2026 03:46:15.274 [140443251936056] INFO - Running migrations. (EPG 0) +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 0. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 1. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 2. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 3. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 4. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 5. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 6. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 7. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 8. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 9. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 10. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 11. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 12. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 13. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 14. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 15. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 16. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 17. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 18. +Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 19. +Jun 04, 2026 03:46:15.275 [140443251936056] INFO - Running forward migration 20210207150001. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 0. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 1. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 2. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 3. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 4. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 5. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 6. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 7. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 8. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 9. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 10. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 11. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 12. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 13. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 14. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 15. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 16. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 17. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 18. +Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 19. +Jun 04, 2026 03:46:15.276 [140443251936056] INFO - Completed forward migration 20210207150001. +Jun 04, 2026 03:46:15.276 [140443251936056] INFO - Running forward migration 20210207150002. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 0. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 1. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 2. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 3. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 4. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 5. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 6. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 7. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 8. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 9. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 10. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 11. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 12. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 13. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 14. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 15. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 16. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 17. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 18. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 19. +Jun 04, 2026 03:46:15.276 [140443251936056] INFO - Completed forward migration 20210207150002. +Jun 04, 2026 03:46:15.276 [140443251936056] INFO - Running forward migration 20210207150000. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 0. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 1. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 2. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 3. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 4. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 5. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 6. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 7. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 8. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 9. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 10. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 11. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 12. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 13. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 14. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 15. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 16. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 17. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 18. +Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 19. +Jun 04, 2026 03:46:15.277 [140443251936056] INFO - Completed forward migration 20210207150000. +Jun 04, 2026 03:46:15.277 [140443251936056] INFO - Running forward migration 202302020000. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 0. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 1. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 2. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 3. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 4. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 5. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 6. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 7. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 8. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 9. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 10. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 11. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 12. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 13. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 14. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 15. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 16. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 17. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 18. +Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 19. +Jun 04, 2026 03:46:15.278 [140443251936056] INFO - Completed forward migration 202302020000. +Jun 04, 2026 03:46:15.278 [140443251936056] INFO - Running forward migration 202505261219. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 0. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 1. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 2. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 3. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 4. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 5. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 6. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 7. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 8. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 9. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 10. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 11. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 12. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 13. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 14. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 15. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 16. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 17. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 18. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 19. +Jun 04, 2026 03:46:15.278 [140443251936056] INFO - Completed forward migration 202505261219. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 0. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 1. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 2. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 3. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 4. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 5. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 6. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 7. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 8. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 9. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 10. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 11. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 12. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 13. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 14. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 15. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 16. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 17. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 18. +Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 19. +Jun 04, 2026 03:46:15.278 [140443251936056] INFO - Analyzing database. +Jun 04, 2026 03:46:15.279 [140443251936056] INFO - Vacuuming database. +Jun 04, 2026 03:46:15.289 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.290 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.291 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.291 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.292 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.293 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.294 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.295 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.296 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.297 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.298 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.298 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.299 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.300 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.301 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.301 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.302 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.303 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.304 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.304 [140443251936056] DEBUG - Butler: optimized your database +Jun 04, 2026 03:46:15.304 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 21: [UPDATE activities SET `finished_at`=:U1 WHERE `id`=:C1] database schema has changed +Jun 04, 2026 03:46:15.304 [140443251936056] DEBUG - Blob Database: Collecting garbage. +Jun 04, 2026 03:46:15.304 [140443251936056] DEBUG - Blob Database: No garbage blobs found to collect in 0.0 sec. +Jun 04, 2026 03:46:15.304 [140443251936056] DEBUG - Captured session 0. +Jun 04, 2026 03:46:15.304 [140443251936056] DEBUG - Captured session 1. +Jun 04, 2026 03:46:15.334 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed +Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - Activity: registered new activity 12fc75e1-fd1d-430b-9b47-6b36db71a2bf - "Cleaning Bundles" +Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - Activity: updated activity 12fc75e1-fd1d-430b-9b47-6b36db71a2bf - completed -1.0% - Cleaning Bundles +Jun 04, 2026 03:46:15.335 [140443251936056] ERROR - Error cleaning media bundles: boost::filesystem::directory_iterator::construct: No such file or directory [system:2]: "/config/Library/Application Support/Plex Media Server/Media/localhost" +Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - Deleted 0 media bundles. +Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - The butler cleaned 0 media bundles. +Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - Activity: updated activity 12fc75e1-fd1d-430b-9b47-6b36db71a2bf - completed -1.0% - Cleaning Bundles +Jun 04, 2026 03:46:15.335 [140443251936056] ERROR - Error cleaning metadata bundles: boost::filesystem::directory_iterator::construct: No such file or directory [system:2]: "/config/Library/Application Support/Plex Media Server/Metadata" +Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - Deleted 0 metadata bundles. +Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - The butler cleaned 0 metadata bundles. +Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - Activity: Ended activity 12fc75e1-fd1d-430b-9b47-6b36db71a2bf. +Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - The butler looked at 0 cache files and deleted 0 of them. +Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - The butler looked at 0 diagnostic files and deleted 0 of them. +Jun 04, 2026 03:46:15.336 [140443251936056] ERROR - Butler: Uncaught exception starting generator UpgradeMediaAnalysis: Vectors of size 0 are not allowed. +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: registered new sub-activity 94d95f0a-38a3-43e0-b5b4-b7137ba070f1 - "OptimizeDatabase" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 0.0% (0/1) +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: ended sub-activity 94d95f0a-38a3-43e0-b5b4-b7137ba070f1 parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (1/1) +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Butler: Computed a set of 0 audio tracks to get loudness analysis in 0ms. +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: registered new sub-activity 1d7bb558-fffd-403b-bd91-ec3ec67a75a1 - "GarbageCollectBlobs" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 50.0% (1/2) +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 50.0% - Butler tasks +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: ended sub-activity 1d7bb558-fffd-403b-bd91-ec3ec67a75a1 parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (2/2) +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: registered new sub-activity a98fd856-5fb3-4268-a50f-bcd77757b2d2 - "CleanOldBundles" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 66.7% (2/3) +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 66.7% - Butler tasks +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: ended sub-activity a98fd856-5fb3-4268-a50f-bcd77757b2d2 parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (3/3) +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: registered new sub-activity 18b502fd-b43a-4588-ac72-f614c4065f7c - "CleanOldCacheFiles" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 75.0% (3/4) +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 75.0% - Butler tasks +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: ended sub-activity 18b502fd-b43a-4588-ac72-f614c4065f7c parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (4/4) +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: registered new sub-activity 30825734-2ca4-4ef5-8a90-db8e39481a8d - "GenerateChapterThumbs" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 80.0% (4/5) +Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 80.0% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity 30825734-2ca4-4ef5-8a90-db8e39481a8d parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (5/5) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - The butler generated chapter thumbnails for 0 files +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: registered new sub-activity 22864c6a-1d38-4c2f-984b-cdc2d0abebdd - "MusicAnalysis" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 83.3% (5/6) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 83.3% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity 22864c6a-1d38-4c2f-984b-cdc2d0abebdd parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (6/6) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Butler: Performed sonic analysis on 0 batches of albums. +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: registered new sub-activity e4f3ddc1-1078-43d2-9f5a-0f390e566cbd - "ProcessAssets" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 85.7% (6/7) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 85.7% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity e4f3ddc1-1078-43d2-9f5a-0f390e566cbd parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (7/7) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - The butler processed 0 assets. +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: registered new sub-activity f99f7498-f2e8-426a-a9c3-74c795007aee - "ButlerTaskGenerateIntroMarkers" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 87.5% (7/8) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 87.5% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity f99f7498-f2e8-426a-a9c3-74c795007aee parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (8/8) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: registered new sub-activity df2dc948-42fa-47d5-a63a-a815ad79283e - "LoudnessAnalysis" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 88.9% (8/9) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 88.9% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity df2dc948-42fa-47d5-a63a-a815ad79283e parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (9/9) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - The butler performed loudness analysis on 0 albums. +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: registered new sub-activity 42b03973-7eeb-49a8-ab0c-7c41f9f6d634 - "DeepMediaAnalysis" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 90.0% (9/10) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 90.0% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity 42b03973-7eeb-49a8-ab0c-7c41f9f6d634 parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (10/10) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - The butler performed deep analysis on 0 files +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: registered new sub-activity 8fbf9bb1-f265-4af3-965e-1d65712035f7 - "GarbageCollectLibraryMedia" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 90.9% (10/11) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 90.9% - Butler tasks +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity 8fbf9bb1-f265-4af3-965e-1d65712035f7 parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (11/11) +Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks +Jun 04, 2026 03:46:15.467 [140443219913528] DEBUG - [HCl#7d] HTTP requesting GET https://plex.tv/api/v2/features?X-Plex-Token= +Jun 04, 2026 03:46:15.643 [140443243293496] DEBUG - [HttpClient/HCl#7d] HTTP/1.1 (0.2s) 200 response from GET https://plex.tv/api/v2/features?X-Plex-Token= +Jun 04, 2026 03:46:15.644 [140443219913528] DEBUG - [HCl#7e] HTTP requesting GET https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 +Jun 04, 2026 03:46:15.690 [140443243293496] DEBUG - [HttpClient/HCl#7e] HTTP/1.1 (0.0s) 401 response from GET https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 (reused) +Jun 04, 2026 03:46:15.690 [140443222969144] ERROR - MyPlex: Error 401 requesting JSON from: https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 +Jun 04, 2026 03:46:15.690 [140443219913528] WARN - FeatureManager: Couldn't get features. Trying again soon. +Jun 04, 2026 03:46:19.121 [140443190213432] DEBUG - Request: [[::1]:50226 (Loopback)] GET /identity (2 live) #238 +Jun 04, 2026 03:46:19.121 [140443259251512] DEBUG - Completed: [[::1]:50226] 200 GET /identity (2 live) #238 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:46:29.147 [140443190213432] DEBUG - Request: [[::1]:45878 (Loopback)] GET /identity (2 live) #23b +Jun 04, 2026 03:46:29.147 [140443259251512] DEBUG - Completed: [[::1]:45878] 200 GET /identity (2 live) #23b 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:46:32.323 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET / (2 live) #23e GZIP +Jun 04, 2026 03:46:32.323 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET / (2 live) #23e GZIP 0ms 2683 bytes (pipelined: 1) +Jun 04, 2026 03:46:32.530 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /identity (2 live) #242 GZIP +Jun 04, 2026 03:46:32.531 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /identity (2 live) #242 GZIP 0ms 487 bytes (pipelined: 2) +Jun 04, 2026 03:46:32.734 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library (2 live) #243 GZIP +Jun 04, 2026 03:46:32.734 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /library (2 live) #243 GZIP 0ms 597 bytes (pipelined: 3) +Jun 04, 2026 03:46:32.936 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library/sections (2 live) #244 GZIP +Jun 04, 2026 03:46:32.937 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /library/sections (2 live) #244 GZIP 0ms 432 bytes (pipelined: 4) +Jun 04, 2026 03:46:33.138 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library/sections/1/all (2 live) #245 GZIP +Jun 04, 2026 03:46:33.138 [140443190213432] WARN - [Req#245] Invalid library section ID 1 passed. +Jun 04, 2026 03:46:33.138 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /library/sections/1/all (2 live) #245 GZIP 0ms 379 bytes (pipelined: 5) +Jun 04, 2026 03:46:33.340 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library/sections/1/onDeck (2 live) #246 GZIP +Jun 04, 2026 03:46:33.340 [140443190213432] WARN - [Req#246] Invalid library section ID 1 passed. +Jun 04, 2026 03:46:33.340 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /library/sections/1/onDeck (2 live) #246 GZIP 0ms 379 bytes (pipelined: 6) +Jun 04, 2026 03:46:33.542 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library/sections/1/recentlyAdded (2 live) #247 GZIP +Jun 04, 2026 03:46:33.542 [140443190213432] WARN - [Req#247] Invalid library section ID 1 passed. +Jun 04, 2026 03:46:33.542 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 404 GET /library/sections/1/recentlyAdded (2 live) #247 GZIP 0ms 379 bytes (pipelined: 7) +Jun 04, 2026 03:46:33.743 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library/metadata/1 (2 live) #248 GZIP +Jun 04, 2026 03:46:33.744 [140443190213432] WARN - [Req#248] Invalid library metadata ID 1 passed. +Jun 04, 2026 03:46:33.744 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /library/metadata/1 (2 live) #248 GZIP 0ms 379 bytes (pipelined: 8) +Jun 04, 2026 03:46:33.944 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library/metadata/1/children (2 live) #249 GZIP +Jun 04, 2026 03:46:33.944 [140443190213432] WARN - [Req#249] Invalid library metadata ID 1 passed. +Jun 04, 2026 03:46:33.944 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 404 GET /library/metadata/1/children (2 live) #249 GZIP 0ms 379 bytes (pipelined: 9) +Jun 04, 2026 03:46:34.145 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /status/sessions (2 live) #24a GZIP +Jun 04, 2026 03:46:34.145 [140443190213432] DEBUG - [Req#24a] [Now] Adding 0 sessions. +Jun 04, 2026 03:46:34.145 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /status/sessions (2 live) #24a GZIP 0ms 397 bytes (pipelined: 10) +Jun 04, 2026 03:46:34.346 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /status/sessions/history/all (2 live) #24b GZIP +Jun 04, 2026 03:46:34.346 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /status/sessions/history/all (2 live) #24b GZIP 0ms 397 bytes (pipelined: 11) +Jun 04, 2026 03:46:34.547 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /accounts (2 live) #24c GZIP +Jun 04, 2026 03:46:34.547 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /accounts (2 live) #24c GZIP 0ms 521 bytes (pipelined: 12) +Jun 04, 2026 03:46:34.748 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /devices (2 live) #24d GZIP +Jun 04, 2026 03:46:34.748 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /devices (2 live) #24d GZIP 0ms 483 bytes (pipelined: 13) +Jun 04, 2026 03:46:34.949 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /clients (2 live) #24e GZIP +Jun 04, 2026 03:46:34.950 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /clients (2 live) #24e GZIP 0ms 397 bytes (pipelined: 14) +Jun 04, 2026 03:46:35.151 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /servers (2 live) #24f GZIP +Jun 04, 2026 03:46:35.152 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /servers (2 live) #24f GZIP 0ms 519 bytes (pipelined: 15) +Jun 04, 2026 03:46:35.353 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /hubs/search (2 live) #250 GZIP +Jun 04, 2026 03:46:35.353 [140443190213432] ERROR - [Req#250] Missing required query parameter query +Jun 04, 2026 03:46:35.353 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 400 GET /hubs/search (2 live) #250 GZIP 0ms 384 bytes (pipelined: 16) +Jun 04, 2026 03:46:35.554 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /playlists (2 live) #251 GZIP +Jun 04, 2026 03:46:35.555 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /playlists (2 live) #251 GZIP 0ms 397 bytes (pipelined: 17) +Jun 04, 2026 03:46:35.755 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /butler (2 live) #252 GZIP +Jun 04, 2026 03:46:35.756 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /butler (2 live) #252 GZIP 0ms 799 bytes (pipelined: 18) +Jun 04, 2026 03:46:35.957 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /activities (2 live) #253 GZIP +Jun 04, 2026 03:46:35.957 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /activities (2 live) #253 GZIP 0ms 513 bytes (pipelined: 19) +Jun 04, 2026 03:46:36.158 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /updater/status (2 live) #254 GZIP +Jun 04, 2026 03:46:36.158 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /updater/status (2 live) #254 GZIP 0ms 433 bytes (pipelined: 20) +Jun 04, 2026 03:46:36.359 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /system/agents (2 live) #255 GZIP +Jun 04, 2026 03:46:36.360 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /system/agents (2 live) #255 GZIP 0ms 1917 bytes (pipelined: 21) +Jun 04, 2026 03:46:36.561 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /system/settings (2 live) #256 GZIP +Jun 04, 2026 03:46:36.561 [140443190213432] DEBUG - [Req#256] [com.plexapp.system] Sending command over HTTP (GET): /system/settings +Jun 04, 2026 03:46:36.561 [140443190213432] DEBUG - [Req#256/HCl#7f] HTTP requesting GET http://127.0.0.1:33755/system/settings +Jun 04, 2026 03:46:36.564 [140443243293496] DEBUG - [HttpClient/HCl#7f] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/system/settings +Jun 04, 2026 03:46:36.564 [140443190213432] DEBUG - [Req#256] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:46:36.564 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 404 GET /system/settings (2 live) #256 GZIP 3ms 177 bytes (pipelined: 22) +Jun 04, 2026 03:46:36.765 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /system/updates (2 live) #257 GZIP +Jun 04, 2026 03:46:36.765 [140443190213432] DEBUG - [Req#257] [com.plexapp.system] Sending command over HTTP (GET): /system/updates +Jun 04, 2026 03:46:36.765 [140443190213432] DEBUG - [Req#257/HCl#80] HTTP requesting GET http://127.0.0.1:33755/system/updates +Jun 04, 2026 03:46:36.766 [140443243293496] DEBUG - [HttpClient/HCl#80] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/system/updates (reused) +Jun 04, 2026 03:46:36.766 [140443190213432] DEBUG - [Req#257] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. +Jun 04, 2026 03:46:36.766 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /system/updates (2 live) #257 GZIP 1ms 177 bytes (pipelined: 23) +Jun 04, 2026 03:46:36.966 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /statistics/bandwidth (2 live) #258 GZIP +Jun 04, 2026 03:46:36.967 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 404 GET /statistics/bandwidth (2 live) #258 GZIP 0ms 379 bytes (pipelined: 24) +Jun 04, 2026 03:46:37.168 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /statistics/resources (2 live) #259 GZIP +Jun 04, 2026 03:46:37.168 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /statistics/resources (2 live) #259 GZIP 0ms 379 bytes (pipelined: 25) +Jun 04, 2026 03:46:37.369 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /diagnostics (2 live) #25a GZIP +Jun 04, 2026 03:46:37.369 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /diagnostics (2 live) #25a GZIP 0ms 416 bytes (pipelined: 26) +Jun 04, 2026 03:46:37.570 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /sync (2 live) #25b GZIP +Jun 04, 2026 03:46:37.570 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /sync (2 live) #25b GZIP 0ms 416 bytes (pipelined: 27) +Jun 04, 2026 03:46:37.771 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /sync/items (2 live) #25c GZIP +Jun 04, 2026 03:46:37.771 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 404 GET /sync/items (2 live) #25c GZIP 0ms 379 bytes (pipelined: 28) +Jun 04, 2026 03:46:37.972 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /sync/queue (2 live) #25d GZIP +Jun 04, 2026 03:46:37.972 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /sync/queue (2 live) #25d GZIP 0ms 379 bytes (pipelined: 29) +Jun 04, 2026 03:46:38.173 [140443190213432] INFO - Request: [172.22.0.1:58442 (Subnet)] GET /services/browse (2 live) #25e GZIP +Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: overlay Path: / Name: overlay +Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: cgroup2 Path: /sys/fs/cgroup Name: cgroup +Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: mqueue Path: /dev/mqueue Name: mqueue +Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: btrfs Path: /config Name: /dev/mapper/root +Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: btrfs Path: /transcode Name: /dev/mapper/root +Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: btrfs Path: /data/media Name: /dev/mapper/root +Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: btrfs Path: /etc/resolv.conf Name: /dev/mapper/root +Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: btrfs Path: /etc/hostname Name: /dev/mapper/root +Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: btrfs Path: /etc/hosts Name: /dev/mapper/root +Jun 04, 2026 03:46:38.173 [140443261360952] INFO - Completed: [172.22.0.1:58442] 200 GET /services/browse (2 live) #25e GZIP 0ms 615 bytes (pipelined: 30) +Jun 04, 2026 03:46:38.374 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /media/grabbers (2 live) #25f GZIP +Jun 04, 2026 03:46:38.375 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /media/grabbers (2 live) #25f GZIP 0ms 516 bytes (pipelined: 31) +Jun 04, 2026 03:46:38.576 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /livetv/dvrs (2 live) #260 GZIP +Jun 04, 2026 03:46:38.576 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /livetv/dvrs (2 live) #260 GZIP 0ms 397 bytes (pipelined: 32) +Jun 04, 2026 03:46:38.777 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /livetv/epg (2 live) #261 GZIP +Jun 04, 2026 03:46:38.777 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /livetv/epg (2 live) #261 GZIP 0ms 379 bytes (pipelined: 33) +Jun 04, 2026 03:46:38.978 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /channels (2 live) #262 GZIP +Jun 04, 2026 03:46:38.978 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /channels (2 live) #262 GZIP 0ms 454 bytes (pipelined: 34) +Jun 04, 2026 03:46:39.172 [140443190213432] DEBUG - Request: [[::1]:49890 (Loopback)] GET /identity (3 live) #241 +Jun 04, 2026 03:46:39.172 [140443259251512] DEBUG - Completed: [[::1]:49890] 200 GET /identity (3 live) #241 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:46:39.180 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /player/timeline/poll (2 live) #263 GZIP +Jun 04, 2026 03:46:39.180 [140443190213432] ERROR - [Req#263/CompanionProxy] Missing required query parameter commandID +Jun 04, 2026 03:46:39.180 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 400 GET /player/timeline/poll (2 live) #263 GZIP 0ms 384 bytes (pipelined: 35) +Jun 04, 2026 03:46:39.381 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /player/playback/playMedia (2 live) #267 GZIP +Jun 04, 2026 03:46:39.381 [140443190213432] ERROR - [Req#267/CompanionProxy] Missing required path parameter X-Plex-Target-Client-Identifier +Jun 04, 2026 03:46:39.381 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 400 GET /player/playback/playMedia (2 live) #267 GZIP 0ms 384 bytes (pipelined: 36) +Jun 04, 2026 03:46:39.582 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /transcode/sessions (2 live) #268 GZIP +Jun 04, 2026 03:46:39.582 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /transcode/sessions (2 live) #268 GZIP 0ms 397 bytes (pipelined: 37) +Jun 04, 2026 03:46:39.783 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /security/resources (2 live) #269 GZIP +Jun 04, 2026 03:46:39.783 [140443190213432] ERROR - [Req#269] Missing required query parameter source +Jun 04, 2026 03:46:39.783 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 400 GET /security/resources (2 live) #269 GZIP 0ms 384 bytes (pipelined: 38) +Jun 04, 2026 03:46:39.984 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /security/token (2 live) #26a GZIP +Jun 04, 2026 03:46:39.984 [140443190213432] ERROR - [Req#26a] Missing required query parameter type +Jun 04, 2026 03:46:39.985 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 400 GET /security/token (2 live) #26a GZIP 0ms 384 bytes (pipelined: 39) +Jun 04, 2026 03:46:40.185 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /downloadQueue (2 live) #26b GZIP +Jun 04, 2026 03:46:40.186 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 404 GET /downloadQueue (2 live) #26b GZIP 0ms 379 bytes (pipelined: 40) +Jun 04, 2026 03:46:49.198 [140443190213432] DEBUG - Request: [[::1]:47346 (Loopback)] GET /identity (2 live) #264 +Jun 04, 2026 03:46:49.198 [140443259251512] DEBUG - Completed: [[::1]:47346] 200 GET /identity (2 live) #264 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:46:59.224 [140443190213432] DEBUG - Request: [[::1]:37454 (Loopback)] GET /identity (2 live) #26e +Jun 04, 2026 03:46:59.224 [140443259251512] DEBUG - Completed: [[::1]:37454] 200 GET /identity (2 live) #26e 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:47:09.250 [140443190213432] DEBUG - Request: [[::1]:38560 (Loopback)] GET /identity (2 live) #271 +Jun 04, 2026 03:47:09.250 [140443261360952] DEBUG - Completed: [[::1]:38560] 200 GET /identity (2 live) #271 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:47:19.276 [140443190213432] DEBUG - Request: [[::1]:52162 (Loopback)] GET /identity (2 live) #274 +Jun 04, 2026 03:47:19.276 [140443259251512] DEBUG - Completed: [[::1]:52162] 200 GET /identity (2 live) #274 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:47:29.301 [140443190213432] DEBUG - Request: [[::1]:59458 (Loopback)] GET /identity (2 live) #277 +Jun 04, 2026 03:47:29.301 [140443261360952] DEBUG - Completed: [[::1]:59458] 200 GET /identity (2 live) #277 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:47:39.326 [140443190213432] DEBUG - Request: [[::1]:52286 (Loopback)] GET /identity (2 live) #27a +Jun 04, 2026 03:47:39.326 [140443259251512] DEBUG - Completed: [[::1]:52286] 200 GET /identity (2 live) #27a 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:47:49.351 [140443190213432] DEBUG - Request: [[::1]:43716 (Loopback)] GET /identity (2 live) #27d +Jun 04, 2026 03:47:49.352 [140443259251512] DEBUG - Completed: [[::1]:43716] 200 GET /identity (2 live) #27d 0ms 418 bytes (pipelined: 1) +Jun 04, 2026 03:47:58.331 [140443269335864] DEBUG - Shutting down with signal 15 (Terminated) +Jun 04, 2026 03:47:58.331 [140443269335864] DEBUG - Ordered to stop server. +Jun 04, 2026 03:47:58.331 [140443274078864] DEBUG - Stopping server... +Jun 04, 2026 03:47:58.331 [140443274078864] DEBUG - HttpServer: Stopping server. +Jun 04, 2026 03:47:58.331 [140443234695992] DEBUG - TranscodeJobManager: [Running] onServerShutdown +Jun 04, 2026 03:47:58.331 [140443234695992] DEBUG - TranscodeJobManager: [Running] -> [Shutdown] +Jun 04, 2026 03:47:58.331 [140443259251512] DEBUG - MetadataItemClusterRequestHandler: a shutdown event has been received +Jun 04, 2026 03:47:58.331 [140443274078864] DEBUG - Server stopped. +Jun 04, 2026 03:47:58.331 [140443274078864] DEBUG - NetworkService: Stopping advertisement. +Jun 04, 2026 03:47:58.331 [140443236805432] ERROR - Network Service: Error in advertiser handle read: 125 (Operation canceled) socket=66 +Jun 04, 2026 03:47:58.331 [140443274078864] DEBUG - Killing plug-ins. +Jun 04, 2026 03:47:58.335 [140443274078864] DEBUG - [com.plexapp.agents.localmedia] Killing. +Jun 04, 2026 03:47:58.338 [140443274078864] DEBUG - [org.musicbrainz.agents.music] Killing. +Jun 04, 2026 03:47:58.338 [140443269335864] WARN - JobManager: Could not find job for handle 755 +Jun 04, 2026 03:47:58.339 [140443274078864] DEBUG - [com.plexapp.agents.imdb] Killing. +Jun 04, 2026 03:47:58.340 [140443274078864] DEBUG - [com.plexapp.agents.plexthememusic] Killing. +Jun 04, 2026 03:47:58.340 [140443269335864] WARN - JobManager: Could not find job for handle 505 +Jun 04, 2026 03:47:58.341 [140443274078864] DEBUG - [com.plexapp.system] Killing. +Jun 04, 2026 03:47:58.341 [140443274078864] DEBUG - [com.plexapp.agents.themoviedb] Killing. +Jun 04, 2026 03:47:58.342 [140443269335864] WARN - JobManager: Could not find job for handle 608 +Jun 04, 2026 03:47:58.342 [140443274078864] DEBUG - [com.plexapp.agents.thetvdb] Killing. +Jun 04, 2026 03:47:58.342 [140443269335864] WARN - JobManager: Could not find job for handle 726 +Jun 04, 2026 03:47:58.343 [140443274078864] DEBUG - ChildProcessMonitor: Waiting for Plex Tuner Service to exit. +Jun 04, 2026 03:47:58.343 [140443274078864] DEBUG - [JobRunner] Signalling job ID 341 with 2 +Jun 04, 2026 03:47:58.344 [140443269335864] WARN - JobManager: Could not find job for handle 293 +Jun 04, 2026 03:47:58.344 [140443269335864] WARN - JobManager: Could not find job for handle 576 +Jun 04, 2026 03:47:58.345 [140443269335864] WARN - JobManager: Could not find job for handle 660 +Jun 04, 2026 03:47:58.354 [140443269335864] DEBUG - Jobs: '/usr/lib/plexmediaserver/Plex Tuner Service' exit code for process 341 is 0 (success) +Jun 04, 2026 03:47:58.354 [140443232586552] DEBUG - [ChildProcessMonitor] Plex Tuner Service exited. +Jun 04, 2026 03:47:58.354 [140443274078864] DEBUG - Database: Shutting down. +Jun 04, 2026 03:47:58.361 [140443274078864] DEBUG - Database: Shutting down. diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Tuner Service.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Tuner Service.log new file mode 100644 index 000000000..e68b0f094 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Tuner Service.log @@ -0,0 +1,27 @@ +Jun 04, 2026 03:41:15.239 [0x7f5cfac7eb38] INFO - Plex Tuner Service v1.43.2.10687-563d026ea - Docker Docker Container x86_64 - build: +Jun 04, 2026 03:41:15.240 [0x7f5cfac7eb38] INFO - Linux version: 7.0.10-arch1-1 (#1 SMP PREEMPT_DYNAMIC Sat, 23 May 2026 14:21:20 +0000), language: en-US +Jun 04, 2026 03:41:15.240 [0x7f5cfac7eb38] INFO - Processor AMD Ryzen 9 7950X3D 16-Core Processor +Jun 04, 2026 03:41:15.240 [0x7f5cfac7eb38] INFO - /usr/lib/plexmediaserver/Plex Tuner Service /usr/lib/plexmediaserver/Resources/Tuner/Private /usr/lib/plexmediaserver/Resources/Tuner/Shared 1.43.2.10687-563d026ea 32600 +Jun 04, 2026 03:41:15.239 [0x7f5cfc7f0808] INFO - [I] broker_t::start... +Jun 04, 2026 03:41:15.241 [0x7f5cfc7f0808] INFO - [I] device_manager_t::init. +Jun 04, 2026 03:41:15.241 [0x7f5cfc7f0808] INFO - [I] device_manager_t::init. Initialize provider manager +Jun 04, 2026 03:41:15.241 [0x7f5cfc7f0808] INFO - [I] device_manager_t::init. Initialize all device auxes +Jun 04, 2026 03:41:15.241 [0x7f5cfc7f0808] INFO - [I] dvb_device_factory_t::get_aux_list +Jun 04, 2026 03:41:15.241 [0x7f5cfc7f0808] INFO - [I] tvbutler_aux_t::init +Jun 04, 2026 03:41:15.243 [0x7f5cfc7f0808] INFO - [I] web_server_t::start. Starting web server on port 32600 +Jun 04, 2026 03:41:24.545 [0x7f5cfa9f5b38] INFO - [I] web_service_t::process_device_discovery +Jun 04, 2026 03:41:24.545 [0x7f5cfa9f5b38] INFO - [I] device_reactor_t::get_device_list () +Jun 04, 2026 03:41:26.548 [0x7f5cfa9f5b38] INFO - [I] SAT2IP - discover_satip_servers(): no servers found +Jun 04, 2026 03:41:26.966 [0x7f5cfa9f5b38] INFO - [I] v4l::DeviceGetList_impl. getting v4l device list +Jun 04, 2026 03:41:26.968 [0x7f5cfa9f5b38] INFO - [I] onetv_factory::DeviceGetListEx >> +Jun 04, 2026 03:41:26.968 [0x7f5cfa9f5b38] WARN - [W] onetv_factory::DeviceGetListEx. libusb_init returned an error -99 +Jun 04, 2026 03:47:58.343 [0x7f5cfc7f0808] INFO - Received SIGINT: Interrupt from keyboard. +Jun 04, 2026 03:47:58.352 [0x7f5cfc7f0808] INFO - [I] device_manager_t::term +Jun 04, 2026 03:47:58.352 [0x7f5cfc7f0808] INFO - [I] device_manager_t::term. Stop all devices +Jun 04, 2026 03:47:58.352 [0x7f5cfc7f0808] INFO - [I] device_manager_t::term. Shut down all device auxes +Jun 04, 2026 03:47:58.352 [0x7f5cfc7f0808] INFO - [I] tvbutler_aux_t::term +Jun 04, 2026 03:47:58.353 [0x7f5cfc7f0808] INFO - [I] web_server_t::stop. Web server is stopped +Jun 04, 2026 03:47:58.353 [0x7f5cfc7f0808] INFO - [I] device_manager_t::term +Jun 04, 2026 03:47:58.353 [0x7f5cfc7f0808] INFO - [I] device_manager_t::term. Stop all devices +Jun 04, 2026 03:47:58.353 [0x7f5cfc7f0808] INFO - [I] device_manager_t::term. Shut down all device auxes +Jun 04, 2026 03:47:58.353 [0x7f5cfc7f0808] INFO - [I] broker_t::shutdown. Shutdown is completed. diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.imdb/HTTP.system/CacheInfo b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.imdb/HTTP.system/CacheInfo new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.imdb/HTTP.system/CacheInfo @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.localmedia/HTTP.system/CacheInfo b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.localmedia/HTTP.system/CacheInfo new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.localmedia/HTTP.system/CacheInfo @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/Dict b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/Dict new file mode 100644 index 000000000..2353c34da --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/Dict @@ -0,0 +1,1756 @@ +(dp0 +S'_AgentService:AgentInfo' +p1 +(dp2 +S'com.plexapp.agents.fanarttv' +p3 +(lp4 +(dp5 +S'media_types' +p6 +(lp7 +S'Movie' +p8 +asS'primary_provider' +p9 +I00 +sS'fallback_agent' +p10 +NsS'contributes_to' +p11 +(lp12 +S'com.plexapp.agents.imdb' +p13 +aS'com.plexapp.agents.themoviedb' +p14 +asS'has_attribution' +p15 +I01 +sS'languages' +p16 +(lp17 +S'xn' +p18 +asS'persist_stored_files' +p19 +I01 +sS'version' +p20 +I0 +sS'accepts_from' +p21 +NsS'prefs' +p22 +I01 +sS'name' +p23 +S'Fanart.tv' +p24 +sa(dp25 +S'media_types' +p26 +(lp27 +S'TV_Show' +p28 +asS'primary_provider' +p29 +I00 +sS'fallback_agent' +p30 +NsS'contributes_to' +p31 +(lp32 +S'com.plexapp.agents.thetvdb' +p33 +aS'com.plexapp.agents.themoviedb' +p34 +asg15 +I01 +sS'languages' +p35 +(lp36 +S'xn' +p37 +asS'persist_stored_files' +p38 +I01 +sS'version' +p39 +I0 +sS'accepts_from' +p40 +NsS'prefs' +p41 +I01 +sS'name' +p42 +S'Fanart.tv' +p43 +sa(dp44 +S'media_types' +p45 +(lp46 +S'Artist' +p47 +asS'primary_provider' +p48 +I00 +sS'fallback_agent' +p49 +NsS'contributes_to' +p50 +(lp51 +S'com.plexapp.agents.lastfm' +p52 +asg15 +I01 +sS'languages' +p53 +(lp54 +S'xn' +p55 +asS'persist_stored_files' +p56 +I01 +sS'version' +p57 +I0 +sS'accepts_from' +p58 +NsS'prefs' +p59 +I01 +sS'name' +p60 +S'Fanart.tv' +p61 +sa(dp62 +S'media_types' +p63 +(lp64 +S'Album' +p65 +asS'primary_provider' +p66 +I00 +sS'fallback_agent' +p67 +NsS'contributes_to' +p68 +(lp69 +S'com.plexapp.agents.lastfm' +p70 +asg15 +I01 +sS'languages' +p71 +(lp72 +S'xn' +p73 +asS'persist_stored_files' +p74 +I01 +sS'version' +p75 +I0 +sS'accepts_from' +p76 +NsS'prefs' +p77 +I01 +sS'name' +p78 +S'Fanart.tv' +p79 +sasS'com.plexapp.agents.none' +p80 +(lp81 +(dp82 +S'media_types' +p83 +(lp84 +S'Movie' +p85 +asS'primary_provider' +p86 +I01 +sS'fallback_agent' +p87 +NsS'contributes_to' +p88 +Nsg15 +I00 +sS'languages' +p89 +(lp90 +S'xn' +p91 +asS'persist_stored_files' +p92 +I01 +sS'version' +p93 +I0 +sS'accepts_from' +p94 +NsS'prefs' +p95 +I00 +sS'name' +p96 +S'Personal Media' +p97 +sa(dp98 +S'media_types' +p99 +(lp100 +S'TV_Show' +p101 +asS'primary_provider' +p102 +I01 +sS'fallback_agent' +p103 +NsS'contributes_to' +p104 +Nsg15 +I00 +sS'languages' +p105 +(lp106 +S'xn' +p107 +asS'persist_stored_files' +p108 +I01 +sS'version' +p109 +I0 +sS'accepts_from' +p110 +NsS'prefs' +p111 +I00 +sS'name' +p112 +S'Personal Media Shows' +p113 +sa(dp114 +S'media_types' +p115 +(lp116 +S'Artist' +p117 +asS'primary_provider' +p118 +I01 +sS'fallback_agent' +p119 +NsS'contributes_to' +p120 +Nsg15 +I00 +sS'languages' +p121 +(lp122 +S'xn' +p123 +asS'persist_stored_files' +p124 +I01 +sS'version' +p125 +I0 +sS'accepts_from' +p126 +NsS'prefs' +p127 +I00 +sS'name' +p128 +S'Personal Media Artists' +p129 +sa(dp130 +S'media_types' +p131 +(lp132 +S'Album' +p133 +asS'primary_provider' +p134 +I01 +sS'fallback_agent' +p135 +NsS'contributes_to' +p136 +Nsg15 +I00 +sS'languages' +p137 +(lp138 +S'xn' +p139 +asS'persist_stored_files' +p140 +I01 +sS'version' +p141 +I0 +sS'accepts_from' +p142 +NsS'prefs' +p143 +I00 +sS'name' +p144 +S'Personal Media Albums' +p145 +sa(dp146 +S'media_types' +p147 +(lp148 +S'Photo' +p149 +asS'primary_provider' +p150 +I01 +sS'fallback_agent' +p151 +NsS'contributes_to' +p152 +Nsg15 +I00 +sS'languages' +p153 +(lp154 +S'en' +p155 +aS'ar' +p156 +aS'bg' +p157 +aS'ca' +p158 +aS'cs' +p159 +aS'cy' +p160 +aS'da' +p161 +aS'de' +p162 +aS'el' +p163 +aS'es' +p164 +aS'et' +p165 +aS'fa' +p166 +aS'fi' +p167 +aS'fr' +p168 +aS'he' +p169 +aS'hi' +p170 +aS'hr' +p171 +aS'ht' +p172 +aS'hu' +p173 +aS'id' +p174 +aS'it' +p175 +aS'ja' +p176 +aS'ko' +p177 +aS'lt' +p178 +aS'lv' +p179 +aS'ms' +p180 +aS'mt' +p181 +aS'nl' +p182 +aS'no' +p183 +aS'pl' +p184 +aS'pt' +p185 +aS'ro' +p186 +aS'ru' +p187 +aS'sk' +p188 +aS'sv' +p189 +aS'sl' +p190 +aS'sr' +p191 +aS'th' +p192 +aS'tr' +p193 +aS'uk' +p194 +aS'ur' +p195 +aS'vi' +p196 +aS'zh' +p197 +aS'xn' +p198 +asS'persist_stored_files' +p199 +I01 +sS'version' +p200 +I0 +sS'accepts_from' +p201 +NsS'prefs' +p202 +I00 +sS'name' +p203 +S'Photos' +p204 +sasS'com.plexapp.agents.htbackdrops' +p205 +(lp206 +(dp207 +S'media_types' +p208 +(lp209 +S'Artist' +p210 +asS'primary_provider' +p211 +I00 +sS'fallback_agent' +p212 +NsS'contributes_to' +p213 +(lp214 +S'com.plexapp.agents.lastfm' +p215 +asg15 +I01 +sS'languages' +p216 +(lp217 +S'ab' +p218 +aS'aa' +p219 +aS'af' +p220 +aS'ak' +p221 +aS'sq' +p222 +aS'am' +p223 +aS'ar' +p224 +aS'an' +p225 +aS'hy' +p226 +aS'as' +p227 +aS'av' +p228 +aS'ae' +p229 +aS'ay' +p230 +aS'az' +p231 +aS'bm' +p232 +aS'ba' +p233 +aS'eu' +p234 +aS'be' +p235 +aS'bn' +p236 +aS'bh' +p237 +aS'bi' +p238 +aS'bs' +p239 +aS'pb' +p240 +aS'br' +p241 +aS'bg' +p242 +aS'my' +p243 +aS'ca' +p244 +aS'ch' +p245 +aS'ce' +p246 +aS'ny' +p247 +aS'zh' +p248 +aS'cu' +p249 +aS'cv' +p250 +aS'kw' +p251 +aS'co' +p252 +aS'cr' +p253 +aS'hr' +p254 +aS'cs' +p255 +aS'da' +p256 +aS'dv' +p257 +aS'nl' +p258 +aS'dz' +p259 +aS'en' +p260 +aS'eo' +p261 +aS'et' +p262 +aS'ee' +p263 +aS'fo' +p264 +aS'fj' +p265 +aS'fi' +p266 +aS'fr' +p267 +aS'fy' +p268 +aS'ff' +p269 +aS'gd' +p270 +aS'gl' +p271 +aS'lg' +p272 +aS'ka' +p273 +aS'de' +p274 +aS'el' +p275 +aS'gn' +p276 +aS'gu' +p277 +aS'ht' +p278 +aS'ha' +p279 +aS'he' +p280 +aS'hz' +p281 +aS'hi' +p282 +aS'ho' +p283 +aS'hu' +p284 +aS'is' +p285 +aS'io' +p286 +aS'ig' +p287 +aS'id' +p288 +aS'ia' +p289 +aS'ie' +p290 +aS'iu' +p291 +aS'ik' +p292 +aS'ga' +p293 +aS'it' +p294 +aS'ja' +p295 +aS'jv' +p296 +aS'kl' +p297 +aS'kn' +p298 +aS'kr' +p299 +aS'ks' +p300 +aS'kk' +p301 +aS'km' +p302 +aS'ki' +p303 +aS'rw' +p304 +aS'ky' +p305 +aS'kv' +p306 +aS'kg' +p307 +aS'ko' +p308 +aS'kj' +p309 +aS'ku' +p310 +aS'lo' +p311 +aS'la' +p312 +aS'lv' +p313 +aS'li' +p314 +aS'ln' +p315 +aS'lt' +p316 +aS'lu' +p317 +aS'lb' +p318 +aS'mk' +p319 +aS'mg' +p320 +aS'ms' +p321 +aS'ml' +p322 +aS'mt' +p323 +aS'gv' +p324 +aS'mi' +p325 +aS'mr' +p326 +aS'mh' +p327 +aS'mo' +p328 +aS'mn' +p329 +aS'na' +p330 +aS'nv' +p331 +aS'ng' +p332 +aS'ne' +p333 +aS'xn' +p334 +aS'nd' +p335 +aS'no' +p336 +aS'nb' +p337 +aS'nn' +p338 +aS'oc' +p339 +aS'oj' +p340 +aS'or' +p341 +aS'om' +p342 +aS'os' +p343 +aS'pi' +p344 +aS'pa' +p345 +aS'fa' +p346 +aS'pl' +p347 +aS'pt' +p348 +aS'ps' +p349 +aS'qu' +p350 +aS'rm' +p351 +aS'ro' +p352 +aS'rn' +p353 +aS'ru' +p354 +aS'se' +p355 +aS'sm' +p356 +aS'sg' +p357 +aS'sa' +p358 +aS'sc' +p359 +aS'sr' +p360 +aS'sn' +p361 +aS'ii' +p362 +aS'sd' +p363 +aS'si' +p364 +aS'sk' +p365 +aS'sl' +p366 +aS'so' +p367 +aS'st' +p368 +aS'nr' +p369 +aS'es' +p370 +aS'su' +p371 +aS'sw' +p372 +aS'ss' +p373 +aS'sv' +p374 +aS'tl' +p375 +aS'ty' +p376 +aS'tg' +p377 +aS'ta' +p378 +aS'tt' +p379 +aS'te' +p380 +aS'th' +p381 +aS'bo' +p382 +aS'ti' +p383 +aS'to' +p384 +aS'ts' +p385 +aS'tn' +p386 +aS'tr' +p387 +aS'tk' +p388 +aS'tw' +p389 +aS'ug' +p390 +aS'uk' +p391 +aS'ur' +p392 +aS'uz' +p393 +aS've' +p394 +aS'vi' +p395 +aS'vo' +p396 +aS'wa' +p397 +aS'cy' +p398 +aS'wo' +p399 +aS'xh' +p400 +aS'yi' +p401 +aS'yo' +p402 +aS'za' +p403 +aS'zu' +p404 +asS'persist_stored_files' +p405 +I01 +sS'version' +p406 +I0 +sS'accepts_from' +p407 +NsS'prefs' +p408 +I00 +sS'name' +p409 +S'Home Theater Backdrops' +p410 +sasS'com.plexapp.agents.imdb' +p411 +(lp412 +(dp413 +S'media_types' +p414 +(lp415 +S'Movie' +p416 +asS'primary_provider' +p417 +I01 +sS'fallback_agent' +p418 +NsS'contributes_to' +p419 +(lp420 +S'com.plexapp.agents.themoviedb' +p421 +asg15 +I01 +sS'languages' +p422 +(lp423 +S'en' +p424 +aS'sv' +p425 +aS'fr' +p426 +aS'es' +p427 +aS'nl' +p428 +aS'de' +p429 +aS'it' +p430 +aS'da' +p431 +aS'ar' +p432 +aS'ca' +p433 +aS'zh' +p434 +aS'cs' +p435 +aS'et' +p436 +aS'fi' +p437 +aS'el' +p438 +aS'he' +p439 +aS'hi' +p440 +aS'hu' +p441 +aS'id' +p442 +aS'ja' +p443 +aS'ko' +p444 +aS'lv' +p445 +aS'no' +p446 +aS'fa' +p447 +aS'pl' +p448 +aS'pt' +p449 +aS'ro' +p450 +aS'ru' +p451 +aS'sk' +p452 +aS'th' +p453 +aS'tr' +p454 +aS'uk' +p455 +aS'vi' +p456 +asS'persist_stored_files' +p457 +I01 +sS'version' +p458 +I0 +sS'accepts_from' +p459 +(lp460 +S'com.plexapp.agents.localmedia' +p461 +asS'prefs' +p462 +I01 +sS'name' +p463 +S'Plex Movie (Legacy)' +p464 +sasS'com.plexapp.agents.lyricfind' +p465 +(lp466 +(dp467 +S'media_types' +p468 +(lp469 +S'Album' +p470 +asS'primary_provider' +p471 +I00 +sS'fallback_agent' +p472 +NsS'contributes_to' +p473 +(lp474 +S'com.plexapp.agents.lastfm' +p475 +aS'tv.plex.agents.music' +p476 +aS'org.musicbrainz.agents.music' +p477 +asg15 +I01 +sS'languages' +p478 +(lp479 +S'xn' +p480 +asS'persist_stored_files' +p481 +I01 +sS'version' +p482 +I0 +sS'accepts_from' +p483 +NsS'prefs' +p484 +I00 +sS'name' +p485 +S'LyricFind' +p486 +sasS'com.plexapp.agents.thetvdb' +p487 +(lp488 +(dp489 +S'media_types' +p490 +(lp491 +S'TV_Show' +p492 +asS'primary_provider' +p493 +I01 +sS'fallback_agent' +p494 +NsS'contributes_to' +p495 +Nsg15 +I01 +sS'languages' +p496 +(lp497 +S'en' +p498 +aS'fr' +p499 +aS'zh' +p500 +aS'sv' +p501 +aS'no' +p502 +aS'da' +p503 +aS'fi' +p504 +aS'nl' +p505 +aS'de' +p506 +aS'it' +p507 +aS'es' +p508 +aS'pl' +p509 +aS'hu' +p510 +aS'el' +p511 +aS'tr' +p512 +aS'ru' +p513 +aS'he' +p514 +aS'ja' +p515 +aS'pt' +p516 +aS'cs' +p517 +aS'ko' +p518 +aS'sl' +p519 +aS'hr' +p520 +asS'persist_stored_files' +p521 +I01 +sS'version' +p522 +I0 +sS'accepts_from' +p523 +NsS'prefs' +p524 +I01 +sS'name' +p525 +S'TheTVDB' +p526 +sasS'com.plexapp.agents.lastfm' +p527 +(lp528 +(dp529 +S'media_types' +p530 +(lp531 +S'Artist' +p532 +asS'primary_provider' +p533 +I01 +sS'fallback_agent' +p534 +NsS'contributes_to' +p535 +Nsg15 +I01 +sS'languages' +p536 +(lp537 +S'en' +p538 +aS'sv' +p539 +aS'fr' +p540 +aS'es' +p541 +aS'de' +p542 +aS'pl' +p543 +aS'it' +p544 +aS'pt' +p545 +aS'ja' +p546 +aS'tr' +p547 +aS'ru' +p548 +aS'zh' +p549 +asS'persist_stored_files' +p550 +I01 +sS'version' +p551 +I0 +sS'accepts_from' +p552 +NsS'prefs' +p553 +I01 +sS'name' +p554 +S'Last.fm' +p555 +sa(dp556 +S'media_types' +p557 +(lp558 +S'Album' +p559 +asS'primary_provider' +p560 +I01 +sS'fallback_agent' +p561 +NsS'contributes_to' +p562 +Nsg15 +I01 +sS'languages' +p563 +(lp564 +S'en' +p565 +aS'sv' +p566 +aS'fr' +p567 +aS'es' +p568 +aS'de' +p569 +aS'pl' +p570 +aS'it' +p571 +aS'pt' +p572 +aS'ja' +p573 +aS'tr' +p574 +aS'ru' +p575 +aS'zh' +p576 +asS'persist_stored_files' +p577 +I01 +sS'version' +p578 +I0 +sS'accepts_from' +p579 +NsS'prefs' +p580 +I01 +sS'name' +p581 +S'Last.fm' +p582 +sasS'org.musicbrainz.agents.music' +p583 +(lp584 +(dp585 +S'media_types' +p586 +(lp587 +S'Artist' +p588 +asS'primary_provider' +p589 +I01 +sS'fallback_agent' +p590 +NsS'contributes_to' +p591 +Nsg15 +I01 +sS'languages' +p592 +(lp593 +S'en' +p594 +aS'ar' +p595 +aS'bg' +p596 +aS'zh' +p597 +aS'hr' +p598 +aS'cs' +p599 +aS'da' +p600 +aS'nl' +p601 +aS'fi' +p602 +aS'fr' +p603 +aS'de' +p604 +aS'el' +p605 +aS'hu' +p606 +aS'id' +p607 +aS'it' +p608 +aS'ja' +p609 +aS'ko' +p610 +aS'nn' +p611 +aS'pl' +p612 +aS'pt' +p613 +aS'ro' +p614 +aS'ru' +p615 +aS'sr' +p616 +aS'sk' +p617 +aS'es' +p618 +aS'sv' +p619 +aS'th' +p620 +aS'tr' +p621 +aS'vi' +p622 +aS'xx' +p623 +asS'persist_stored_files' +p624 +I01 +sS'version' +p625 +I0 +sS'accepts_from' +p626 +NsS'prefs' +p627 +I01 +sS'name' +p628 +S'Musicbrainz' +p629 +sa(dp630 +S'media_types' +p631 +(lp632 +S'Album' +p633 +asS'primary_provider' +p634 +I01 +sS'fallback_agent' +p635 +NsS'contributes_to' +p636 +Nsg15 +I01 +sS'languages' +p637 +g593 +sS'persist_stored_files' +p638 +I01 +sS'version' +p639 +I0 +sS'accepts_from' +p640 +NsS'prefs' +p641 +I01 +sS'name' +p642 +S'Musicbrainz' +p643 +sasS'com.plexapp.agents.themoviedb' +p644 +(lp645 +(dp646 +S'media_types' +p647 +(lp648 +S'Movie' +p649 +asS'primary_provider' +p650 +I01 +sS'fallback_agent' +p651 +NsS'contributes_to' +p652 +Nsg15 +I01 +sS'languages' +p653 +(lp654 +S'en' +p655 +aS'cs' +p656 +aS'da' +p657 +aS'de' +p658 +aS'el' +p659 +aS'es' +p660 +aS'fi' +p661 +aS'fr' +p662 +aS'he' +p663 +aS'hr' +p664 +aS'hu' +p665 +aS'it' +p666 +aS'lv' +p667 +aS'lt' +p668 +aS'nl' +p669 +aS'no' +p670 +aS'pl' +p671 +aS'pt' +p672 +aS'ru' +p673 +aS'sk' +p674 +aS'sv' +p675 +aS'th' +p676 +aS'tr' +p677 +aS'vi' +p678 +aS'zh' +p679 +aS'ko' +p680 +asS'persist_stored_files' +p681 +I01 +sS'version' +p682 +I0 +sS'accepts_from' +p683 +(lp684 +S'com.plexapp.agents.localmedia' +p685 +asS'prefs' +p686 +I01 +sS'name' +p687 +S'The Movie Database' +p688 +sa(dp689 +S'media_types' +p690 +(lp691 +S'TV_Show' +p692 +asS'primary_provider' +p693 +I01 +sS'fallback_agent' +p694 +NsS'contributes_to' +p695 +(lp696 +S'com.plexapp.agents.thetvdb' +p697 +asg15 +I01 +sS'languages' +p698 +g654 +sS'persist_stored_files' +p699 +I01 +sS'version' +p700 +I0 +sS'accepts_from' +p701 +(lp702 +S'com.plexapp.agents.localmedia' +p703 +aS'com.plexapp.agents.thetvdb' +p704 +asS'prefs' +p705 +I01 +sS'name' +p706 +S'The Movie Database' +p707 +sasS'com.plexapp.agents.movieposterdb' +p708 +(lp709 +(dp710 +S'media_types' +p711 +(lp712 +S'Movie' +p713 +asS'primary_provider' +p714 +I00 +sS'fallback_agent' +p715 +NsS'contributes_to' +p716 +(lp717 +S'com.plexapp.agents.imdb' +p718 +asg15 +I01 +sS'languages' +p719 +(lp720 +S'xn' +p721 +asS'persist_stored_files' +p722 +I01 +sS'version' +p723 +I0 +sS'accepts_from' +p724 +NsS'prefs' +p725 +I00 +sS'name' +p726 +S'CineMaterial' +p727 +sasS'com.plexapp.agents.localmedia' +p728 +(lp729 +(dp730 +S'media_types' +p731 +(lp732 +S'Movie' +p733 +asS'primary_provider' +p734 +I00 +sS'fallback_agent' +p735 +NsS'contributes_to' +p736 +(lp737 +S'com.plexapp.agents.imdb' +p738 +aS'com.plexapp.agents.none' +p739 +asg15 +I00 +sS'languages' +p740 +(lp741 +S'xn' +p742 +asS'persist_stored_files' +p743 +I00 +sS'version' +p744 +I0 +sS'accepts_from' +p745 +NsS'prefs' +p746 +I01 +sS'name' +p747 +S'Local Media Assets (Movies)' +p748 +sa(dp749 +S'media_types' +p750 +(lp751 +S'TV_Show' +p752 +asS'primary_provider' +p753 +I00 +sS'fallback_agent' +p754 +NsS'contributes_to' +p755 +(lp756 +S'com.plexapp.agents.thetvdb' +p757 +aS'com.plexapp.agents.none' +p758 +asg15 +I00 +sS'languages' +p759 +(lp760 +S'xn' +p761 +asS'persist_stored_files' +p762 +I00 +sS'version' +p763 +I0 +sS'accepts_from' +p764 +NsS'prefs' +p765 +I01 +sS'name' +p766 +S'Local Media Assets (TV)' +p767 +sa(dp768 +S'media_types' +p769 +(lp770 +S'Artist' +p771 +asS'primary_provider' +p772 +I00 +sS'fallback_agent' +p773 +NsS'contributes_to' +p774 +(lp775 +S'com.plexapp.agents.discogs' +p776 +aS'com.plexapp.agents.lastfm' +p777 +aS'com.plexapp.agents.plexmusic' +p778 +aS'com.plexapp.agents.none' +p779 +aS'tv.plex.agents.music' +p780 +aS'org.musicbrainz.agents.music' +p781 +asg15 +I00 +sS'languages' +p782 +(lp783 +S'xn' +p784 +asS'persist_stored_files' +p785 +I00 +sS'version' +p786 +I0 +sS'accepts_from' +p787 +NsS'prefs' +p788 +I01 +sS'name' +p789 +S'Local Media Assets (Artists)' +p790 +sa(dp791 +S'media_types' +p792 +(lp793 +S'Artist' +p794 +asS'primary_provider' +p795 +I00 +sS'fallback_agent' +p796 +NsS'contributes_to' +p797 +(lp798 +S'com.plexapp.agents.plexmusic' +p799 +asg15 +I00 +sS'languages' +p800 +g783 +sS'persist_stored_files' +p801 +I00 +sS'version' +p802 +I2 +sS'accepts_from' +p803 +NsS'prefs' +p804 +I01 +sS'name' +p805 +S'Local Media Assets (Artists)' +p806 +sa(dp807 +S'media_types' +p808 +(lp809 +S'Album' +p810 +asS'primary_provider' +p811 +I00 +sS'fallback_agent' +p812 +NsS'contributes_to' +p813 +(lp814 +S'com.plexapp.agents.discogs' +p815 +aS'com.plexapp.agents.lastfm' +p816 +aS'com.plexapp.agents.plexmusic' +p817 +aS'com.plexapp.agents.none' +p818 +aS'tv.plex.agents.music' +p819 +aS'org.musicbrainz.agents.music' +p820 +asg15 +I00 +sS'languages' +p821 +(lp822 +S'xn' +p823 +asS'persist_stored_files' +p824 +I00 +sS'version' +p825 +I0 +sS'accepts_from' +p826 +NsS'prefs' +p827 +I01 +sS'name' +p828 +S'Local Media Assets (Albums)' +p829 +sasS'com.plexapp.agents.plexthememusic' +p830 +(lp831 +(dp832 +S'media_types' +p833 +(lp834 +S'TV_Show' +p835 +asS'primary_provider' +p836 +I00 +sS'fallback_agent' +p837 +NsS'contributes_to' +p838 +(lp839 +S'com.plexapp.agents.thetvdb' +p840 +aS'com.plexapp.agents.thetvdbdvdorder' +p841 +aS'com.plexapp.agents.themoviedb' +p842 +asg15 +I00 +sS'languages' +p843 +(lp844 +S'xn' +p845 +asS'persist_stored_files' +p846 +I01 +sS'version' +p847 +I0 +sS'accepts_from' +p848 +NsS'prefs' +p849 +I00 +sS'name' +p850 +S'Plex Theme Music' +p851 +sass. \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/HTTPCookies new file mode 100644 index 000000000..2021ccdad --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/HTTPCookies @@ -0,0 +1,4 @@ +# Netscape HTTP Cookie File +# http://curl.haxx.se/rfc/cookie_spec.html +# This is a generated file! Do not edit. + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/StoredValues new file mode 100644 index 000000000..9603bf1ff --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/StoredValues @@ -0,0 +1 @@ +{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.blobs.db b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.blobs.db new file mode 100644 index 0000000000000000000000000000000000000000..8abcf381c318cc1ff12c0dc85d95efb36740390f GIT binary patch literal 365568 zcmeFa34mKyRwn$GvgIs}m2w;M9F^iFT5Cz-IAy!yRJ9zC zMKu)fqyGi`IpqC>K<@8|KOv31rETjV^kMC1;9E8Hf6)J4{~P_Q`k(24tpC3LJNj?x zU(kP9|3&@h_0Q@*ssD)nY5f!W_vqiLe@y=-{pzDPG-q2ss4gF>P1^sFL zDgB5(rSI1#^t`@DPwDsQcj#O6P5O1ZuKh3VziEG?{b%hzXr!J(moeSBX9NBJGwEjUf*wpdU$>S&B|7VUK-JNvegY5Gq8rQ71j5(tT0adeU zR9cPZZgAm>Ua5y=1j#T4t+el%y=PX3Yr2GwW635}&JO zz6xB96eHs_?P|MOZkdg`M+RD@X_Q+=wN!3xPeOC5lGot7LTFRnMOyHEAF0FlcJc~* zZzFT?eJh!P?@i=I_`Z%j1K&D13Dx+&$T9f-Z{%_K{u^=-zW+0M1it@-Ou+Z=lRSL? zHrWH;zfMx{{eP3~@cr+|UGV+${&BJizW+~hJ$!#Zp&jJA-hi)fy9i(3 za2~!sd=9>@%)-}eW%z164_}Sb@OAD<_&Q6as2+i@7Z1bNvj^boG?nAY2jT0;7<^4p zQ6?XNuZMTTSAk0Nz&-G_>rVI@*$Q9x-3DLxB;f0AD$|{t;p_Hc__~z}H@p$PHcL1bHf-tVYDzBf54%P z=CZk5KA+3R_xhB~XfadF$M?9DOcqj~$YkQX9ZDge$xakUv-$Wghmy~YXR_Ie+<5$c zhmr*f3G2Wb#>>SuwuNq2zMoxlD1aScu=@QnLA6u0VOVdXx+R zlFLrSZ+9txN3M{|7vr}%lx!{!80HJbc!E)&o*|tq)LA`^nB__&(8T!uRnG zbZhlk2fDO+v;%!wJ<>S^-%oU&fbZ$fA^3j0^DulL?u^3sW1Sp)Pj#RNtA{%G!S}&V z621>~p#Q3qoh|VFXy+#Q-ruvjT3a?lvuJFO;CjkZRy~NqerRH;rNMzlc%PD(UHH@y1d}) z*nwUv*XP>hxp2xrs|Ql0$yCbqy3rJK1A5ysnx)p+_WVq#-K@!j!Ilvn*n)m#l;+!( zS&=d=v}bB&WxLzLAxqv25bVy~h5@?>w)r3!uWDKgwKA*iM!ibwy=Gi6pgc~;a!WdE z8nvnwDkj)}Aj+kAh(P-+aNCq1=nCFdFnGR?rR+FWLX5)fcg<6_xHrfkd*YTpV{*U^)4Y0tsCqmyS;KN)fyFcl)!Rj_XrzA zj6&hdfK;>5Xu;_Y2_EGOWwS<4m3WH|ZwZiU!MyG)!Q|_gC4q_a|25I)QAk8!c@RMT z|MK99sUiZ`0s?IPul$yxeg(dM^;(d)yNveg_=XL!#2t62SLWF&aG}!3#f(j}- zRz%=@qe=ylEDh6dZH>he`MmnU7Z@6zZit=zy*wt%GPwTlKAd1E zBCw_r!1e!{u3ju0BG459w*FUdRkR;dZ&l&;!N7mm2I9)?*T)iDwy5uHVN2##c@7rl zb5>kj6jRcYR>9uVR&xCg5*1gh$&fuCSVFe^cWs1^Hoq@Pu?)&;D&~c9tu356h&pTo z>(q0`<&}tuV)XvyTgSM~9hkU{S@V+NZ1TLHH;FZ7Z}z;1ry?0=HjhS*&dOE^_>zKa50MdtBm?aA?aMD|;O}Za|M(UqophEcs zT>lUJfQJAKG6J~%ALQD{vJW}}wEyeMc}4r2`bqf5TuwY}-F#tVERjm7Z>8AsjVUKB zqt!C&bC&Sq7IEn&ge_^|Cf7YzY9>9mVk?;g$1+)-?960n5yyhWH6T5T8&GUBQrUX< zXIImmEjPvz*{piyjHtwK8a4Z5i?^rnD4Rt9!wgG8(Mv|McVStBlDj7loTd)#V3xGa zNO$(#5KG*7r@I?~JqKvY*=~*fd$Wjv8+_GEPWL)uYX}<*VCxfVMsScHj`7dVLJ!~# zK}Nk=iU^9{C3FKYYTJeD|K%L;Fl|I&l_P-b|5aW=C>|oPj0j-=Uq)~-X+&U^BS8DV z2KGPw7PSAds+jVne{ilA-f{W3s7P?1iFs2jaqytpv0c0d&l@fn&3V(Jm-vG> z!b@Dx7O@?4Nn}ZlA()=1e2_O4Upfym-2bog@fpQK1eOy4I{&NsA1Lr2eh>jfU`-*A zRIgJ~L*Phw)27KPcmgslaCHPngN}ab?dRzKTP@oEb!EGveZTr0@DKGR?tg59U3-{a zA9>qd3%kzg;dqg4w)0)ld!#$W)sKW@Nvj_Dx`s<#Tn1U-^{K+vcJwE8} z-sADS*hjG0Wer(yx>;SixuWT{eoc2`H#6L?6rDW?#XYbA36ZwSa2Fz7b=)O(K(}FB z9k9}!=id%6xa}&HS?i1Rw&b#T4KR|k+-^ZD zW{ui=biq5@=WTs#R{=aP6F|y{>wkZ=!@m%LfkOcG{{vU$SYSlJLje1~2L=9t2n-wo zO#i1P6)maJC&ciB2)GE?me3bBv*X(DT;{Y8wuZ!coY48PP27dsIvFQyNn3G84MPuR z2aeX-X-o7DGWWxkM%94x*MXDWkz4Gg?)5{*eIu1pRPj?cYH$b7e{*rhqf+8SKxyWD^DpS<-aT{Xm54E6Vlz8k$jf2UwyJK{5ed zG^^Bmt3Q69HO#rQ!VQi--?Nnr{M6BV*_1ijr#{>paDqlQq1ifSd6?_jzHBXkIiy4n z2Q~b&LCjN`MUSq4Y8f(z8N@v{Y5Kg0QbR+Y6<2@#|*^INBP&{BV7tZbbBfdsE;01Pe;$pb2l8Wg?NtcXXU*!(}F zzox*O++Tt>e&IP~{2&5|zzQI+YiMZ4{>|Led~CVToRc_j_0b1@s6{fH%;xl=2lgdG zFABBmCOk7z3egJ%h_hK6N-LY(DbFg^VdltgREO?VHn~R9ES>*#^pFBBzZ1UuD$s<$GB`43EJ~4e9Vjr72ewurgYJ2zPmFK2M z3P;d^r}W4&x2X@ENRIHeX|`ad?dJg`*MBD5sf8$^m59}%2Ko@0u9Nsf)b{Vd31+A` zxcgg!^;#&t)t;Y+XN0`>fLcxSf?4){o^Ll=)HRRuT9Es`kDF^?wd4dt-`R0w%lgF5 zovQ846&?wLh7W6+ax2UKofKLCA2QOKsqHqamv+-Qxc^`3XoT?)fi;2v+Y#31=wo60 z_#M(dmS?O+tqr41D5Tn^!&altM}OBI>1Nn-b5fsYEbVBIbu2jIoi-S)trASI)Mr{? zjAcQvQKE+iSz%=1?gKaS*cY2H8i&1svy@@H4Trc>Q^2+J_MmI$?Y!gXaHw%lY3Khi?#cR(7cdX0OWzmC9ell&jSU&ZVlxyKSu<$l)n!I#CAj?y_A5A9vyBgs8fL zzH#leXMeTT>#QZf00=SV1$bre{T5%-n1{KW-;x_ulQtQ9fgx_OVZ&~L=lKwkHPQ+^ z+1Z5WiRK!#oricp+fc5;%b$E!-eRuT+kTKS%fmX~1`mNH$L*k)2hRU%WDLh*AOcH4 zfbReC{m-Q!hj9>rYaan-|5KZa+Eib;_Di$MOTaXkZ{KhmGmd`v#efFWetw#10Ii*Z z`i9dDE=_yqI63U{UXh~^<`s^PPO=7<#sXyPa=l_-MG}>qy;PWxqOaPd+aX9ec*MnL zpic0*1T%eaSR3cZH|ZyBFpy?}J*?Rs-IKvbEgZN-Zsaq$>nm|F7~P1I0rGmJY(rKZJ2f}Ckd);{@aK+J%f z`qNj&ZjU9##?*H<2G%rG(`uVCxz!CvOo>I{W?4Vtl1e~RlB`@JivVkccGC>0AZzBl zDV*z~b~v-%ZnWvzqR{~LT^*tZthf1UK&e5j9F$7_`Zbi}W7sZZZTT&SW2?FXtZ;KM3gJN^efG1@_Z-USh zcft`HMgVOd+@_$1L4EzC=atGi7AYt%odNR=RX4Bw?h#6E!&YJYJr1`2Z0QgH~ z>wi`MvI76%2N6I7))oSHYeUN9rc+?AF{;PG24WqwPd81r&al~oo&QJs|Jtf_EDa*i zF9Nv#?-wcLLj=|y0vq+aVfr6ev~BA3%DBEyFZL{>y12^16@P2;`XgO^Y)SJlS#8G+jZ}TkY>4lj)u{{sgD<%lm5C0Hk#z= zsb^Wxxvc+Zj{SLky0htS`)1)&c8OrG1}9(4ie>M!=vIyYoe`u?1%sEQ9q`R={DE&< z3jupfo=9JZv=+*Bo>qo);#GR2re(|-P1xOmBEZ|fQi~AJ%r4pS1osYyM@x5T&+>Io=@yBCuu=!2Z8x zs}>7}2=qh%`+rY}kO2``vj|}SU$a$<1w#aSBCt{WHf6nXzoLCyJ*DkeKC3sC`++3+ zkc}yJNQ3NQ%8uEVRbWRP97Ts^%+15u7AuNAA*ec1QEaIZxUp3^7op*!*SRX^k_V2S zIFKf{?u;d-rd0BPFORS7qK=-dQngW`CmvX45n*EzxguCoBamK{WHcW~Fmnh0e5^Ec zKnom+bO|ciZO1%e-xSEOGd- zO2(q=SZH{`nsWp5{lUpvaQ{sZdP#AS`aiOf+;AUL8j_t|$^^=0IX)0D-cMP8FEtX? zR@oUWyRqW@FB$5Pga`}>0@u@W!ULiBK?D$i!9xJ&|G}$sEHNVBB7pthMFRgt1O^WQ z?EiyT=U8Gyz(oN2zl#L^iwF!J0;vBRygJ7cBLXf0bpBtb3@iE$?YFg~>KByZD-*k! zo&TM6%sy#56oBUm>FbltlJ`zR6n(#Fos42z(hU&rnJMp%2HbE7UTmRPQriA44&a~^ z;qFTpFC0+NRs-Gu33=iG?{HySn_kM{U0FbGzN@uR5c4Msu4wDhw;Px0>jS)il;IW& zIJ!;0zKdPhA$RzuW$r2o#erFs1GGoPDwDDFWlJWp`(ufR9#VPBHkTED7$Z#H*IfuF za-T;qj-=NoN)ug=C2$hh=O~;L2_gDJfc<~)>Ksdq2)GDf|96qVe-VMfLje2#;MF;n7!hz0p#5K0ZdKs+&*$ME=hJ!c z0jBbJ%XVzy-Kt>EPgH7c3m&-@pPVnb)PthRLmqWW+P_yDjrkJ0>%y!5!VlB)q3m)} zNDmkCeZ%g_(ARUr4s_sFOhmw?Rf13+foip9tV+{dps&ON za@29FKzcL?TZm&xn6ZZ`Qpwp`qulD|4ajj>E7n%P+G-xmaS?E|u7?Rl55-tJG|OKiI&}!@`DZdmwcC2#e$Tsz`D!CUz(54R|Q0 z;fAH>v#~@vt&%Nld*>%a*~DLuMde9Zw~vVFih0tlyzLa>%B~D^(eSq6Y$y3QIUPj@ zJgOttfY5+Lf)u_JUS5Af`IfZt?7o4Nh#J^KGT$8hj?{Tih9f<8;^fry;p538Q_qcv z**T?$B-6>0Q;$uZoH~AR>Qqw7WPt;Ubn?XUUkr2PaP*oIEtOI~kpPw`3!d zqdt0nJ~1(&zIV#1d~to^@I6t-jaUOM&rp9fS^w`RKwB>!>I_qb*5h8q>c03%S4Z=efc3l9b?`_ZMP`d+t%+KJ3>xQQx8EljznnkJ`dTsXhc2$1flsi_+r%l_G0XNgDU^gm-EjAI&&_jzB zhc*IwAd?l3NuN&R`hQ8I9Y#U~)&v6B|JOt{Vj&QLB_V+O|0ThOkr073fdJ0`YoZ#l z5QxB%5ZI{ih5Nrd6z#9ozf*STKdJwumkfk3rQVej4>GrI@7R|s;qs=@te0yg;moHM zL4Hcq-b8Q(R5_ri2s2uZcC%uuWgL~$ZqRqlG|SD)CHKCmsNC`d47v!Es=MS@h3zAg zC3)awqs(3HOqHuuP`=Si#GZh>rpG0AaS_NLjO_}6aQHR~tB3=$$uzk*!Ok~#-e9_* z$oP=~CwkSYU0F*z-z@XA=v2PE8rl{(rj!RY>Y(BDeLtr6jjvC<3k5awjW5#U@9(jK zdivq@i5JJB)a=eB;#Sir&qL2>wdhInQdUYnh4a5R-r*mJz`!AZ{eR%991DyHcnF~W z&w~R0Km-O30XqK=DIZm|U(#Mz55gbpPU3q2gZ1P z>}S1)Q)}oz$SusE$Va2 zHr-k!v(g50~Rf5Ybm2)1gW|S|$dEkY|7B+hrbbxl z%&J>HUWu@qz8VNcKXCNKfpll*qp?IPrM`6?6ZI_UKS03(SG8J(CH#0!6hR1E(pK3y zy%BQL-sPD_xwZdnW8NrTFfDTiG#ahTyauFcR2uVu2tA=8=Lon;=eOhh#i%qnvY)9M zI`(lGPb*Y{?R(td`$wq#S&9fDzSAl5ixvC zTR1fq_Ohs{>6T3Y`Zbc6iX{#oR>__osz5kD6s-n?z>-8d?@$v{j5)eg;7x%Ge!1rF zLb=v9Y|S6pekhhWc1$H>-6g9wDwg@G5h z70OQIk)p&j&hLXpyopm#li933%L=2 zwS)ln|Fu+`SQbQJaR^}lUmRY@jR>qI1hD_FrP{=@AOed+0QLWi!wb0)fwhDH&i`wv zHnA*-z~T_t2nN3)rJ!iPpzT(_2maU%|BL=GD_iH4Ble>W_9NisO3S=pwoJqF|C$wz zAASHFa89PUi_iScb;s8p7YetP?ZeId32aIr0q~OhsMg#5&)WzqlQ+^=?AANA^+C?cfLIIFI zjLlyou$j_i!xOQ@zI`g$5p9WbErvn!63`8?BBZ9wzU_pYr(=nO2L%geAWPmvC=aUi z7HDyX!BdZ~Ph53_GW3AIK>J_xIDjFD03xsk5Ww~S8mL4p0wSqgBA{4~W4XdrY+7qIK) z`LH$u+!R)t<^sJA9@136t@_I~a1zKaY5VU2*zO3Zx*-+x=aypE)4`KFf2m!5k-chK zG<{HB(476$D~);!d<>MDa7CS_!)s5{SK3F}>Ew4zre^R?%2Fqbt`qsve7SkfX!<@E zWr1@dyj>Go64+zp7@rKqwAswOE@#9I(}|Nq(>@=#(#;Hn{j>;J0;B_@OjTyqG}{;w-> zMZ2JW3jR^9B%Wl>tlxf$tplr#i}hNgTrHh%8*T7?O{@Mjf6Av+jS6^%YSc?$p)1crP#_7T*=)dTUID5X3w(LE zYp^^Fgo}$UZj}i_*}j({yWl$CxU^u>RXAOr2Ru5{SHC! zmd>k#0NavUT$kd=jmxs<%4|V`&(3*r(tvOSbl)oT?8+&A8zHn4ehb5IDI%F7YXay0 zYi`I!ff0eLh5+{es|F<|ga}-72w?xe=Bf+@Mg*=J0<`}RDW;-+MEgzUAK;JW`jAbh zV~MABfRh;$oG@QvU+{!DeW!`;kS#D)IX{_I$*gi=O=rJ1ef-eWv&rqf<8Du$IG)_j zrLa9Y;{0?{-wv-}-*^gqbAv?rXo$WE@%{3eC1>XcGZh4*1dSClvhj~f6WcgNjp=pA3j$#GdcyrdI`T|~u0XmTt*wS|H zKgk}EyYf(PAOnxc$sb8yapgD5_gcEXLodEj~zWRc^d71 z%QfC%x`@CvfB@eAy#^`?MMMOa2?6Z?%LFVYiwIl;2w?xe1}X_fL_ptj6;!jEayE||terpKFWQ*Bu&=#pG(X7iCpo{uHY zLHg$eZCof3swb?OGfk>zavqLjy15YJY)cairFhw)X|nSf zP|SfS&-5Wm$!auP!Ne{sMjnfdKaZ!Kh~}B_be00Qg8Sxos$>&a9Pm#)2ad2FSHI#Kabr#Khuz zMW+|iK?3WIh};E6FGtHQGK~%(pMKx^!~hZ}^3rOtoQh~jk{7W!6|I0>2q#*)>fdKaZ!Kh~}B_be00QBmy0)v47_W!}CXDlTmAVUEAzYG1L)RgL{Y#UL# zuv2R)&z>g3RWSIcG{N9c4aDx_Sxk1vWj?i+3t`IJGI0eKDj*l#mQdiJG6@`MvZ(@B zl0him!=Vs|rpgG+t)LL3yw#UXe(VU5c!o6DJrhfmz)XIsrBx6C$wM5WxPw+G+&lK?GI~0qp-P zhc)Je2&^^)HtM6G|9?}_KA?U{%_(o{Pp_ziB=brvQO;|EOGw+rA-khw8LgIkM~@@B zkMRgR%0H3mQn^@>iMc9a>XuPR(!Mn1k(tI69BIZ9FM!BLIGu1rF20FC!k~QJBINZ` z>MAVHmL~U{jU~=ZXk@=2Deuyhha~K^)eTiXBA2vVO0JkP9tx}Lo-{uP4FF{1eS&&g ze4#R^>f0}$oJaZ4;w1Ic>m@JGnT9@+>}IzjsdG_nggpoC0vjxn>lf5B8Yy2dFHeY3 zOvx=wh%IEd!ufwi$2-gn5m;3SVEafFnn;D#OA}2*j5ZGZa@+)K>0?QBpicG5-vC_Nv0NMBMK?g z{dCx)a9$0%3U}qB-G%cM?^H-3F}?zYY-QC59cTly5#7B2b^xeOxvhwS7(SM7=gV5K z^3Bomdi@}r0xzuB6J%_7{{LN#br=~DxV90%_5Zb9e<(d7@NN*m{{L>!!?=jRwT%Gw z|7*McPTBg&VQY5f)L zD@#g`#M|I&DlPh&5-fbo+5x5$gE{XKgOvY6Zs*`^cVcwc!of38ON^I3eK~4Z3k*jf zQsmu|NCOO?tn%&s$tJU}oH(8oUtMBvX301~S}T^QfUW2S&h*Ebf_#fqxn8bawoI#Z z!Dv#qXdILBF}bV(yDR+}OvOdiWAzPNVOB5?Hlxggo?XhfC-M@0YabH&F{M)R!SpW9 zJzXu$WawfnaTuDx4gpxciYc}%FwiRhnOs(BR98|ykV44PrLA%E1@I6DV(?GGiTP16 zDqw)Nt-E5F@*Vxj;>V8?i0452-;xG9jD!fR4Fqugzc%U-OMwV11p(~;OF<3eAOdRx z0qp;4qaLvoh`>@1!2Z7!)G!Vrur?6D{=YWr5levxECm7j{?B?Psc2u(j;X(_-mkv` zKe$gP_Qr+;xjU_OPIR@NgiTstV5-6uD#si`pS)p|a<$6tu6ZH$J*V&O&$_YbY@&=H z;e@vD=1g@|TuN}IrS_X`ufdH*u-}L`8hLY%ZKC5!94O>>_g6?S7Ly_=w;=|Y(nNhV zmY4$Z?(SMoAt!&9^3VH|%68Z%7shqwxA}5ECa#v*su?A#(QJ8zup7b0`;)|vA62_N zN16;>>c{@a;sgZx&P52+RTgIdd%YiUeA{L~mhb6L7C(NJKs*Q9|G2RZ|3m}^4FO#L z4_b|5c@Y600qp-i7Wfw;FlY#1{~xp($MPZqJ_6YPeJt=VL}1Vm(4fHA>G#98I-~!E z{zd(>`giN^=nMMu`lI^&`ZoPK?eD=h@ax*oX`j+QroE+|*Iv?&Xye*WZCL$B^{eXd zs-IVXT>WnK>(y7)IrX$UsqR(pP&X)lr~I+yZlCi3}7mKe59nL0Z`iWU-wia@mQk zJ_+E-6>|CF?H(zc%LA(ULh&|-1eFVEWua;_36BI40V9<2R*p290j_Lzi$?5=q8T@`9W*U z<|l3nkTSWkjW#JW0U+cv6VOA-H|smKV#fPql^+J`%Ukq4S`HdBlzal(_4r;84t!}U zYKihg2*d`7C$eMe3{YQks1#g)Ad^w^Kz-3kB?r7?v@-T)#xNFi6uK|*_> zQk36=kQX-VX-FTM)C7PI?KYE9J__{box+Sk>cwo4w&<6E{G3CkSrjs(5H_0KsJ*Pj zlx>RoAJiw6&nVmU59x93tleA5ZA9(cQ6{zEcs>_hN0~n;w^`6DW+6wJP6Dpgg5&Wo zqIo=Natl$woU%*2PPI^L&zbeoLerQvFWKHQ9gceZSu4cK>nKqimKL&c#nU5t3!BNfCBOOxx~A4}|eKqFaZ3T)TS^KG!V zRn8jo<p;o?J0^vYBW&yPE_GwUQ{txQ*Rr!<*r65-*8Mo@h#O%8BX;qN7 zP4rk|KitCH%$ZR+KdCI~a_cNdQhrD#6UX4jv8CVwm;jI%%U28MYhRnB-bUF)Rm*(U z;7H0RW%+UpG+!FWZ7#G+vBYS;b^zM{+=U7LiwF!L0=WMlz)Hs=BLWTr*#EI9AOeGn z0QUdEt$QpvB7prL+W;akxCmhXAKbdfk|P4x|FI1q0)vZyegC(lX#ZN{g{@}n}7r(m`h+!+_1-But+7zjc{ig44(U?IFx+5BQ;9}&18P4@)O;y zJ+g#?h2VGutJx&EA(l7?GM?*4#-JI?$C^uD`LRWb8%(o@JdwU2rLBw?Egza4dWmJYXbpW|NnkPdjov=7WK!J_pfBRK#6-xFD0&J zv|46;&c5An&Ri(5i!P$N)#XusPOcv19A%bVUaBXxy!2d6sf?4VOnFYKdmdhl*cVLW zVpp+$W^rQs>Gcwu=cJcUZiZ`3@J1kitw})AR+Y=2X#8wXA%)ly(bxqP{z=6t5|1V3 zL5JVq3=x7ruAZGGErys?@wcn(S3c8I(5|UU1o!x9QxJ2ty}pi;&9OuU3i3i^LHKsZ zs--bI3p6n`mr42A-equkX+!1`l!@=MQt<^=)c>#KaEEyz0;>!GT>r1K3PEuYffYmm z`~M1pjaeZAs|*3`|EsJ*P#i>H1rfmhzk*<6R*1kVLtvvm4d?&QYTC!u-&60@=M?Ad zud6L4$&%Y+2?KP`r6>(4Q}H$ptI=*&;O(x;SvUY~R7+)1MQSPkwx?<|G9`&_loE7wS}@G0#_FS?EhC6PfQIFxRwyW z{(mji7RrhUTwMgP|6g4^F*QWsT0&r>_7kB0|Foj1>WuPf{fze8t5$kAb-!&fr|x}C zXM{rdmwM_{J>@agW&7z#bgLdG)noIVX>td-13Uu38x_1qpqe?;EH^Jhv`Wit)C0=f zV5stWnW#Z7nUF!Auy_xUt+7N2oB^HUG}BTaKVte)7UdUZf=XG%)NDwlj3JSsg>H{l zwbPd~UMHZ7pWdR8om`n(W&08d{99^WUH}VCy;_1Fl&<`;Ozx-{wy-pm$_D?k^r$;1 z_}eyH+!;%}kk`l&E`Qs@&qBG`@*0bXfrLT%zhrVr7{!#_21@<@2pNX3#QA^Kj&~>+ zBCzZTVE0vQQIVeJd zrpov(E%ytHMJkwbZ=}L8(Era$4S1LjBCrY(!1ezstP~Up5m+Gvu>Y?R(3lM(unG~t z{=W(<1w}#xRtSNOpz>R%e7mB(pneHX0Drsw#0q8HBOCG&~tGrl@M^&K*qKRbh7Wz^s}G}Hd}P?r6g0MT|EqD3X$TU!>A2Fe7j77lYu^?xKsQgD!Zzeb*7 z;&?5Doe%D(u?88H{~(sK?-T<~G?*^mI_dnc>VKrbfA~QJ5P`LZz+L*Jdg?L^_toQu zQMC@*UbQA$XBMjEmZ9PLf2~zGmIo2&9|7$D{bPlkh`?Gy0Q>)1t5GZuBG5kq*#G;- z3ONyhwT8e(Q24J`-cqzr!uy}!s@|l30Di3ShpZ=iVu>T5s7`Z=V&}kQ%b53^W7Lfr zsLQzk<@W>)siP|A7+kjqc1&Ac&IMDIId#_I1gD8kc7fvvkc4*}!9}3y%@}ah*JA#? znUU?)8zj3i3hf5=Q%h)iOX;}XI!R#D!(JkkYlp*pafb-h?Po{ zagvTD=D;mQnM+taK1=<7vwY^7;2r~fM}TpnG}jKkwaM6&|0t88&-7dj_y<>6s#M%y z<{M+GY<)}Sjunplvk35L{J8)m{W?H21fhU|NAZe4YE6y zn1Tj(r%)`fVbKO>)T_bf_W#IBB8%qA?}br-og`Cu{&$7PI?N6cSWO7v`hPXm2Fij6 ztSkc9|5p}o%ncD(O$cEBUrn`vvLFI0ivafjmBkx#Lj+b60@(joQ*EFuh``Dsuo1Fb zuOt-hJJr8aA5%V|ABP``LT(^=uuFic$TrE@CNQf#V^x~wg6FZm(X1LxNtp7-qJ2Wb zLJb=%dMeqdCsPs*YNxO{(qtRS#uCTiD#-*hli1t~&Bg_|@X{>#&-X&2)U|t5xblZG zxuVnIWeamr0cmbvo!Uh*vBWbV-?5(ZIW{%dju}o?`Evh4dWrRx)MrhT9pnKU&ci*$ zZ8O^+H6BSM{R2l*;kJ-dmtl5VA-nWlE9yey#|>?Jv{QbIeh?*K)$LyCldRV#{1`6E&8 zC_XW@-st){qy2AXM_bGd5m;Ra;QD`c)dxz02&^Om*#B1&ZOjW1SX~HU|6g78fzluX zD~SO1|CK}=^Fjnx7XsM-S66+YG>E`TB4FG9#uaT|{Rj1&@>hCJ8Sf{5@OCy~KgNAV zu+8w-xhl1`)q)p2sD0wqMq|EIGcFi4;Z9b`Pn%?QT1{xVBwb1!Fr_!&I zG20`aecQ@5sK8~j875<;X@EIG;=>mFb>^F;DQ*v=2&E< z3#26C;+h9-8UD1Z48fRENkUBN1}Vl8c@Sr_OdQ|tXN&Nk91&!uKE@%l?s+&k2E9pA z0H=;%Rkm+7+6aWK%FdH4L5U^Y%2#B-^qU}$lMsg)cJ1e8fl56+I_YB zzzgi`0;{a8Dt|7PrB@FKr`xM1NMhjqzkUWg+t^9EsFYEs;bVF8`V2;SC9*@7FrF_cC#qb=xhaXeV*3dQr9x8cF$o`!;v<%ASQ8Nd22%Si9a(HFj?;>*hhQRw}?2jMy*n5ZUum5CWX z!@e?oyX;@~T?9X=E<&@~VEHkRnc$DK3}W`MA%pYJNBVL833l8@t=%&0C))(jEak6z z7K9Z*OhZxhh^lK#s{kZJR-|#Cm|M9UUX=Z;El5P<6oRso;*kng73gx8krA*Me|*# zl`CAebETngoiXTrHs$YnVdL|9l^;lwL&0Ze?UXh`o0&pEvrnbx$bnemp)DG@juYN} z+|6_3$lihbnyfK~SncfH*WkPq(Es0Zk9L?oBCwhf!1e!Xt{s#O5m;UXu>UVFzL+{9 zu$mFT{=b@Q2W3M9mKOo+|I3Rnrj7`#W&}2Z!hfAIqG5jz6mgcw_@CH3nA|VI{DqtoAh0^qxTkpYs39>L!BOE}>%(VwV?s zS#AUopa>6>X;9un5z74)!8y>*3_uY=DgSekCE(NSsbd$I)8t-qRO}z1|1Zf}Dut?L z&KuT3xh@M=6`9mBPCljXJ;Ti}m4+^Y^M4=X9kL(-YZL+O|7)~ju~>*e9|&Oo?*k-c zK?K$)0@(l8XvJc&5P?1r!2aI{NXUW+tWgAP{eMl-enb7Q>W%sfN^SWHO16=cvBZfn zjqGD;-KH_$pw8OC-A@zLpEcVL3TQ;>5%3z&r3`9JREbKNs5aD1#ny&O*{C|*V@s0? zc`}x`d`j!APkRvk8uhJT1DHejohmIJIst&!2GTON;s(?nd{~Za_R1>O&1U-$R~?C0>LF){k+LRH4~aS`E0m!LCO*h69&+8NhY_1`c(- zOdyVdR*57DTQrW3$|d7N{r~a}cbGCFu<8-O_5Z4`A`}o2ST+Q(|1TS~m@p!+>Jh;H zzv`<91w;gv4FT-`%LXkbj0miH1U70v1LyzmRkYjGj`BbC1pFELkkjOuSmKR6T8DQ> z&K*LwPo#q?(m#jJywAHQjoA<3&_9czZj@;^7oV=J?F`1FDoRa6vhyKm32f%Bs zvBcCKjois8XoKlc6{|${8~T<#d{Kdwp2%TB#9TIUf)9+ zkJC;ggqRoZNp&|l6-zt?wi?^Dk7qv!+G@N2?+>0s-5?4kWuh{90k&w~Pd+g!n-{>I z4}RZrnUjb?o`#zv>x$wN*j(H25MzjXmqdEBdoPxHqX>*`0$N)7J!;dFP1Xl+{tpdz zNI(Pz1_A8<15?#lP(&bv0QUb7BuGF61_lA_{{vIiSWrYDgaG#c5F|)I1O^5Hdj5aC za+{)kM*XUqRz9x3AAZ1xXyipWMh&jr`D4`OO3S=pww$xepsj4S;0!!GqU+JsTV#4o zKb&ey{dl(K(hsE?UM@6EV&sKbq6mk%AL2Ch%*{*5YBa$sPo*6=!aXd@UyNbrD#oKZ z`&_By!4pT1PM)4hLI$N~qtT*nb)JtU&ZjhTo)hIP9EWci^YEN(%RbL-!QpQDnk(q+ zOJ^JNM(KiSnKNe1Y+V+3)thB<3M>q&=;Z8D2r(FZc8t{SR3Lk>G(1k8izV6#t+Rt@{b`MtwzdO(t;GEhwt3FxXENeS{xDd@2%nzh( z#7h(X{|wAPj|D{pBnaU8Ujhn}5P<)dR5TV75s)B&{a*qKk`RFbK>+*zfK)UV z6A_Rgfc;+r3X%|k0YSj_{{{Dd9#Lz`uj&s;@Bi#1Gw{swKKCvNvsL)+s>*W)ypOTa zY+Qh6j+@M@5xfrVnb!ir>Q~SY73$RVrtoPpojy$Oki5w=AiE z@-)E|#~vk-hdSuf;>sBydYVjT#&d!XIZVnhF^x6E17XnLszxYXO7GRiEg zQIW)?1LX>2K#Syyf%d-v8RoH=h=3FUT>nd9K_VhB5C~xZABbwkLLvfE1hD^0VL>7y zFc1h}{~w5I#zGid-6P}2HKQZ~2{bT63=ziC`;T&&j`iLa7S{vIs&A%UQ19p}S!8+vDFb{AG?p)O>-8(whPA1S z{-4+;GjbQ1izUt!-4}0c%bD2d{7yr?f3+=HsG5|aF5_gaf~6yCopxTVb=W-k{zt@c zhh#)x5D>ui{~**dmJtz5rIKKU?V8} zbtR=}4fO#06ZPpN$SZKr`wn;;d%E{w=h9rW(O&Qsn-R)n{vl~mA~JdeTv#ByF0*O95pT5rUkj^p{8Cb+uO8Y%x;@^S0*^9cO#jHCph7t-X7Ve z)H|qWTBUNeT@&x&Tk43c44%B9*nthDcVN#=9prh2)WEs*DUGyc@qsh~g2aZl9WsJ!)r>2h|WTaSG+Rx>psqAiNfVmuoYADu6_#72d9$8M&cdDemP;sK z;s{ieEpSkR$C0iRE0)-`YXjNh_cOoovYzArl!_YQk#;Od!h-h{;h!|s|L2s~75%UD zFX{hY|BU_#{af^ozM#LPAJre!NAz3uA?Y%Z72=d$s=J|#0+ z%oOwSJuW4ah14f9nfPvpQpjhr6UEVNKEBJL3qAWPt*CXY%nhqhzzW zY$h{SDC7(A5u1`3&lNJ6>{u}yPdSv)+!#nSRv3@p=Tb6|b72Bx-YHTbuX_c`cp)3# z;ZO?Mi3}7gKM~*VQXrjd22zjT<5BXNQJ@y$NrwVBKpFD+(fHjiB|Dxe&!T?*ilE9COU z_-zg)o67@+`9d+CU=*llNGA(5n2F!&P(Tu3gR;f9c$Co$@MN>`TO102oXHo)^4a)i zo01s?}lq^sRqtM1Si4>@vn;Z({1nn^k z$Zr%VncP_XMoP&{K(X_giDD6A-M~`{fMfi6mja256(FJbbvz|sgi>skE% z4aR&*W-OnF+}C>)=mMEyb~L^&K*_|1Tne;;T)qHpRTn6EkWdpT&^A<&lFQNlpHa>( zz5jm=Jcs;>`Wf~6)o)Z^S6@~SLEqn|Zcx6a{GswI%4d}CSH2N?{@LM~AsE~NUFgNx z(QJ|Sp5d}b%R>KRpW&B%8kF4TD>*c%K^PTm+Dkqy=h9yEXk)o?hwptJtpF|1j{AZ` zE5g`Q%#J}r%?v;9@_{InKxxl$v9{%4Kq+g`8#7 z;33{*cI(qz*r?6#h7F%_(*jJOanaB4X^#dy)sgpwE`H3WfNbMXV<1ZW zs6zn`kS&wV#g8}?D0g5>#vgYnfPRjm6+i4y3fV$- zG(Vcl#UFDhS;!l5gVAS-QRut?BVnNkqYh<^VK!PEi|=#K(Fb~>WB1>(#$he_QGvJc{Hdj7)@Z#AHL|&XukmY z>1X(YLxVXFsJ3ivj|P%Cvb7x9#-Te+K#Cxsm%rum!>R_>C@kG3M{`D`;qxAC%pJ|P zF1YE!3>p}Twl3G3dfamn2zu)U7`CVL&c z*fh&E`aXM#9G_p8zM|8?(XKXDb#3;9K+@Zsunj`eGFr*MTi{8GCcf`w_Rq_^ zoqzXblNZk#O~a4by1ZcQ%Z@+PcZ&6Pt>z>m=9M(9WWCW!G6s0PUCaXtn;gmR&ZUQI z9>LmPv7bzA2vE)CYLZVNCy+Nj&=hR^ymx=y8^;W?iMt;cTdvmR{>>cQqS zJQ^J%*=K9jYrO?%qwM3>`vGl2y#&4bN0skXKBzR6 z7nMgL$o&kHjZXXt7~6|>$Jt75bea`(B|50kuIXh+Zt!Bjy4xuUx!xm=K|-*wgd&sc zJmM(GW|x_4;D|Y!xRu1b3}JYR09#-oq$+jfJ_rm0F_> z$1WZs`^Y+wv@A-R^V)HQkhG8ZLhZ9#tKBDjGHt8NUI3E}txJ;$QU2_rknR_)hqe;k zt8-ZE+vB8L=Ua*92hw?se%!#$okU%ie(N4vOlVhja6d4^i!%FCXIrfW>%j*eSZGu$ zWvgX*wQ1LF>q5$DH;mh@YKRc5{k?7qDSxc$QpeKF_ke>iP0eKX)kHh>OWUIs-Zrv%m7o=XDhket^ybl={jeOj%02XkQs6p z%mKTg3LqF3FZPsn=E*~or>By^1AEC+Q>T+{%V?J1nUq@9f}Yeg7HZ{+G2;Hqg@TG@ zp}8|ZdDg7Ly|8^5P-;+uS+CUERb#q-xYn2{*Y;&o=>TWe;mpHBK_YJ^l}e?l7>|&FBr+xOR25oP7eZDvWV06Ry+p=p{-<#2NB)p3lME3x41E(>A{pB&On>JDFpW0b|5GLhXK^P?LmPq zyI7p47RlBn^o^^1sY+v>b^P+e!d|9Pg#iJ^`1!VFRscz84RvrTxi9r35R*?fjd`;@ zpFBoGlc(%3cf4S+_j!|qlbD^*R&ujnBDT=v=G3hu?qUJEVdzY>SGhn9lTA)>VHpC7 zE(X+Aa+4Q>g3D%pHwNwhapmi2|NlJg|N2G!d3_(~{ch0yO8Z@{qTR0kN3{S9EAb&a z$OG&4bkZA~1r8m_vwNYCj;8bU$?3y~r%u`y1YZwYD$llHz;Fij$;VCui&L2=j#DkC zl{_$Yc=~v9`uM4-lc(XI(1~a$gXue$y3*Hm6~zT66_2STZr&8UF^E8&z(vhJaP0WolLk~ z)5GL`XOyA(oPxcR+e*@QSAcPbZn$8K@jK5}GU5l)QHBp3CMj>wngCTR3*1WXb7R0l z7KSZ8##XY^3k3CLFz{YK5LPsSm^=JH*mALLf!kq+$#zc=x<6$@*H&_m7lUp&8Psl! ztt9CMf<{f8ooWAH2lhYxtoG~bZzx}cKP4YBLJH6^^L%rFjyWprnBJ^p+rLUP#%!Z$ zl$@pEfvLw%z~p*p>gW{I7&Ly5-QES-J=F<*?Bt1Ka(kgYMYB%3uTiVo{nYNAuaW$^ zJy)I!$Xe`6)~+LoRMOCx;&Iu<_XZZTRWrKUE~ADWJ0cr_=%0?^ll~4EKi%TzB*iZ* zqWBS`lvgmmqE=n;Zy{M|sW${_KQAplH-$Kj)R{w^Mk<{|LQT_8#aTE?TjebzBatiD zr(98;hnw7%CKv7hHz-dk`f2@o?Q>dNyI=i1^`EE@D_>PU4&+6Dj*$IBdtMXK&yHoQ z&Bj8q1-5!HlqUVDCt$1;Ch`)@LPy9W;nYSKmzv$0X==yFzM(yD24pLCP0efb;#g)k zlVjxJaC(KMq-R&}QS#8xo;L#Wv4)Po17Ve(-c)QLz`adXDms zdtcT{zS00ynXM4Cb7}}b_X=`=>lxTm3nYss>}sT`HixA`iBts#3Toj9Nj1?mqdwOM=cl4kdjNuH)Z>l`JM;bFM%5h{e`QSxXw zxxR;~5Q?<_->BZI=vjT6_K(`1Xuk$yz;|gM&~8@0q&@)w1Nq64(?fd>)1e8h4pe8E zf$eiX`{c>V!^b9*7n>$KomH|bXN`HPXghuK%oMqaoPx&lW*}BB>kQu3`5FulZXBws z0}7|4gI}PFtG2-O#mB!{d@k2>!4x?dAyi|^y z9NIG-kS7~mijz|y)rXSgsdYQQaTgsryuwG1%kCDWcDYo(P&RAybSS)34nmmb>o zF*_2$q$uj>RsshU=-~+%|LM_#QEEPQ2cxY7PAb@g7;M++83eF$xq-vvxVymzLn&xn zsXcC(9CL|aA%z_|J%w}|IqHptV0NXuV>gkl8M6^=5FJQszG3F*Ud}DLZfn)@<&uOghV$E zKBNyxcy=Ls_(4x;*6hwA<_H29mljM|L4?|-PwyjhpSf$+J{x4ruUy1#!H4vbInUlT zd!CU(54I7w86W7AF13%0UDmFdx=fH^1)5JwlBG}YBU7KbYqmZcWNdfAa9MqN9~t}1 zT{HICAY*$k63*DC_mQ#B+%;pLjdk94IX~0+e@OYXqJE!RSH28?tlm$SJnK)&FxbOz z-+NNNfjk3~G8?Vw0Rku1GEU0g=%13#$WQw-vMWrl8TqZ}$eDFJKg{MquMBqcDYbUO|_nxMGW&v9G zAxw=v8$18MUP&t2Ic-$^LDf>uzz^<|BQJR^wg87EVU0u=JCQ44wubC%B`>bq`PSX` z8q$d-v{-k?OKq$E5H3!SKE00?3&=4bZ9XLc*7(5ukI%h5{L`mWY_A81Xqqi(RuPaPby69$dxHeGg?)YntF-y*RRa%5|7odyky~Wr}=0G8Ion56~tYxlJYH9FBMp?z?$gDRgdqVY^ zqB}`qz{1T@{yEXSLD}8fc=--IF(GPV)f1S)GL ztp6)S(Y~bpAXxssr2G{8SjkV0)WvpM=wtEF*-qx6ojzbM9#}gq_=^YHPVFIY&|7NF zYpD#Qep>2gaxO5MEptnywM7^HUR}wWX^y-iwh}5-AETKW7|pmPW+>l*9L?&Ph&^|c?*g_^J-fh@LVd1|uS7*R4iG9N2V3Yy~}X9|C#2T}AM?(pj>= zw<)-H+((<*LK@JfHgbzZ8fzKblw=Z=4Xm{PU#FZ`v_IDVg|U5 zXO6r98=$NW1gx;>u^&2=v!m(udGP7Sl2gyZNuE>g(R6lc&bnN$z@?xX*zmw-O4Ybv zR^Xbb_Z$>+s_eFt5*&v~kz2{@a7;fTWF}ox%5C(>gYNo88xU1f~B7zaR1oZ z1HxT;xC0NSWm_rh9t(21X43$lGSokfV=i`ommEt!fEOpP4(+6_6+n?V3KxbM>9R*E z()8gP1-ZmGT6!tD_o{Uxx#(|JVFh8wTDC?@yI7A^zy)ClWQFKC1a2j5Um5L`!WjaE z90zv(kHK|c?XR_;&_1T!tNws`AN*VuAF{qP1nsZkbYT082W_>oPE3b~v&}}`e3f+= zf263?Ot`znjTE+bDk(qhzY_lR>m3~gc_AQ(cX(U4#v)Ca4q0pftHB`-kfnzVA}eIC zNwW8@MJ*zGrZ(s=dyh4}&{5$6&k>>Yi>d;a6kKWTQEHzpy|n{gARLP)3~A!YpKm? zEM3G&AsFc1B~Aqc;NnN=oN+lsKi@X!V;peEzCITU^zU+tLCpTQ4%~BTpV8Xt52^RV zpR4KvW59KiFt90h0esw65#sGq~YbbaSWi8Rrxlc=;kX}qohw?kQHiHhM#j}0|OO+)!sr5ZHN48ov|HqVXR`j3J*K6R zY(yrCxX+g+L!Fx;*T5_eC;j^`X25|=uuFuqmqbXD-JLk})Q19adw0gWEUv^1yfKVl zRS7J;1r+8hm^Q-E(}z2o=v_so^YQAc&}9J?If7FC-#TTVqF>VfyY{N`0r<23&!e5K zp>-U1u#s-W+<{yujg`7`p>zAXJs&(FmIeIBI4z*t5+RV(Qr2+-*6zy6nXT#K*qc~{ ziCoB-RcIfxzoeH7iT1ykv+sjIl{!}!1s~L2AhW5_#gZ?Z&0jStCcT5ghtO?q$ueJs zorWM(;Py(?G7?&;->cmefGFu}ZYb=hZiB8L(5b*p!~VN|q)vrF!x=Z2!w|8mA^U_R z`>ty!q1xFj!_xHHNcVA8XijwGyEQ!W!6m3g6u0%n0l0>W=%dceW4rpda_osj)}Ap5TC zmOv?3eZUna@bd}U3)sxI>#+UlAw!TK)=%3&j==f}HlT}vA-sGFipp98+k~e{zHIrHhCFQ$Ni^81dwzvD5!Qq-bB!KCb>X`1;$ZeCWOC)kN*w z2Nf1j3gx?2SQ*-f1-d=^+C4=r*bMk)BXZN43v#EMot+>$YP2&^Rhv z=%x>Jwh!$w1HwjV`rQR)prcr+&h4FhKvlRUkc>CgcUxkH61&Qa%s~3ASNrQVZe(?r zP4?O}*mB)a0C924OsD^UhoZj&xBrQH3Osv%$9vKL!+EwlyP;nk6Kf5;$4B)G=VrZo z!#Yw65agpRkpnvYNN3m3p1^{l;JD87nu?=QrXwsYHpQmhxxaHiw6{QyhUXw0$-P7* zT2C=0D%#alcZU1t^0qbUov+nQn>!D9x8mGr&hZp3zkxiQ@}Av_+uzws-KPqh%0f5AR%lWo_jdNcLW_C5_BW;l zZ=n@A34~Hw${gT$8S#`kurA;_y}MeVwj`?m8&XY0o7J-FcflX{Ssnzk9dIvaZ!K6a z@5`l7yh9zy(dRShLp?AmvRKPDz6DmJ5rbSo8045lJqNj4J9!x766_eVTM%cE3uZc? zBc1I#JnTZmr}uG`*=L3x?|bHfAHw~ApUs*7?^M9=Uq=0B>YQ>?`QPoG37j28oyV)X zlbKvVCO1il10hTXlhF5j1169=fgG5GfD$rHW+s^llbOjJ2_!&x-9b^2#VaZ*q9O{5 z0?I1xDvPX(E8Z?Dy6mp^fru`v=(>3Ps=B(my6er%LwJPU&>ub@GT&GI?>hefe^pmk z{p%!Y08WSim+_1S){wFzrT9|a5jOwVg=b;CWxUNhxlOb+4_A6j?)eW9i&L?FUXvqj z8mkMNVEv<0>*se>&HDQ>w!vqCX63BQGCTi6gzgk7!5mUWDiKW&3o!o^Q}f4dLM61P zzGVNI*lCKbqTgnNfnmaQrHP-7{f{Br@%_(SVccr;&>zyf@cn=03^g>#qP@cRFe68|4+X_ z@1<|2HRR9>;sh}Nx*2;*_A=wexyrCyoMtQn=5`G3XvT6rtX&+y@qF6hR_R)l`h`oD z;B^OE{zRa2<)^iq<(>>4QgwGfM!5T0x;oqDr>PoC$Az2F!|WeDF(ZBJJ6T^*S&mUlXHmDtL$f##UgN4cA zdU(^ZsW+|eU?En|{=psnt$m%ne5+$QHFd&u8An>txFM_$&y)NAxvAl{j3doF_h=3w zj#}(eX8*OMftXhszcbo#((hXGN&K0=N)y6Y!$9~RWHZB$ z9FV(htDK$V!>#$&@-x{fGoq=k!>1u)s>bV-lGgGvIf~ygtD6ZDZb2saJ3x|&@462-etfRaXb;w_C zMIG9yYN=~LtE}P^!e&&9>LBe@p_F{QP$p-F+fgs-z{*Z^OZ2(o(2?q@I1LdAHe+XY zGQJZpQY^-3mD`4f+wz%6Mt5;0__mQMXJT@AF%+auamltNJx&<~Y2MS)cUjdtQfB|- z$Onjd(D;LKm9fKEZ8-F8^iuL|z!%45hnIrj=usy64v z4&Es{zv6_QV&JM|W26~?(urXQbcOGKm$!+5D}U0_9I8$V#qso5tB*l7HtQgG$&7F( zj@aP3jm`Q6cE)US#Kw%UUHJ)Te55}e2-{$n&8kTxgG&CTsH(2%>aZ0L-=#i089^p9 zm{s-&G~AJQOUZ~a?MbWb8{__e8Zmxi++)n8zk=PrpG?Cp%D!aE7;CX`oHvdduHqy` zODkXIJ%k1A6&9rAWF!j;r-Z$D^_$G*(By5xf|7?FO(R+m=SBbAoAL_g>C(i*&eEmH z8tt%0_|l|SDhLBKF6@Rf@a@LRT~+g?>Cm_QOu(L;I#lvWXQm{WD(+OsZSqw zEGk57|J#W9CF2uV|NB$=aq=dz?fL2Wo$!iWQ@IrcZJZNcj;3l*E!P!IC1)CvFjzJeu1!mLB6}L;E@+aRtpK(+=x#Wva#nRX8aHk7iCwo^+KQn_`Fk zImJMqJ;HZLX8$#GE-`nTfia8zgkFe0Ub@s8utS8K;-7aD%kf66R?Lzh&Q$!BN4cwN z_NI&%%NyBMIU_?6Ml`bNA>t<<=BsvO8HAB3&pQ@-O*=f8Qwj8JBUoB#Qg{F^m`_jpi_UT!1b!hhxNW{!o~#{?zi{%mwCMMLj_M)QV;uZC0*l!Jw0umJ3Grf zTlt}aXDg|PeYTRW(T>cViuxm~=+p>-216dDHc?UBRW%h&y@(R1t(=xR5zYB8WNSqK zb#g@DzZR+r>PrPJ6C&f<;>eTu#i24`LIu>ogj%stN5LBWHHF;IQT~$+s-Y(v=mUoh) zbE<%hjHC*&{ohK=0et_v%a~3h@(Zj0xV4(*|7>MXjHZaCEgqIj1#B+Tjwa`ts<_B1 z485?9AJ9D|LWrwyJe%=NtQL0#$)}*_`+#o6lkI5fZrk74HqcS7-AWT91i^|w9V+?q zUx0k^uU}>JG$mpIvGR50y#RT_A77B%b>P#%Qx^Fscd5wJE+0)Y7JLLNF2ocMK{>b8tCzKHV-?btRdZ9O~g*Sz>+CUy@T^!EiTCJnXPHO~&{C9Zy_h{@DDw z`5E(e^KE9y_`WfRZX$0WJ>+7t8b4;Qy6E)LIBw(fpJ- z_$cgK#S^23(fCe$9Pfg$+!tFpiphuK((>rEnuXym@oNF=SY5wK8A~PgC$@~mUq<;N zKg_>3wD#;-)Z5j5IjnyXhy9DXd%D|k`bNAfs*fc)9|`K$_u$-z`pvB^-3Shj-@6bM zd=R&=1eYT$-i2#cZdzF{1rO}wax+5tnYd-;Hk8&x^H7Yv`C`~f-}!tMV{<#x+$xk~ z%hvi>c0=jx=+v5d`6dyoR-UhNtRL*}Y^_2uxZH-)>}YOHW0>e%0qdo056cstVVU}PoOPPno%{<+llwt7* zV>6;6MKa^}9jwX)F&Vs-U zm5j%~ijy@SjO-e=3?@?x&$b3qpB@Lm8ScSq+Q!oE$f}taElwVf*sH$ph{u-=Q!&Jt z=dX%Z6wBH*$if`uLf*?3D*J1C+HgaC8;(>_1MI8i%ly`OR$YW>D@o^tuud>HcSE#j z^uj|)`PqUdk1uvvx^4>&`-rQc0rR>n5+QplS+SzNp`)e01M|AQE&cubd-`&jUmhX$ zM`vE3Z4W1~AK&w`Rj?si0JRvM6;nu%X24wgtLYZgu$>!Oz{WyiLWqUACB zuQ7aL?lG=4_8ONMYw^cR*Gn}pTn*GkO^G5QBncK}T0Z)*V#0jvgM($+eqDrZ{}9Bz zdx0+(L_ZcNjNNTnrMAegSr|1Ys-E-%!$->*&ci+HsA-9?Bpd+~kOoJSu1Izk>2K_9 zJq?@8#@)SbAZ#R`^GuDU6Cw{ijC3_gIm-vNOR`k1ze|2ovpZ6EQ|_L|acCZk^b+%z z=6B7{oA;XUGjA{tnjIJmEHlqAXPaY|?{BK3uz(pw zbera;2(oMp{p?c|IPAhI&Pfr5eC(0_NfJ3u z(Xsr3@6Aq;?K+N!RI?NWE5?6KGgE}>anNJ>CrZRO^IX&_>&BIzERir*K@1a9)SS_NMy27fi?^M5DCErwD=y2=nNU%Oclz?Xd}h zG`#kD80?NwkyUVAx2aY^@Trz>2Q?b9MyH7FmUS_vAC*I{7nphE21Xt^4wd#_RqHo@ znX`X1J3CI&$I|gv#ks<;%eG*8?7B!nc&lO8t0jVQ#%OXm6eq9Q85zDb2OypAo-I*e z!^wKSXRVaTgPTQ#dBr6XIn3L;O-`^lMVRI)AP%(k3W-oWXc*k_SpvnQ8$8jn&P)+1 z8h!)2+9iT+K|Fj@F+s>E{5U4N3WXHGvVG(~2qY@t4cYh53;7bEGeLU?Xe5E4NvJ{u zk4DZCgw8U6EZc8#1PV}{!qQrq{hxuuen;s4ziNEixZOBnL`E;(5zaLV#;L|c`bYXW z{Wkp^y$6v4Uq=UN3tdl}=sa3S{z!gKzDYhyK0@9}uFae!JlSkC;Bv8}0LH`SR%13foHEul{28HSY|bXm%NtV0`fHx9B$*5IaUJ+Qa*b$1 zIDQxuzxR-W{5Z>3rwA6yOL3KgFp^*eyHcXKA@I@J1skzQ9nx~o*jc1IX8IKqb7ll^IJQ zUyqdx<8i#jpzlM?lCMd|dOF)j8Wq&z{%zoaDAWb%0_Er6Sg4do%p_(vW7ggXR7 zi^0&jf|J`*h6ak+hZBZ!F&EBq_aVuc=ZM*DlCkN4n0+v1EHC`tTT_Ns<3>b2AQ>w^ zHyHAMg`unE_r6auA6-m=nIO3(WvJtry;m}5hNy#^C4;*a>^+j<-AAx@O9o&!xyTQ> zDP>51GK`a&;FT=$4u#*~$u>ZkCompvu!?rvcH{{qrM%ty=z%{$E_<~3$FVu3F+7nn2gHQ-5{3iOb1 zw{a7!zYo^G%CL+%#u)k(eT+VgNI^H#>*zk(M$e~9=zN?V@C^AG`4%Dw+(F(-t|lGk z5lqf^hOqjl=qbd*jVo2I@+%C&83NShUu(zrfggYqYi83g7T& zox(T#NvH4)e@vefOCZn4=U@Pjp)%8f|COl%^o)28`GX`rO9k>jQocB#p8LMv>lAtU zolcRLr&F2i%?dJqn@NX$l*{~$P9gKZbqbkJWn{9U(0{4vFnEt;{#vJy`7515=98*S zCV~7io6e18KA}^{{Dn>-^YN@q*CId9rW0lVnNA_|r#gkqpJZjC>_3+2SU(1{<@Na^ zokHdhbqbk3kTQh?^8IW&kqx}u2Ve!be&o@ZPcjSWYhUNE!wm}rv;myrc<=QJe{I!r|J}Co2yfl z?G&A&Y$xj!WvkaI%Jwpi!coyVIz`z|(kaR|Tc;@7ES;ikGj)oxov2fkZH7)!w&^-W z*{10fWt*x|bh31cPEoeWIz`zg=@ezF(<#a}QKu-|2|7jDj@K#5cAQR8wh1~#*~V)W zuAh$6DatlBp@~&7??oME|BFZ$8~?NZ|0eS=@Bdes7VrO`G9Kgo|INmAy#GHJqkq=_ zKTW^K`~O?$4Vd@ufDc$f9a@jGgP$RflSj!z9k(j4(< zbB?%ldyY8tk{q$=wj8nO#aUuC(O2h4k-jQN3iP5J3Fw76;?u1;;?WCo#HCwu#G#vW z#HO3XNI{A3M_(yZi3omlqf8|O{n7JfOR|?Lj3{|aZqO;TX}wONP3y#S*pwxgK+nsh z6MY6fSErDWO_noVu1n0`~Q;||6fYX$IOS#`^?)g0=Ncyfw!1T@CGo=B*x=-19%Yc|3~l! z&~02~EW;bXOk)&%5^n$x(YxtQcmwFe+y5%O{m;R7zo+o_|1hloX1x9HBbSPND9fCY zyBlT=hE?=IrI%Wh0NFM6f$3zlUbnG<P$qeY> zTspqfjz&6#%uuJ0S<1=u={31@e9tjGq*KVeTBneCRZgZyugs<6OS$PmokHdTokHdn zIhiiKJeQ8I`K9}H3Yq(K3YmjBnGPMurQ_S!X}?Y(vrngxxi=@%roFjzvDfU;DP(r* z6f*bZWLmUKq?0k4xHq~?r;xc@r;ynxWJ(FNBk}lbdWlWu!JF)osYGlgx>F&1i63oG z2%iPOq%3XAks@tHCp-x*Ke7J;-7yZY=nF|Vd;gEe|K;BQ?={|U+-O{F?1ufb8GxC5 z1n?vJ4eS<--vWB+cDjxR7y*nUzrmOPuaW!7oj6JGFzHVF|M)F{Ptvf78eHrxfP942 zOqSxk=1!J-m6E>|<&jHH=%)mc3r^^L3BmUoR)H4%WJ)m0!^kH@ODGEtF-H44ox)?^ zt5dY)$90Of{Fr=_Sjb54NlCn_j^3>hzV?jXmC9nR9j`p2AJr+I@R9WHI4$M1gce0v z;`LlKsU^8Io8BSsV)J^K0-?7{B9>*-4-0}1a?m;~%BCL@Il$+4HkBSP#HP3D6#4p~ zyj!HDx27as(n^z=I><|w;L;DsRAP}UeP2rAC9d=qN!Z5{%&XG(N+OoG(wh~+SGUsl z$b8CO9%#*X>lCf|E}f!GH%Xa70)1yLUF_-Jp;O3wyG|kVNKPgq?d6C~-zx8n!*20? zZS*ZV#XHEGb&7Y8H|Z4meIsmt8he^zQ#Sc18~;x?YKZx`^Z*si0N|#VuK!0hz%)kH zi$yS6^3OVjxBi??;jRBkry%J6i`cOCQ;yu3n8b)D=mnU%HB|w-y^Su$nO|vVPgh z)oVA@uidbD<)$t8-MZ=vev}DCti1pd%D`< z3P}pMukr#u7o`vdOhqIG96>FfYXJvKgSFEaFCG&f8embk%PK51YbY-Cee2pyTP|3- zPV5;NDslY+}qcQNWxc~1-7&cHrtKG$&33tI$^(U4UNYcUnVA*N$5?O zwVP=!OFOmFnWclZvo=m06V6hV8nIDh+v#uC+KL5jEob?|-J`cJlOl{=YgI)OT4Okk zT~azwJKc51g!9q{&ECzMCyRz|#%#K>Er=w%-CA}%FD(N+e|M(Ijq7@@pxiQ>8eV~lGeP(xdG}DsW z9?i(pJ+ifrBrWeIA&|i3hroY-ZU_NFAou6;yo3-S1aA0&kU&C0LJ|UmKnQ^lk}Uir z_vb%V{qE@=jpRpU>GXPAJ*Q4po%*V(yXu^(Q)eGNA*)hsvRa!dsId$Q5m6)$#$tqs zFAySJAl5~{0*@ig410ErbzWnw!2z`zC8*mpc&~MXM>DTF3>EF}8p`WLprk|i6 zrGG$wkN!4&KmAqu3-rD8-Sj8ukI^5YKSZ(ki_`CHfqFnm$G!rN`+g zJw%6Sh901Cx{Ge3o9RZ{NvZh1#eWmOF8-tVCGiX5XT(p4e=PpK_&YrF02!A;?qJNP zX?t}4e&I>AFj1D2OJ%?>uSl2bQl;qq89H)ibmZJQ4wl|&2C4jj)D^>DJeL|JhvXu8_nUu>?Lp-@slCC&&RpjS^%aCI4AWOSc zuN73eTCvDLE7qifDwXmDwI>G6N!C~+oz||veZQu{{a&pC_Z|%zuCQI3g8QA?1l%`j z&%nJ?dmQdmI|J4DzqONa|2OSnxPM(c0{4H^9)SDbYC~}Uyq1Ccr?dlb{}U|^_dn8l z;Qqg~yW#%Z+7`I~x^@TLe_7iI_y4Y~gZocutb_cwm*DpH%W(VtOK|(1i*UO-3AYyt za8sXxTlE~=E}n+lG?Suq9B$7XgWD5_;dYM6ar!>E9Up+(C=+GmAlzQl3%4wj=HM>4 z?cV{ny<6dS?_F@)6@}YQCew~haNE)iw>z0|-Cc0o$OPQLT5xAO+`>%KcFOwZehN1t zJi+_sztFGHzomZ(J@e!ABlN@cgU~O3h5kH!4}BN(%D2-Wpl_isL!Z1tYqU%!p+`PN z&(Tx#VS1RphW67W-AC`CchkFQH{C$nA?e>EzeL_i-bP+zxj3&#T1=#qsdREE-Ji^* zQ@No?%A#bG{i$TGKaw;kgUNwpI@_P^j~p~8{pnOXoynwAkv^M}?9U~0naBZ?l1xGB zL&;>M*PvuG$<$D;Kb48>Hz=9(U^0~&N)JZ%8I%-IAn#-*lHin7DxFFu2eR2rHnLZz zBnQ*kWHL37OGV-ar9V9Y5)EVrBlnt=B;=eO0-5)?DUjDaF3Mmw71?c2vZ#xol*cNl9hW=`7>fYEhB^NIEqX*u3x!s^-phXSla+$$M#H6HvlI@2!w$Vv}cK`TQ=wHHPSNFmF{MGGnKX(;6 zk#P3v2DqQO3LQmwbm8@IKfN#y_wj`q+)ph)w-!z=K$jLyEI^+YjxU^r`y&gFzrm+7B<8E!G+u4erTZ+?hh=m ze1|o7mk6)nueSU7tL;8*8Yn~jr8cNN3(o`E6L8OI@JbP~>~$t&v_o)DYgxFbGW@` z_xut10DQ&SPy#PRV2vSg+j_dYbGBTV&%>myE-81dqd7rQVKSnqa#6`o6e^|5a!H+T zTh~dqb(W+#8D@SR9dxsx7N!)sDNOeZv*r4fT*=SYq)GXTq=eSD(`^P(>58|}v%-v| z7D@%RkS|P06%{zEb8<=Z`fQ%f%#=`1h>kU9R6^S+9S-7A+Bb@Hx4@*3YJ7s) zwn3mfghH`ctyfe;F{95V~D>MaT&I9YOf$j{xfbR)+qsq~=}v z!ul+HO%2_kH>@O;rJykBidrk=*_YU@rc7uBAsjt;P*}L6t9pym(o7*gBTwmiNk#Dz zM7N5zA)F~{=cJm#m6}dXszWgwuT{(Ci9+#W9@NG0ma=TK&x6Q zv3f5{a}t!t=va^~FX^N#l}k!PF=46zQLfBD1lDJPTc>zIuh&`CIxCEoXBw))cy-zD zwAj(nhepnyI2TLy#^NB9%BBf6YusTjv3h+x83*P?rWPeDD)0ZO|68-KJuLVdM}U3* zMd8HwFRJ|KAu~F;zt1 zRzQG{|H&tb@I|=&@vR_na~bu~@%oN%blW!J>I@$R>ZVxG?l6n2(&ZlU8PsKs^T1qN zQDsmFH7dm>YoMLGT&-O+m9NfKtYCeW6eZ71uueKirxwcP03Eg-D zZw-f|nT+tJr#TvyZiuh_os*@@u*%r5MBAkGZj^jDmW7yMclInTp7PU)Sy_5DXr_wP z9ILzMA)uVEl#Iy;UzOaTY%>BImLNBc)WGeZcCZ?h0qs{kpsjO?%%F&S)PwPAO@@{W zEn_}!O%Y%TbUfzKVaD~P2!O7o;Dh8@&Rq9v5v^H8l8^tpggHY09M<>F(g$gm_$l#S zVpSXwHwm8=eg=Z@y6y-Z?CKyR0ttme#p+DoY+1Ten4Rt8YImg%)Zyw}X+pdZ`)1pP z*f+i|zbgJr8WwIJYZ74w){aO#&NsdeaX!c5^snzA<3Vv)o?P$F)$WiNkN0^NuXkMs zxj!hLJfr9Gc{7*Z&L-TIYDHpcf6nAib##zXo_4i1)yMM&8;e|d-YmQ&juj;xZc=nM zk1zAB5N0-?WktxfcaW1oMc`P?RuxsM>1APA@o1?wQ#zk&DbLsB;v~EWTsifHI>@1* zoXQ17ot$C(pEa{c(hhPYh<~zB0Yiy8=ZcXLJIGj2jA@mb3QM)>tm29k7dl9)A(Ao= zg|_7R3x*W`{?i8ueJ9-TLIe~sq*UuQ7zZAd!L)b4F!A@zR;CWA!>IwdGO)uU_bhd$e;O7gN;OE9|G6IN^ZqZ~ zNyJ|g?i676!J5DL1mfzJb>Zmd&B7Zu^C2@^)ye*kxCh0Iw5(CEHMI5Feg}!VN35|1 zdp@u<*z&L02p?>IUzTDSl+{ekxk9<_T5}Mz*apU_7p3`zk*_&cw+FO|h2x!Jw*T_w zla9%qwa!-Wan{e<+%@J2T~_58X}D({z6&(;wZHD#1YCmFLIlqp_*`S6Q1e|Kp}=-b z+h73c!!FFc0vkBluGAV|nrxX9Ae0FOt=3r7kYI~`MEWY+1&QtdTl4+@h63=)MgjI? z=7g@Uu26`4&)F_AZmi`hu`SrKlhp~>ExXSgFuu^E)b7*gbf;@ozLEC6p7Rx%t>-F~ z4ep*^#>L0LXC+mYEAUdfucuI&E5Lr_(ph6~t};APuT}0X)Ya-p=|WvmAFUT)=kok; z(m^wsfe7tGQIE=na&-!R=~g}V^%+hXKhCPK6?ew-bEIC9t3a!;?c`-xqIRNMFI7O- z0cn`Kgq2|?#Jy~-d-bpkOYc-^7`9R-b&4t0Kvw^K20oMJI$M4<%ywm78AvCgz-*n- zeNgN@nGqK}!xlJu(n%f6dpVa2p5X>?_GFGSc=n|G8vuf!q>FBXWCS>XGAK4!KuAGc zouC8eL*k$r^akLJG%fJpHxm(3bpi-f2BAqcKm_VQ)}+}$0vURHNrYPw*Z<$p{*H+w z0xKHPg7K&CfK64kIH7L0k<$=$6!whCw(~QKz@cM9c#}0Eg0CNt|l=Imd z|9iU|12g!#mz>RY+^wO}U;tB}hGql{`C%FVV>miA zB)sW%_iUTbc};DFdzNcbqwX1}Khv`2pZ@v_-?ejWgL(z*h?C`Nfo(BAg=ioo&sPDaS-*@eR>Oa(y${x!ID^|zi;HcUwI{s| zc14~SGd-{clb&^S2~EB&96fSGSkPU(de}_XI;V%_ zMf!3R+ZDY<+U6ep_;4(1)Z;&{ais1Z1}Wh6smRB8Y+VX0iegJvJa!t3$6R6&#AYn5 z@$Ai5_Goyq@oQosd^^YeYR;I0Fx)*8kOtCLKiplBt~>5Nc0jXXG?=@ZnWzH&_9Pab zjBp#@D{UMJqY)_P-@DvpHp$B>sP8(yWl0Sa8e>gwzQ9{wptmKH&1!&woNVO}bTQVb ztwR^ArF_=ZM|TzAh!kt8y$bB48na{ojHD9}s~xhXB|A zi7_I^M0SK2UWkB+fNlwWW)oko{l5%YKeoGP;kr)72wT=v+|bsrh1njJ zjh?oT-oelPaIspFVEwgcWq05dd%1J{hULD2N-3uJsYqqmgJ++)IHB)@a+07d;NIMG zN}{1EXq?J}xw8j0kimv8|1jGW>V^X6|7L5)zlgvZM1X()$$0|*PF|1V^N+@x_TIt0 z)4nb0_-L^AweiW|k9YfhFnGwaJ{QdwM3}y!Ouw%UUlgYUEVmKC=L5tKe{#O8rzLr6 z+O>nD#q(@^Ui{3_J9xzL@hQf4e8LJEzYm(OWA+a-J=+(QS*AH=i-W56+92+!Okqn` zK()+V-`hb(qCOui_UWpX3(oHie1UY27Va+$kf(vW(P6$RRpYXx>uWv$0n7t4N_qH3 z8ulH&KFW6OALvpTqU)b>@Xb@6S7fEZp_`?6XCGmuFaxfY^8Qc5(fMT@_MOSM@_fjan|6icrhORG6!T$fd;S_BG zr)Ph!_?Xxud`)<_@SL!Te1`lqdH#C59h_+-ZVzocvPs{*t?-df-uS`JHL+dmrDCac zBy?~%+Hjmoy&}UI3;70mHrpRd4Q>qWe{_?_;e(!yhsd(CoI0dq>EpMBhNVr`!aeut zY=)#kp>EMZjH6wl;m5Bbv3gDJk7bT+2n|1T4XIQsWq6}NLaFtk-NykH>ufs{5sSb| zV4GPP`0GNuPc9mTC0Pa&GgKVJ$#jNxk1rZWnXeReizbisY)9K}ZQHiRgflj5+6^QR z4*wh?^Pg7zu(vk|#Qxh94kgG&^9!KlEAS#sb+w0fkd3CzFxAx-+D2~ITZ59y>!M(KkkP^$;-t$yhI9Ws*i?t9otlZ(_!Xh6@0JjVA{WV%hLU#%cX2Adr%DR z8e4=P60YgX60@=Nb3)sgCInTyeo|ob7HRNsNow*8JJ!TR4!Zp0?d=t zPavE^#nK%+b#C<7=$Y8*Gh-)5&O8}AKKf*At-`pPE zvq#Xqxxyh~(AxCZk@Gp`Y5~rWz3N1{S1w)YWv?)t|F5u@9EyVo+-wB+jIc7r&LMWb zzxim!NhnNkUreBmZO}{B*=ws>adKa?M>;rW89sx)KF@gC!5-_Hozn(yYlVGana?!O zJC+B*M2W4h;)U@GHxIb+kA1lYZ{tR9;5=nEvTKNCewsY4oqN2loqL>)pBqD^E3-0q zl!Q59V;DGmgP>`@O*QcKnwOYV_Q$zUDg|&ZS2f;jYHdIcM^Up6r3ddO(`E2+*La)| zQ&+Gvu8sC=kG2+DYY8v_Lb^Ln#{qj5EZ&VpHE9OE-OeewRDuZrb85oIBf;s19O7cFw?Yyxv98O8|PqPr*u!0s}qo|BC(Y*_AIAZukqtb9TNK}ZMl~K zeL~cnkvU}cOn;XYQjB8u)ZApOJ|J=Wd8Z@<%`8o1xt$<&hO5(YC0oC)C+$UArlQl;Ye zf0evTuo#HIau8tOfAs&m9ON(#B5>;?!1_NG!bE&U_%i(Y&s)DlOD%yu3V(Koeq#70 zK7chAA{&1WxCW`lA0i>1(D%b5UWfo9u)+|Cv~`fqP9fAu zLl?|*rC*>>ljLq09Iae*hwt=RhDfjfPIdjk6 zb+MRS@|$({LP)JpxyZuUGxPDHbFyET!A281H~It*x|p&b)BJH=VqxP>eP`jLdWm4J z2K!m%qN2~U*i_B=JL!@-?hRg+cEC2fITw8ES_qhXI*IIbNM*KAanc%2vH&H4HGgFm zAty86WalK5j6EC{EwMoE4o7o2!Psl*C?aglC~+qUezd+oWUOc_1s!N2aoda+pO}Xo zc~<#h)qesy!`;zs+k~r|c%v{BLhU{6yq9PX?g~c_9TFBcx;p`z`TMqiZ$R1wRgcy5 zy?i&W)uaA@(f1uPAOfov0qp;)wra6ph`^!RjprwRRM`bqi=^atr>_<9Emgu%C#Vto=ALeS(=l| zrbd*xcCwy9Jy%onI%vi^rCwOFJ_pdS-F5DOMoO((Re70u9X`VJ?0P{7dnJ)Le@}Z< zJ|YmlPtWi&#ZI2$zw=GXmrpeb?5D#-*D`PK2}h3|6SRTgI(9WYZ_Sy3nbzRsEx7e2 z2)!h?ME#%ErLDi0D-E?hP09qyW`BGjV6c_40AGA>P+R3|u=K`?-+!N19g+}%HG;r8 zR?g5GDJ&Kf5kLf72;leM1qc2>1lAM+*#Fm5bz@->0T%+;|6Oq44@6*1A%OjVO;tA* z77=hEfcifd9QXqfSW^hF?|&QVCUm#>De;8xQPO>NsF&OM-`K|Ole$9zIG&K5K3U6K z=OhHt54o+AL2S#~0b(69W$n>`9WLIDEo@6l-QL9k9E{@H`_jY<2NYDT!Wke9o;bie zTqCW{Hsv^7SwL>KtF?w8?oSq6(ZUIPaHK;C4$A|_4^vVNcA7xM<@)-7ecT1u#R86Q z6EE)P8+Np9wrSb1m4xBIt;!zS1MVvGV`<5jtcCZ5qxau0I4#?btelH68p*@Wg)kzw zxCG;PqCJ`)YPu}JA%VV*!dQ{eK)+vmYOn60aoitOdnrdl-20jrY6UFd!14c@dfj7T z5djwh*#BK{;15J#O(B5&e@#_478Vh3A%Okg1qc2>1lAM+tp8JTCxP8RABI21wQ%1- zuJU+UcWh$qs^BL}6w7r54!QLlN?}ruxK$qhQJ1Ctd%jwo$@9G~PW4~o!Sv2h|MOTI zeBbbWGVJu+My(v|iU|m~qSgv|UHRrz0VWn^4}_zcjPOd>p+HsY6H2ir&$3fu0XgQl z)kS*H3tI!nvM}QZQ^aGFXn{~`iw4*~4|Yp>3+#E5{20QP?q3H*x)tUUy}#NUPOzexf|iNBj9 z=>i?4qX8&zj|^%$9NoWP(Dc(P&H0^@uT{Yxtmo%3*MzIb6WX(v$1#0X#2hXrdSjI; z9F$Wv!xA&8a5Rw+w9R~aXD7ti+`k?Q%9FA7>~*K>&XY~$b*Bhd_b0iFhF2tGI_W%< z(@=E4p*sE=5EgLMC51ihcIr7>^HKW_F{&+o!0hy+P1#f z&2HWL?}uG2%h9Lw;N~q{=V5)o>RIgjFOVU^{w?Wx(@`NrzJJ4#;vh33fC#K81aSPn zqN)RhK?H6p0@(j=D%_YEBCw(m!2Z9Yssn{V1a2w+Fq4+qa1+EANtN*f>G)`f-hE?ua>Z>mC# zpC?_K(6}dbS(Yk3iDfCl7habQM|bTKUO8shI9HYPs^Cv!Zlvsh zWx?fF#g5w4tC8i)jV4AL@Mq9b4rmt3-p%b?8|h4&wJ8a9rkB8Oly9`y1T;enEmj=X z2-t#5UOX;+B7x)oWxee%5+blF5WxPwDyk6+fe0)M0i6FY3pR{|2&@VO@cX|isu2r; z2rLVMF4_nCe|Hn{Yr?n4Zu+bASFL0qge&!~j^D@Ky1h}~TnP#asa7eJ^R6|YN&xv$ zxArE0%cIHxMMWc{QmxmDx?09iIrW0RYob=D&F9Virf%hyC7^e=tFOAtf2***WHRp` zI4>0(TRY>0QVEoAY!k61V0{)=6?=$HTm(87#x{k(wfHs&tAGWwv4nPch_7#6c!}$R z0^(l|MK3f3Z7>yhHBJR>Qyg^I0(h{gRJ zn@v|0HD8>q=j*CmmY?T-x@=Eja1H`2(NcmLc=Q>71k^80QwZcqT*qnbLjV2Y=)i#R z@_M7;aQA8MDX{MZ_>8+2e0i2t4TU22GUsVSuJoC<%3fs#$`;F?oU?uP#_WYy-ZLX? z^^!NlTo2^U5ZbXrGF<=jU3k-BmWaTLK>+9fE2b(?5JcdnBY^$?rbCVyA_6N00e${I zMQB=F2m61f$PxH&X%{_CrY;>1vPSaL}q{q_VjQfk$z z$~}hlI-Hm3+4aUCAK3r1cO)Dg9~ZPkd|uj2)ETLwDvL5a)q2@^g7Lk)baKfopHqp@ z%T5i1q8~mnemJqP=fQ9^9v5Ej$Lf6*OHp6A;7Jv^A#2!=7_% zYMLd}x_(WIj)tShjtSa8wRfTrpK%6mIV=5 z8UkHl@C%VF5kDmM3O@l4z3^Y~#jR`$7mn+PHt2_d7mBJpC#$lg*iVyg~)y+eNE&Blh#c8QjFB^XN_y&2kFf$7Y@eKez z^hvoQD-el$^K(Wh7Ai%l3`xP68`Uc86{xt6vyR(^aQWziUDqZ`@x2TH--EH8+X!@~ zgx2v$I66EmXuE?gQKrSvYhD7ngWo6_42+0%rKWUjhLL=g*#h(zT z#FX&w!Uu#m3+IH5IvPO?@0-qw_J#QE6o1y-^dd<7?8kGNt)&SBjAyEUXc|uUhXy???6Dj6V-aD z0{(5h(T;TSXk!7PZnwyrJ9v@dIL`+9+1ds-L=k$0=`-8 zIP06nIaycaqF31a*6}z40r{9B9+@u8g3IP})AgANE5CtG9yb*b_Xr!=jF(GC3NUnf zNG?lO#B2wTxPOs|hwGJ+Bi3M;$I1l6a<_xS?36UCBHMY)po$!yh0z%-5<1E@mKGGr zjMm=47W>06Jgo7!Y{9Z^)oc}NH#fGsEfz^Nj>;EG8UqtMH+i%`_CDIiV51!=bhQ6#XU@g`awK|h8P8TW_ zsjPT@%I*oMCv;gGuq%a`Mr{PRDJ<4x_-<6e6`w~_0lVtw%ituCZ_+jo3ox`1u=JUw zR)WBaDoshXy@LtRRPgQT@Ii2HYWLsBUXm4-J}56(&UWg>Dx_CY^Du1T={RLdT&f|I0$b7k&=LbKYKuwhGvCm3RuSMHopC=&5-GE!W6jU~ss>zor;4BE-|9|Vf@=#(# z;JP8ezW?pQCkTBHeMI~x@r`01{J`s0M&QZz_2kfjuFhi}p%78$`ew`0l|In2fP0}n z?iz;sggp(^*a_w-CdL&gsor#NrZ?L=*gMplO7^BQy{T+(I@z0sfHce$|APJhSlfCw zIqo>t*_d>tT9J67r$H4`1$E34(v?E%$>{F$!WNcpwKml^!}J|+wv$|W-V~jaxE|y% zr<*hA`wkv73u%)2%uk@Gm&OqPFQ2CCNp9Eq4xWt}$v}oD&*kTNm`OED-JSSr#r0%h z_xX;f4>oW>5tzq#>Sy_5E6MZvFhze%&_&!Jjn zot%SLb98JCser)TY1iTWDSP-^l8WFNs#?i|g|09IL7pU}TCEDFd3mT-Eb!%BFT?QA z6K=LN4vl9x&-)q6&O6SRuFT486wb!y-f@1=Kro?=jq^#)!kACZcq&CHH>;239m@qR zL2{gS7K<0lGMi2`@zNDomaE}Y+^G4=F86GM_r<)~fNkgQ9{L4$>8v{Nuq~^_H7Sn2 zaoO*Z3tlh zzc&0ZHX?8m0)h6a(_4%=85weaTIj(k|>f!w-?WdjH};dJd6u zD-d*mbe7pAK&r=B7Os|xz+V#kz%Zu|+kCU! z^yNC1z>Nu-8oP%4nI_SXJ)zz4B&ZW_96%nC8OBY8)EU5kz!RWWJRoRs2dAx{^6(Uz3uUkrVgD)Y z<&0HeIiw;b)W^cnL!cMl_#uG(-wzd}Ap&ay0qp;4qn@#ph=3mg%>EZ9Q6j!eJR$s@@HqK<`Y`;|P8Pz^ zdP>w@@3Mgy*07oc<`OWxak~-!0nVn}20w>M&f+GTzrkWDshYM7ZyaVw36cbiE0sL# zH{T&>8y&>~|I}092#Xhj`Kp#nCgt^ha+-n6mZP)lvY2!xfk}tG1<%562guO5+ri{y zDR|K`!(O*o*4~JXLNszDO3#F&Lz@LH>@L1lbhaTKBv4)o$lb+g<*1lNX3+uUbFXcW z9^5P_{+Y1!UtA>phNRgxjonX&qfdfe^_U}FcNr}^E_>ik+kL{H_siRdkJXNqjxLZ7 z7c07hE1~6{3r8jBFyOV#vAxCHO#Q0fO5N@#Z)hs3#pjorM`DYY32fzLZ-Qape@cIg z&@amn!b{C z;>qd+EIiQr|JMlpHvJa;+AULX6ciCa1eT6K8x@3ol;6b=6*~9f{D0{nVhluJwIG1~ zf3?&kmID!3Is(}LmyQ|6Km=9`0@(joOHE=q5P_v5fc<~zm|+Y=V6`B??Eh`#bwsQR zpBEmccf;dNytHGJu<7@R=-Tw_+4Py8m1;Ax!d&-rGjyR?tk${T`6i6yO@0>CCJ~q^ z)lOMAqBdb?)>J2ZLhCMp!9Om#4F1eOY#yG)Wj9>rGkdu!jJ)C}u8V~U=!mXM=;B~9 zxi}Kq#v*J<2BDlD4qb6rs+_>x3c7;G%Pq-d#|{w5$&k=`C&JM@n90vBY9===*Zia} z%W`c}6|&$bULzkXp&5xM)yzQdVN7UwDI9&_h`6xcA#Rgq!7}p(%Ox+x(V)p2{Yud! zf`1MzwO4PdZ2vg!|GkNCJIo3ZSZN60_7Fz*1q}dXbovCfwD=7&+U4`-A#Yxqq;`6X$?N1yKp%-Uvs-ELi$QIK9|vs$%V4(? z*4v1SfxOkfJf;ItmvzZb$t+9*TZ7#SzyCM&eTSJL0xJpu?EfpOI#3uy;HDyg{r{%I zjhP_=D+&SZ|0}9GP#8qurXqm-|E9u?nIQrz3V|+A__vcMi1?G@7UBEJH|ewRdi+AhAnQV$$lL}_)miE*X%?Kqw7%W^+0#4Zs9^1IURld4t;Yv7q9AMk;fUP9g z;GnZ=O_q4EOHx@ z2ZNs^j^IW~lI0*9kxN(3(zVm!hr(GkXe!*v+nNjK(xI_5auOuEWTPz^#n{j{k4%`a|gv zfonkk`~S6|hj9^sTN?rF|F?Giq4bErwIG1~|60()xQM{5jR5xlTf6>HdPLw_5a<#= z1opo%A`S{~A)g~-^n&=sWu>P@>fmcC;r2D=#trCtF!B+IN z!}RAc1=;4U0-W|TugFS%PO34tXbvXwBmS~_?5^ymHx(06i`6!4HL`+vuoh$*zE$=S;Y)n9_VS6|Chh4zEMp{oq-HO zo-S*Ro94hn9EjmO63(3;6Qc+QXx+N&4kQ1yHCgQVK>|5B(EhiqmmNkz1Xc$EIR0N9 z^@ycF1eSvU_W$LehH(&q)qw!^|J6~CSPDd7IS63?Uk+**2N75u2w?wT9rcK%Km?Y9 z06YJuoy3UvMe(HY2XHp{1^D5(7Q!!eM75m>abdiv^`z0H1qP-P?8h?9A?(N-PAQa1 zeD9hSqVIEhS8LXdC1(?41ZhmDr`KVsW8yM`DJ`?#Y<~fEG=lxcy`#}-?$J$jjuLwc z`Oek~X~p7F#QbfD9;SpQJRgpZf_OWd)>DI%KZX2wYf|YB`}~D5o%wB=Z^gu=%4%84 zE7h866+&+W?`TaDJAP2@Iyn+r=t?X0KOV;;(2p%apr*2L``?SLfMeS>J+k~nYqHq! zg9LJNp#9JBuER$}V67p5#sC!HGFYLft-bT*yIZLvtHbOun(WOH{JB&b|SD+N`Xj9Mg+2pFN9cREP@ zN#IJQHd`bBKAFi5WKwsSq+~x-#{d*^aFa#KG3lXDgWVP>lkQIr=5m?A+ig+`NZJ0} zP{d2h_HVREkRPO+fn4q=o==XtzLr8_=IJ3NrwB=2AJP4QRI}y!lw8Tr)}%@Kita7bAju_97Ycw1^1iLUdIn1aIKdC(Ff;#OWk)QRG$-!X8(WP(%Z~-7Op0C)LufA=P zc^l;$RTcSp$w4CT@ypl2!185r%;v(n6iHqF2mXF^-2b%diQ!3uoPVFk9c z36@nM|D(Bt-l$%=xPM@llS7)Y7H;&l>yf5VELQ8>v9cq8{Co?-*fD)&aRw)}4O%;h z0#!{xE4~l zn-^bsK;GM`Xx@~9rEKI(XkA(-xXFf=l?iTH%6z5B%j%L-A-~XEM175bBd%96-nN{H z1A_Sdzi#h3Ob8LU6ZZceql){QiDaf&NG7G^Y^&%EzLwc?7Wk zulXi`0IXpIbp8M9i1-rt^3BnQ$m?z<7@)+xV=*PJBB`oenbLPRT$E??e4~q7-D>iX z-}G0HIvi!@OFa)~j7_9%F7R7f6pA~k{DPo-cb-l&ZQrebqR07>|K1f5# zRlGGxsn%;nIJ>Jj4GW;9Qoi6;kt*bO7gdc0rsSg=rd5UzjV%<-$Z+YLxqTT9Z2bar=e1J^cbcfoOW(2@p%3c_1bV59%gqQZOP`v}gPx}5{y zi~hf^_j?Z0Lj-Om1aSO+E7catiU?d^1hD^KUpz52MBr9J0Q>)~R9h%3B5-{X!2W-I z@x;^+fm;cIF7a1D|NmYh3c>_=FFh}QYQ;(qtM0ciW!1f{=?qW^|Nf#nRZDryblG-# zKDt$llj*UYoC$54whcT2!5I}!k3eO4qE@KQL$snQS1TUntv8f>*iTe1m!FVco<{Kw zYFoq6JU9b7>(EU5`uK6D@5@4d&reWaR(EPTq`r&|B0~%930AeUlQUk_Ko>u@S=9D8 z%A^+bO(gI)ug=ecg{D%`vG6qZXuVLD)p=@= zXH|JdeqJiYCabmBxyQsUAtBefZ`?&bS)Gu}5`O=0fyzb^5rG?oKo=ml&jk-6in4SqQzj5J(R<_$UZ0qmZ9b1zgaOpveaTYQ(e3iZtjG3Qrj7h zUV=hgcIc~{6~a|L%?k2|OD%{u<;4rr7=tawfAWUt{{bm5JuC$&14U@iOc~##<$iRj zNO@CU9I3__=>MnT&4dI*VC^7)5I(e=j2V8xdGL2w?wTJ9UjEMFhME zbb-pRjr=GPpB6p`D}aBLKH}y0?)=ss((VPl+L)+GTqUKE_(z6K+*Yb8c_ix|*eVoSwbxh()>7doi83tnCR$k8BgQZ4TX9 zNt% zjO5SUrEEDxPZRZ~>ujCu`!CSHCh!k0L;w+3Z3x^=M})KU@VYOZlBAMyME9ySqMn~E z6;w&o`~PPCR||91MjgnpfVh5i-&H2o<2 zzzY#T1a1`s)`dEv!kHr@Cr^YrLmiuilOu;uh~ZGj?ZVN+?VNJt#LbR6M`z|xzLV5zUd{d;pQHItBhrUgN)h`w^zp^0|Q?0{D1R&rfT3G1AIq-aUwre_nx)M z*~p*!$3W`_u@Bm~&_pVEH?{XhLT_=6WBfC#K=1VXe+pzJ21{(n_hG!_mKSQG)&|1Am; zG9Uu076I)4tF~&fV2Hq?2w?wT6e46m1Xe8qT~M-i5+&k~3EvVPBJZZB;0GbvdMyKX z2{0AuCOO>%rqm~tVoe4&Vur{1YON&Ie8R}zxa|`@EX=UMqsL>_N-XZf!R!<|M?%}K zrNYsZu$5$pn@M!;*;;iDHoVmG_VK-tD0A%|6i)uiPp;r}oU%1?F#%a_V4d2pCBxCj zLB5lV%4gWrOgm;{vg8Y`3uz^`xTH2~Lffq!)Zsj~sJL}*`(wrjQfw7{{IoHjdfmTkg-_vZCru0L}sc$b}Seo z&;kND{%-*!WI+U0DFWF4S82s!u@He45WxQ50!YY$2&_^Bu>Y^pip63f0xckb{l5i} zkOdJ~r3mQuzd<6-2;UYil7FUYGT2H{!Q0u8ei-+8mu<$movT=`D=M7m!R!;ySF1Dm zvNR`^U3;?fCJ*@sx2?mp(JY>xX`u1rWEMI*=Xm0IZ9w;kr|-7X4JxqNY=X;JtV!S! zsbuZ!;{oLF-GT+iaoSyYOqRKwBp8P_Xs|(yZF9`=(s@#H<6@czbs7GysSMtjzLGRB zC8}C39L<0@oBYJF?S8rlUou4SGxc!}KkJ@_gJIAc(X!yw5vwE1D=$0bK?GJQ0yzF(r4@_CLIhes0Q-LnAR!APuu2iY{=Z5q7K?=lw15Ei z{}w<(7DQl`B7psWl~ybk3lV4mfiCeyIREPoB79O1$Q|^U_|vfYPu5=35!L7+abe41 zCJwoxyQOs7NeruAkgbD7BLCE~xnr?Bn%F&9RA$Wy5)aHdr?vaxlqxv3X?}TS^}5D1 z%FfI9)oUyx+bhRT`0^FszibeN?eDt}wj+XxYGko8al>b$uT0x6`<0f9U?l3-3r|K?GJS0yzF( ztu>3~LIf5^0Q>*q7$FBDuv!to{=Zsl7R!YQERF#7|HUyv4n$zJBG3g2|29%1!q1Vv zBQ^SV@zXcDq?fdjaC9UpYMULp>4|bx--A<@D;Hr44s)x=Y2+JzT2McBUF*q1n1<7l z5GceS)E)#S|1MFx?8vlSEf&%x*s(eq94is!=-cDH~)R`F+Ec(S5D2KB#6MxMgaT&%|;yaLj+b10$rf+ZzFq&I4pb*`2^hqkG_`{*B%BH?ERuP z>QG5aSHQnlrBH^$R2(ji?1kU~;pE$XO3MIdrcu=wjPs@N0bER#YAh=U*JKZcqj^}1 ztslao>#!T+Db;$-Py$ygU@njXS;+s}n!F7u>T1`(beYh4)?lJYYNG%!NPV^`z>YlX zH90V8^6yP_)`77Y){troVl%FU7S)czJ_9hTIQJP?h6~;frle}IT7m`b=IV4in7rx- zs~ygyX^8Gnq;t~^!?2Ml0gd?Nb<_WAk88)ke00CKu)b;C@Y9Bv)E2;cZGkn$qPTks z`42w`0+{_%4yr6J3`3_eHA^bg|NFk|kcbGZ5d?7jzeXw=i-`#MAb|bf2NWbB0&4^T z?Eh<|qOq8WfDZ!L|9wC~5+blh5Mbwjw2@;}{9)na9B^nz6&02?E2>;n@-@k!xGt!EA%fti3-#kk2iak^gL>XZMZ4gm(orWTY3& z#baj2O6CgC7tGs2LZJ_7kH8@tV5yNDRne#fwv^SDMw;z22;d|CpI_YsFzY2W3_^VK z!eW*imk3aV*Jxv)yoVwbS}TIFpq(3l0)!&pSz-yCX)dZ`cQGfld$beo{sH>`ykARY zP^t2aq|6p7e&GV~liH8dnNstfVdfW4Ko`O9e+%zBWI+U0DFWF4S82s!u@He45WxQ5 z0!YY$2&_^Bu>Y^pip63f0xckb{l5i}kOdJ~r3mQy|1uH(RQQIlfj&*jH?E-CcI`|! zIzAw3!(6RflV+;SSv$D2P%ZthmtTP&-??Y3C8q`I4l_HE>j9Y0<6pTi_Sk+(qEI*?TBj%*Zqo7>f4b zSge$mc%WT>N*jmO>}LZ`JP1yQfeNAA6tZZhLg*UGsOPez0vb^gTDx{C934xD+8)13 z^wgJCS)4A2O=b4P^@ztqZKwg~UD~7J=reG@`bmc*C1^H9wF+A|`1T0Ha9~pB0bKJL zID~dTfgB91N_>*gMRV{mx%~K0|9|6NcbGCFu;LNG@&AgiA`}o2xM2uj|G#0-V#0{P zibnwZ|BA076c7=(VF+OVzhTf~!id0%N1#jm4Ostw4-xMY7RYyK6doHc?VR>_IQr57 zalz@1+_4B*Uy%-~NP8VR_n>dCH0D2Ci~e~Gq03LZx%6~(ZKpRLQ+e9*FyHE?IP95k z4}jBJ!_mj21%?C zVcjCqSe$wq4TxFcmQ*{nv*GBYV5`wx`&jk^udT)kupXQoLWf&0UnVA#6`+e|{d6YA zWU~VJ@xiaXQRXB~(jJ4IBW*eN5!jBlVIjs5wKjjcODw{S(H=!n2IBA|c&f1l7-=|9ph&`;3czs3YHIwF7w+-wBaw{;33A;iD>`ZK){ zgAc#{EM8#W{&j7goiH$fN3pZ5vje~XH@lKBKSW@qA%Nrml~yAt4(++3a zQahfmxwJ!>hSw3A(8Ai&;b;yPbKmdK&~rC0d8JwduRO)NX9;(=U;geGdamwxEN7c5 z9y>CA;>5_g(HLZquT`rmbF1@IIC?2AYL^_MOv7?`Rhoh0WL14Vw*rg1*=eqzv(Hag zXQcd`tjH5`Syty=yu$5%a=KVJRKdyVrEtaI@aZw)y>UfVhHbdSn$%)(@WudYBN}A9AYr#wIv0V<*@byR0otL++tb$ zOLE&XOX5wfrE=)bnjEEgy#^MHW6;TVISOHS2i5|NRr_+uCJUSV+KwIWilz%@2eLL| zrHTH3Zr+;~b3z1G9s)T2UwL(c5+MRN3jyr^Hw$UZ2N76#2(bPiq32S|HJ<++p_d%%|L7ml57A$zzd(P6zJvZS{XTk?J`W6dAp(fN zwIiUf$@^9~Vm@p%A8s=ry3B_S=EHjPVV(KVX+CtA4`K76-Fz_C|9va0um6jEE3B{o zi+$rueEr{r*f&0lVG^_bg)=!#|@N0Of@ z)GnG}&X&Ns$jq!wS%v7Lk~dG?rxe}@9BE4&DABz3ENqime@t9RI4oFA&0N^LtOEL{38pxHD2aclfj%p)KLbQhXd_x79F?G3T=Xlur`@w+L;t9#@}w-) ztW-T*!WN^9ewNjsNbaOP{}ie!s{_P<;8y^V4s0@nip9RFVr6fq4%;MPQd_5XJI zEP=g0ze9hP{s6rKKkz~X5P|D}z!o|nsB?X@W$8*EABZb`io{(1icy;JhE%E*sqHSB z^U`PPid>{on(Oo=H3KtlX$L*zjlexxa~~7!F*+(#Yg2tZjfol@r}(@n2q%T~{(qLx zZ^I72kJ6u}FVeHuq2QPVBCu8w*h|j~rZ()pg9pt{Ym)lRX?& zO}hjz33dr>djJ0->;I`jne0?C_Jr&BMT9F+KWT>lg|imeBgNA{;^iN^0jJ6jn+e?J!HT zT7g|RQV@r*t*K;z>3O8|@Nv+1zTBG-uyJuikf^E6ghQ2)OQ-}hJ~M4)8^Q2*aDRLF=3tU3g+ z|F60##R4G$EhB*azh$V95fNB*2(bPiqW_J+zQ2#rUxNp{5CKGBWgxKRCJvhyHmw?f#NfN+nW?lUOK zmUC{Zkap(Jw5370v1Q;32~7rQ;s6aSuP8}ZbR}<4lokav*z6VYO#s?`0{}Afzb-IY zi6yj)+BASAjEM`ITLp_7TxMZMNukD$$6jO!yYTKdW!O*vQ!>NlHJ?5$GV3jQ;|K}AX_}XdEoxdUWqq3FjoEDS?wFNs z&}QHWPFSdSz;9A&t!k8&e4$h?yZ7NM!d|~JSn@W+_Dm?P1$$=duyF8ktqjhs&x%^z zPo7{^0AIgX11}6#?!ml5ys6m15v@!-1qqJ9m-jKT;)$ypw2RP|q_g5xdFf?aq*%JI z@*pOMdx2n4g*^r;OW1(#)E2eURJlj>U@4abYfv&);|90sK|D-*rH}u=MCgCeZ_uyO zFZpzTBq0Kbz^#lxI~4``<&ge|>VL#GDt6K@v;GeQ0K5tjbcx>&=l|VHgkKZxCm$pC((f0))`$jdXRN_Fe7O#-sum{7(xj?nZH*jv zqpA4O3|-1&V`t8tA2|^_H*)yIXv~i>cK+biBmHRA!}ec~ZWTR|``*gW^N-71D>#kkJfD&1}w-r&YtzmlEPam!B5R(m7hm_-nlERuJN5waasyHE@79S9M#jRq8@T%~)!pDUV3O_IW znD7?iiZCgh6AlYW;cj6A`494C@+tCrxnwRAIbc$fDM)=NnT+%r zlx!xM8p`#jGLiiTC6gXZrcy)c!N@*?k^&0koyCI!+- zB_Z|5E{l>$_5(E=i5V2Y0m_ic^hb7@l+<7{o6cqjB6m9|DM)EBvcse#Gbxr?F0$RA zq|<}xWNsjrjchY1sZ2VZWjtFgN)iA`r-mY1ObXzU&ZaZD$Xx~{mCgW$nQSf+Y`*oLeWiuwjsDF=``#ANix0s{{Kzz9P$z2eZo%(KOnp) zJSQB5zQ0}QAm1c^MLt5_M}CU@0QCIn?uih*+yPza#i{;Oj`g1If<;R~|KeBob2bf1 zuJh#$8q^@X6?EFOHZ5(^p0Q{H=|O|I zo^;TLps(kE_Jo55WnkCV$3ux79ZSjzy8G~@xjDVvU*)F~j_Ak-L$5;d!&p zBafIAo=y(Z88axkH1sZbho&MAn-oAl&CrS*Gbq_qHr1c$Pp2af8I%;{4Y|SFXOvUe zcLCmn*&Mt_jvACfc*AFtL)mQPh)H1$3J@5G9ClLJi##%7QJ~!E9Hji9K^fqf_2&j6 zhfE5**MJMYC=VDE$RGM!4&FY)1|`kj`x*F#MP6f4pal(N0F%i51_j^)x!K$KK2FJi zBn)=AB10wxFoYKiPzDVOv?NFwT76_dr+_r@PEV#X1Cf4{0{uS+Y4t~P24x@(?~E+_ z4rL7rd{Lm?^uxO*!zobdfKMg|Zz$IP?G<_&E6ibbI@||&4k|7{gO?Cwx!cvbkN`%$@sRuVDw7(_86T#Y4*yk&qG)ze^bGG zMXw_>tb5)_YXEA2eJkM0*nP#KL1n?)1ity*mkk>07a%{oy5|fUeDi>+%T~8&AekYX zYREPS-DwC?1Ocu56_X!EH84iu>DC-H0DSJ8U z)yAu?&W{j?S(6h!L5L}m8Y@gF)pA`0Pf{%L;ph0D=X#C5!>QQiX{jdJG1d85X*e}_ zf6FOW>gBSLh&!*Cti&o+HO3j>^mcb1P}tbsRBt-bUAB;gH>}YTFB-G~s8_RfUNC7e zZZ%tgY|;A7R@Xgk)7UtbUENbQ4O)-h+9xgA0MvudCs{Q1j^x+YlGS>%&_?-X)?|0l z;O~bPXoRu;-$nKl@eAUI#Ge+2ge%aif06tcc@wFTXUKyPWM17`ml1ym-t9TP<80M7 z7|ja05__qzu4!ect+!&pxZ5a+w$36BKteFEgd%I57O@{>)61-NIEZPTxK#^V8Nvu% zFNc|-cCXgnmRQKJ_Qqd}y!&KI@G(}U*kr9b1JzoR3)X2R`I@9u>$Re!7>z+A1Hv(C3_q8-S-YwR)u7j|euTjJ$i zx|qX zBY@&%Y~w}*Zk`U1r^I|ZBJ%oS}wu9u;C;qH5fsz6wCFJG*&rQu1*xn z!>M?}!QIx#2$Zm^vtMBiW6hUM`Q6lv$bdK-1fv{l2R=L5>1ldh<> zLLLqbDmaj{i42B0C_+stl*TLN`C*1bL3L5g^4qauX7T4(@vXQn0J^m;`pcTh31wt* z!fX95n+QYup$vQly0xf-2-AH=+^XFPD6nD15PY2Awa$oU6WXe6wjg5jd>2GpwL8q1 z(DdMw;Qj(_vOXa&-_`>`3D^yw?$lojY}m!)1hq&$E@5X}4abYs8Q$>=v$LifZRXpX zyV3?Ep*2*%spN3{G!SE_YtoEdpNXAh{<~vm^)T~&!S%7j)<=T>RCG7p(3WnuOT-77 zj&JH#En;E;vtj5=tXG*pb!!`q;=(Wl6kQyst=er?3J*8k~c z`V<`oz2AEApT*CJMRAMp=Ry`3ZpNkU)(*BESV(jj1041yPxV0|4Nd2{Gh@e&jh@jh z2(}(HUzk+kg<-tZM;rTI6r!JZ$-M?SF2uTWcJ9^rT521PaV~EYJF{cJYu#aqFjMDn;O$aG^Dv9A|BEX zgboy)I41jGBJUWt%aib~kl~Z&GlG|k_4qNZH*`Spq>ySg1?L<<(e}6P(H`w|RBF;d z%VlQ>m_jrj)5W*j+T8Kjk?|8J*vG_?Yoc4*XS`*YJ}0ZsIB)qz&&Bi%T!Q^Qr=cWQTdBN-uRL z^z7l?Zmx}V-4&=`^0erA_1AXu3YA>q49M9%xW(*=bWH|oXVfI;N`_+u?2g-FcB`b~ zr%B50v(08U;HJPX^)yP#+g+Q@j7q8d^eEXq1#6iOv6k6TS+B`q@LRdHbQO_I?p4By z=*v_#+t$!aO#Y{n69m5hK7Ee%F)gRfqrad}0c!4J-C}NO>A07z%wRb@iw{v)ni1+( zR^MG1F6H)PsqO&32Df+T?(N${*XuTJ?H|~>^O}KxQ?UlCdSdas)&Q+Vuyo75<=sF9Gm9nfK|u>@zpDbeU8AVxBlXCFHZEO!4-a8$*bmo+|Qrk&NgK z<~1PN5~yiyg(OE$sB^FU+cYsB9zKve%of@P`gU(J=a~Iqo>PHb2}3CF@{uv92PY3(s{`U$q{A<)#f?nh z(-+@QwyHbE7U$UA-xIh^T`o%&h7RYDEx0=}x_;-zDEl17-tp>nCd|G_*VaINjOwlE z+k{%(7d3Ba>3G#;Om)b{SJ%tV6lCng;Ly>b{21FEikr$&iF|(lDpsH3{#8{H5kfOd zO>9tLn=0RMZgYx{cOz+F@$foHEXy{Tu<5_+hQx;R(x!jOo{j$pM0tJM=8i}kGS z2-|Q;V%%I|wN6;ebYeU-sCll_aokS>b80<3)B-{WS z%CtT%1e41b_&Zk^QA-hE17(Pm!4ez-FQ^dLck+mPeKYMQ_H`|O_)MdljPL)SLZU=F zq-E%PX_@TC56_b@Z<8FG!e&YMNX*%(>Irin(pqZX+R|~)i)452 z%7X*tL;3OXYBh0RHd+-oNBz3EX`RZHLY;12Pv=#m6>-wnuZEKnl{nvI)-Z4P>2Yov z>n#$^HV2`{@3I$Vq(N=69v9X&Op`PDpF-yleZQX2=Fo3ocmJG*1^*8&p3E z3#>)epJKF`qgW7{ZV#!<)#M>%UmB!l3>(;lxnC+}S*dy^+KQSvIBsI`Ph^uy*_qnN za?eXsZI~mHN4NkpYgbR~7n;N1k+~kRXStflBVh(Kj7_-w6O(99YwyLEzo*IL`0-pm z3A5nm(^Lb_gSFf|3_iWwb{;sNrd;QN@u{uy&Ua27lbp)?s1Z(WGYCePL2@myV?h|W%P&iYdGsWNxlWBInSth7bZZ4-4XDx*|s01%K6rGdq4Qr zYonWP!cLxkXKOk?G*>=R7{;NXF?_>A%#@Mb(flxuiOTDscu-}BPX@6arqf(#-idAc zi+n|eZ9G3S@_b)0C&lU!h2O))%{$Js59rm&+^g{Ein8K;MUFy`qpA^MwA;rsMQKwNnUp8p0c$qXdZc!ZI+2(8g zX$=73_w)|Fs}Im-d7Km&A&U~|^F>{MG z6&_^SCxxCPSYh{7Fb=L+4dzk_jl}(@u%7d2t7_C(Z~2rK*t;sR*wxmQNLMbkWLlclLCmWB4nn zUVX1z6&N5_m^{o^Nia1O85kj(Hv+&Q51@H`!ke;={NGCSz1o+x4fHX@{5X4$)o;yd z>AF`ejrRxxjt%F+dPrp*9Hd%ocG`;g%tnH7uQb+f4_9SsH;Grv2o!sHPiwgL=Sy%C z#)pOv;T!Jd+pg%0cSwzxU~Qy*zfN(9N4bWYw`>RV}x3! z-k(sh@$fb-K-qyA2M&s#R@oua>tPIFc2F3e^O>+m!`IDGw_$n1Ry;9AM1edx}?N9(1B5TfD%%>JZ^aE=uIBD3p=vQ4+ z;a%hTxWNO4_=g(BFA6EXrVr&Cc5Y=jP01s*^{kJbnC4rkYCar-I<4mWYE)mdsL93t z-zSN_ReMU?MZZEfkS7~g0OvmCDJzO@WMTBM{OzbhL|duRjRB@~2U5EGo`DP|mM*80 zIA+eYUW6)$BL=bxHT{(!Rc1Bv zq%pI_x)8-54isP0Zwa)5j|Yx0A)RJAW2 zvGwOy^k|r)8{1$lk96e&m94VU?>LwNK`D1yORS5rRJb5OMw7LaIM2O(-M ziG-|r`YExhoz3M=RX&@`YoT)j|2zl&N({ps@K+FVq1rGj-5u0KK3_rYPoGhYnYy(K z#RpYPO?SyplNGP_YfZhUB##}lI#G)o{Jfs5={2df@Gx<0yXQ$LvevNhslG{Ns@B4mVpPmatS&fOJnFSOF-=KF ztEv%DD4mH75K%_tVh;QQkI*~b0{fQ4*8d_jPqh7-LEnl$UU-_*1BQk0a`x1MOL;>f zh2~i-kQ}={gI&}Et;lmVO}_=a(JD$VWj7pHHgqoj{qC`E!V zRkzOJ|5j@)_FLM=yq#=fta-T7^YYBUg;<;(>E}IJ@6cGQ)dT5oaiyQAj#8o8k}=hLk9m?hbti@8GPxtgX&pyb&tHC4O^M6dK%l!n5|n9HoI zaFAn#!w|gLu0`R6ol9;oEJUdm%3YetddfXw^yF*Liv}(O77l#TE<5*k+qarY@RmCT$huY|nNt5DV+wgtf)P?xJQ! zo#;uGmDXlh%dErhJeyDdsfBa)w?mTTas?&WpZ84zZlpJPO+(^Mcs@n|v99&8YeRFo znHGz%Y=16>;PV?;n<)4miy6kD_W8e4^87#jTlyG%1D!%nJts;4>#zMdTXKX6FYZ-_ z@r z6V`U0B5lZTu%gyBdH$b^8nXEmsju8~=|Y^d*riPVr;<*h->LnlmcvcITggZ9Gx(UZ ztQSK-_)3%`AU#4({hu>%n_d|L(`5ND=U9j(XHE6$jqYH5_@!#{s?TQEXu5S1G#Nix z=JZfj)`*|R_A+^s_1R48MsyGLc2CA%8Ghw}JZ;ddkB1V=0Ft4@eV(_Dp5EyPr{ z_bEA}mGafdo?|w*62uxnCHNe`sf2U2BVUAJ!PJ|~wzm8mM9(Ak{~&z|H+?=yjG*{? zeq*~E;`aGi%WzmL?3h85>yLeux1$gFJ)SF( z)2-XkFJ8yWaCl4DTyg10b6K2Phy?4CGsE%k#6*h47;W;{P-}0n5{`FgSAriKX>ujn ztXse!tsa$Z#HGdwVUWSYL#0DaH>6DdXOMRh{SNK7+FjZ{ZL^l3ucx<@uLFF3Jce~h zxUor`al_r?jfAdfu?}LE#rL6lay4zui(R}Ey1tUI^1^ZTRHNPsfVspv0AAte-(@!8 zxbl+DrK>vM64%pXuRfe=9M(bblEv13T(QA<8;A9??2cLIijBoq&hrX)e7LVpS|gCl zL9a+SP9^_R)Kt}Uw>6ByN4wqWwVou(pCe z1G#@ES%_1VC1=SPd$DkxH?A6P;v&V+FyH1~MS_k93G&pWo&;GJSmT)bwXrocnN3KL zQ`or_qSba?)X%*x-oQGYo4DpGotrFXSVf^ronC1m4A2a#0A}FFjXk-Vrb}JdH+&`F zaDW{e`J}Ya8Us7<{RgrMcDF>`;?75gu;qU*(f?k19Q%L&m41Z0n(RG0hCgAQ2nr4>V3X70VbL2Ws*dYNqj|f*~ZpmOg5CSBNA?4xMbRz z8ds)@t!~0iDJYsLtug1OE9cr2!zu?D12((PcSt7xQ|Jn!AJj8iJN*H@5kFpdyggu8 z2sgz)?>dr`s@tttB|)4i`zwzpSJULp<1dB_**&++^6Yt@>c4Qlbka@~G zAFZZg-4S33ShhNnX3n=xLIv|BYo|Mrt7$ADRj@RcVVuF_zlB^uv~Ot-X|w4!@MnWh zrM(itXX=Z+IyfWQW0KuN#aRRYP7IBWv2z=NE9ks$8c@C7hdyZS~6%zh`94nlQH?9Mka~=cly=(Ecz?@ zBu!HapqY<3tuhNMA9r|1rdx~*l*I(Q=ybU3Zmr=16Vx6<6Aeht&_qpv0S%)vGax6~ z`f@V0g1}Dp;<_Uz$kjACu|r9QuZ~ov2P6X(sVf<6m1&TSR&W1jMgNPk&PQ1=DpLcj zkZFV!rUY35xthib<73>ihAYXI04ty(^;p4{|92C80^k2Ws4b!u@?-1(cy}|!|8!~3 zt6U(qwxqCKD#O+yjY?Z!sJhq0v(-1&@e8^ys363ZHIuFQI#P>V8Rt{b*}kCLqsjIS z6-JKbMlO_0UVf9K> z5crDkANKTA4ab{bM`_NgAPl8>M_}L+&XwI^1Jz8E1M|n?H}Y@Ro@U4^#69)l1JumA z*zzAG`t^Fdc1qhuFCov60rw72qq0m2nk{<`%ybr2SSS?!sne0z=FW83_8K|gIXpBz zUUmO@1rf^x|H$Ul(~;JS$`Y7M!#0;9n=qI5_hY5(^V57T4zNlC>ynEr2*YJ>-ga1} znd_3yVMDfbHkL2s1`)Ba>T&MM!T_%{urg_`t}MW(+iSeM;;c+oE1WZn%}?qi*~J@h zciqG_-Cj2tKmRv}B#Hhn`d9Q%>JRI$*G=u8wToyUc?BtwTgYa-^gpeYOIvW^1iNt} z9Z$wnM%qZVR$_h(oA6sJt6VIBkHYDA_mWCy3%(Q2<|Y{1eQ}hd+xbvzUQ<~)rOO%> zZ?o9PnoRe2d?}~@#E~)k%P8OEhxPZ);o{*n<72twkp49sEUzgP3pw1rVV{aBu|(G+ zL3BqE_dZ1XhldIX4vzO@hzdT5EG)rsgvGmY%cj0fQAv2>D5vWq%J0MtrQ2z4sdS(j zM}o~T9NT%en$e$QoZEzU4D5;8v^&kKDwj;@2o8zZwQ{!Fv178FA8tZ3INeTjS!KnP znC0+X7W<`*6t*Wk%SL#4CU-hKBMw_sk?!sce4?jje%<`IT1u3RX#V5G20X)wqUI%fZ;le>ui6aCHlZat#?T+`@1 zbQYlIKjzFzatiyh%=AGzjux=1aG1o0MSpSlEvUPzM_{RzgT>X6CR>JYj7?S&sLi%u zZDimcUx@!|w0SrhJ1#p50#hv+kAGz+i``K%rm$@=zFs)p9&mNK9RR0R!QQkn^I#=D zrK8g86pz@e>2yLA9~!2jiqCUK(TZ$ZqmwMmQ6S{K9HG#+?rp=J(Ggs!;tjCxZJ+O5 zY;9`=(N-Meg|JQ#x8%;snwG9pPW#!0rWD`ovVQvjF8i>%pcCu5ED|A`m2BJ??L074 zK7e)I@u710Sg{nS{52KC{>TRj8b&RGWqi-`cfroeYOqC%pG+8AI8|e;R~R}hE|zdm zHY^;CwN@_kv>nGry5lJ(|1&A}{~gxu)sASlYFo85RsnuPzeWEF@C(nm?|~(ib?}*{ z+u9+Gh?3X@>8S4|m0spgF<&f+v-mha<*N4f%9SlRL&V-8W&?#9WAGphCA)3X$~sNE!?G9hDqrFHt3hNPil|gez1F>BW}~SY28|fHlO~U{scFMf0llPzMcLNJxNFD z09{Yl&~`eF{EB>+e2IL5JWL)S6%-(z`Fe~pw;#GEi)FY>DifDbCIR!GOeT!Wy-+-p z279e>Aq2tc!H&dumxP$((38#>$<-1{;s~5!^d!13lMp`@m(IkKmkNk;ZakYxB~vj6 zig#meFm7bi#wrPA5?RzNo9ga#A$B!*swb6M8H5tu9Ra92Wn3bm6gDuUiOHT7E(BTz zTt8#E2TH~>fKwMs2;G9_B$Jt_3mH)0iBu~4A|HgyF5=x6xe#1FR%H4@2_+KUiFi7j zPAzjGBbi8~kgDASam8WuEOjAtPXZP*y+lI%Fn&6jN-q`=1{bsp3~hXogis?SL^~IH zAn1-%#xNF02pu0!rl2S;a3I`h2(K88>~51#n$;eS>Ygv5WCF%4olbVQx)8H(sZ6?O zUJy!U=1K_Vfg6ov&zt}hPh@A?5bo<>%C#q*PGx5KAw;8$&vYRW$|B5Ta)uvDrjy2W z2Ld%rdsA?Br+J}xHknNJO!Yv}sqwUtnW8}P78hctWs~sfBLOIx%IHBTnbCq!B0;76 zH&y!ep9bU~!_KagOv5DIY}X2Iml22PvF9cagjo%HUMwL9rwtu*ATT9-HYT^Xxe(U% zIW#DtY@*wSZk15RK06za@9{v)j%HGc8zqziM{`1zd)!k|IF;qu(nMi)XoS?_1B@k2~eZ}33qg+w}$UN506AB;>o zd$kLp0HjMNuaZ#4fRat6Q}Im_NUgbyZ0`mo#^YDG5IP!q1E<<01l|I9=%#K5LPep+vDlT(x)3BgjrwOY63SwRoKC?C zr6mMog7MB^kOTxyLKh-0Wl9!NZK%y|I2aNZyo#pCG8X1!`cH{ zMH|N);W{m=U82pS|3!a9zfM0xKa9wM_tQx_M0e00+Cf{%f02J9Un74_K0w|??)BXz z+@{Ags9c;VfN*f(CV%8&s6O*!?wO7!Ga|TWg%w#IU=D9 zc$Yup5`s0gp`r`HZ{SZsR3AM9mylP2{E1A)dW-kiVF|HVF&r8bP!>%T{d&lO;He6e zbI=3v*;G8fUqTsC`*_}kn4ij?11<#e{K^Gz`Cmgu*!tg7`e*bH>2J~R(6huJ=%e%j+#67!d+8RMqEW0J{+4{7e33js z9wM(IC&|bHy$d3bu0~CnaI;Mnn1M&&KQoHVr*SzAQ0j!HhJ0u8!`8$banHR%YgM41pn9T}M9XskG`CCa(pyYEdVsj|@8%Zq#^<@jd zXC=lz*6+HmD>0@` zZ0sS4u_XcF!a5{X|HuLsBF8hUc=;nH90`^AL(D!Kczpa zKcK$^X8~@)?0>bs5Z?oShI@fNt$j#)5Yk_O^k1vRwWZoL`tS5<%={mtZ=?6o61|=7 zq*u^YxIN%^MCj&RFhIH=u&F8 z5>hGeji$uS%TS>$ey^g?7XPiH&=&vYmSa;Ozmw&_Rfki|M)v>8R2kSnltX?iku*yM zhhl|in{!VOOwr^K=W6=bg-D5<}XzgG=HI@p!x4Un#}3>Ki+h3 z(`}kRS5eS>MnysMXI`3&0{N*wUDBrc6BPx`AFC*6{>V==87KedPbb>`Llp(he^pV? z{DGe)+Ws#xT?+FI2qW*$@2ecC~ev`@nrA+>r^uJGkjee)TAA5nWfbE~7{aX93#?A%4U3fHv_96v^N}?C3DB5qXTdbmJ+aeW3+ZL)Q+O|MJVI=7VDvGwXsVLeuUq#WjRux6t=BX&!HdjT_wmB+_ zw#`;iv~8A(qHQx36iS}XP*JpPx{9K0(^M2~o9dvB1hT!sG(H1j%KiVZ>YoSpSQJ_5ZxE{u6W`y`EkP9k3X21AmEi|1XnIkw?>4bHl*QqFIZdFmx+~T7N3UsqCo$#dSwJHjln^Y7uH~MIT0=>qQj(<(yZQr1x zpt)W}LGx-4O-_Mc_Wwot1bv9U3Sa(4Xdg7d zN;*$^0mA>+f5xmoaXfHmyE8vyLti0k>Os-Ym#Zk+dB3Q;OiS+zq~nJ*=*v_TG+(Ns zpm}eAW`^DqNXO62(Ta+Krlq2wX$EMf=}Q9X_~~JKN<~5QZWRU1y8<**^v*y!zA2mD zp`xI9Qbj@YM1W?J9uK7ByLag^6$QsBf@VoYLGws}ra{L8 z>1_Tkswij{R1`E12WZCWm`Eq1EpeGSq@tjCP(?vAFK9{%^nj!1*@6;VmV<1L%2Xms z65a1X_+~wta}Yjv$MPy22_W5cIDlm7z5tS;LjfdBZx@IoL*4Y1%>H+gg5Uoi5VLfz`hm@BqF|K1UwM8KT$VKJkL1 z0hksL<;zVY^e+V>w~Wvy90XrnSjWZbM_mLi3qu~4h}aH8KPAS*vxyKs+Fz(BH1=aE zic$TDiegm%T$Us@C(;kQh`m#ee#nFH{bclmE-g0h_HHuzXDW&kKH%oI)6z%12-~AY z-!Bod-I_k)L$KIEAC`#NYE9oK5PW0<|6!vweXpniKB=?iaeH$$eMm)7ulLB@A}xKl zi`d&#sk71sdd{|5`YxGDY+R-9a1ndkDt)^|*ar}-snS1{h}g19-{wL1j#c_rSxn_<|@~6vac{&+PwF`Z;_3&zS)n)Ccr+ z`YL@sR{wv1y+0qr%^-iQ9Y=J)?OFzF|1;<>>9>*Th39$G18mGaBWtXIh?4)QqF4#~ zjEZ6<=zpka+#sJ;P|UQ+U#n=hL7r66tU>-tMKcEB`r21tEX$Kms%cXO`Gkt1Z68-r zwC!UminjfwilS{#C@5yykD_hdzW7nJ?ax)ZXxoQX z6m9#EilS{F49K)WxSjEo1pf%RKM=?b6uBQ|`+q4d5d8mzr|CU#?_4^UkTjh=dv+v3 z?(d&Xb|L2d;rz+mNOXU(gp*18@?*J64@Q6SE%x6X%gd!J>;w7Nmx}xGYWWq*cNg;P zddHzLk$U-RmWuDA@6Sz4u#=BSH8gUR-4Hv{Ke=xrKY=jPz56Chg_T2-6UFr-2N9zE zhDlt4Fma+c?!lbI0QVJ(<%x~?p|Rp9e%Tk1UOzT;qSp{V`g!=^z|ZxQBl#k*La}rh zoCrVXtg2+X`SKPPMWr`*$Bs1CLFzdjWdc z`pI$Z^g)Ah*8|#EE_Ec=`?{xBc1}kkZg=KNp32ufy-MeFBsa3|=}2Uh4#KOr4|h6A zyzq3CK-|s(U?8sz*c}!E@lF%C(s6>O>^%HtRRmRU2LfeX=%At#fo4+<=5{1t*_C(M z@_(Gr<4tG&7Ygw7z`ZRRG(nf62{s2c!N8tIwZOohKLicHHpTcgKu?dV0Wgs{&L#tm zs(^t#=ZpBW{&Pg#75|_;L0za#W_9_D=E&-0=O?xDIz2fgen=%7*_aogZp z2p0N7*FopI9$C)izZIMG^tb7U^C%A@*X5P%TKH| z(tb^w2sf24jO30FiXZG8BfP`H1dE+lGNMLeUgYxLMdjfGxxs4-eEDzT3 zFvuW+D|xESf6DP;=j=h7{jY6mBu3`)aNn3tlm`pNk(@DmO5{Q^*EuU|%x;OalU5OA z%Sc`riS&}W`zOk&LEH&2XwP2;^TU&a?9`vJMvq*)xors7CLhgDAQpqo8}4t;Swkhe zx~XXDaxHT4);j4yxMZImOhps7)0V9!tv2w3qov~HxF}V&*w3#b4X;Tlk1It^czP}s zHJJZDoAeX?oqA4Rudl%OzJJvILc5WEoNgvxAaBR3(|xvG6uD|}QF%N!HU^>dcHB`! zE#6o41 zbTqMdeoNYHX%9QndLPHdy>#t?; z7DQkcoM!fujBePpdF#&T)}8&E`UddNz^-tzsLQI6;&6Usb(B|C{4-cCmJkfIC_G$S zm&c-e)^Fdvsee@=cWh0mh!B0NqwG(SQT{11v)=&%YonWXZZvN-k4jRTvC|m^~a+rBPvy0=0%d?ptbd zUFND7znuwVV3{Js_(4wYY)DRAz0Wu$tQZfIHK6Djm1iv{%>L{25u$IE8CygV&2tATU;4! SxGioL#h+|aTmHY6|NjSf!Lf+| literal 0 HcmV?d00001 diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.imdb/Movies.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.imdb/Movies.xml new file mode 100644 index 000000000..9cbb6df1e --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.imdb/Movies.xml @@ -0,0 +1,6 @@ + + + com.plexapp.agents.localmedia + com.plexapp.agents.imdb + + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Albums.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Albums.xml new file mode 100644 index 000000000..09b3fcd86 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Albums.xml @@ -0,0 +1,8 @@ + + + + com.plexapp.agents.localmedia + com.plexapp.agents.lastfm + com.plexapp.agents.lyricfind + + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Artists.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Artists.xml new file mode 100644 index 000000000..03ee6820d --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Artists.xml @@ -0,0 +1,8 @@ + + + + com.plexapp.agents.localmedia + com.plexapp.agents.lastfm + com.plexapp.agents.htbackdrops + + \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Albums.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Albums.xml new file mode 100644 index 000000000..d0dc832f9 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Albums.xml @@ -0,0 +1,6 @@ + + + + com.plexapp.agents.localmedia + + \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Artists.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Artists.xml new file mode 100644 index 000000000..0247d6e46 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Artists.xml @@ -0,0 +1,6 @@ + + + + com.plexapp.agents.localmedia + + \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Movies.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Movies.xml new file mode 100644 index 000000000..f913b9414 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Movies.xml @@ -0,0 +1,5 @@ + + + com.plexapp.agents.localmedia + + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/TV Shows.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/TV Shows.xml new file mode 100644 index 000000000..19ec6b072 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/TV Shows.xml @@ -0,0 +1,6 @@ + + + + com.plexapp.agents.localmedia + + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Albums.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Albums.xml new file mode 100644 index 000000000..d57f81e9e --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Albums.xml @@ -0,0 +1,7 @@ + + + + com.plexapp.agents.none + com.plexapp.agents.localmedia + + \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Artists.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Artists.xml new file mode 100644 index 000000000..3c6382ba6 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Artists.xml @@ -0,0 +1,7 @@ + + + + com.plexapp.agents.none + com.plexapp.agents.localmedia + + \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Movies.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Movies.xml new file mode 100644 index 000000000..096584624 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Movies.xml @@ -0,0 +1,7 @@ + + + + com.plexapp.agents.none + com.plexapp.agents.localmedia + + \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/TV Shows.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/TV Shows.xml new file mode 100644 index 000000000..f9b8c7002 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/TV Shows.xml @@ -0,0 +1,7 @@ + + + + com.plexapp.agents.none + com.plexapp.agents.localmedia + + \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.themoviedb/Movies.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.themoviedb/Movies.xml new file mode 100644 index 000000000..718fa2651 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.themoviedb/Movies.xml @@ -0,0 +1,6 @@ + + + com.plexapp.agents.localmedia + com.plexapp.agents.themoviedb + + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.thetvdb/TV Shows.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.thetvdb/TV Shows.xml new file mode 100644 index 000000000..8db7aa792 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.thetvdb/TV Shows.xml @@ -0,0 +1,8 @@ + + + + com.plexapp.agents.localmedia + com.plexapp.agents.thetvdb + com.plexapp.agents.plexthememusic + + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Albums.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Albums.xml new file mode 100644 index 000000000..112132a84 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Albums.xml @@ -0,0 +1,7 @@ + + + + org.musicbrainz.agents.music + com.plexapp.agents.localmedia + + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Artists.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Artists.xml new file mode 100644 index 000000000..112132a84 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Artists.xml @@ -0,0 +1,7 @@ + + + + org.musicbrainz.agents.music + com.plexapp.agents.localmedia + + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Albums.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Albums.xml new file mode 100644 index 000000000..cd6e029e3 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Albums.xml @@ -0,0 +1,8 @@ + + + + tv.plex.agents.music + com.plexapp.agents.localmedia + com.plexapp.agents.lyricfind + + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Artists.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Artists.xml new file mode 100644 index 000000000..8494ba7ea --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Artists.xml @@ -0,0 +1,7 @@ + + + + tv.plex.agents.music + com.plexapp.agents.localmedia + + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.imdb.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.imdb.xml new file mode 100644 index 000000000..ec362f1ac --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.imdb.xml @@ -0,0 +1,15 @@ + + + + false + false + + + true + + true + false + false + false + false + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.localmedia.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.localmedia.xml new file mode 100644 index 000000000..58f96a8cf --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.localmedia.xml @@ -0,0 +1,4 @@ + + + + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Preferences.xml b/test-data/config/Library/Application Support/Plex Media Server/Preferences.xml new file mode 100644 index 000000000..f5b09b077 --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Preferences.xml @@ -0,0 +1,2 @@ + + diff --git a/test-data/config/Library/Application Support/Plex Media Server/Setup Plex.html b/test-data/config/Library/Application Support/Plex Media Server/Setup Plex.html new file mode 100644 index 000000000..20138dc9b --- /dev/null +++ b/test-data/config/Library/Application Support/Plex Media Server/Setup Plex.html @@ -0,0 +1,136 @@ + + + + + + + Launch Plex + + + + +
+ + + + + + + + + Launch Plex +
+ + From 8dacca0760531f944d01db9c4d99cdad5b42acad Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 22:50:34 -0500 Subject: [PATCH 23/26] chore: Remove test-data from repo and gitignore it --- .gitignore | 2 + .../capture/traffic-20260603-224738.jsonl | 40 - .../Plex Media Server/.LocalAdminToken | 1 - .../Plex Media Server/Cache/Flags.dat | Bin 5024 -> 0 bytes .../Plex Media Server/Cache/Privacy.dat | Bin 8464 -> 0 bytes .../Cache/UpdateChannels.dat | Bin 160 -> 0 bytes .../Plex Media Server/Codecs/.device-id | 1 - .../Crash Reports/.RateLimit.json | 4 - .../com.plexapp.agents.fanarttv.log | 73 - .../com.plexapp.agents.htbackdrops.log | 64 - .../com.plexapp.agents.imdb.log | 71 - .../com.plexapp.agents.imdb.log.1 | 63 - .../com.plexapp.agents.lastfm.log | 74 - .../com.plexapp.agents.localmedia.log | 83 - .../com.plexapp.agents.localmedia.log.1 | 78 - .../com.plexapp.agents.localmedia.log.2 | 77 - .../com.plexapp.agents.lyricfind.log | 63 - .../com.plexapp.agents.movieposterdb.log | 63 - .../com.plexapp.agents.none.log | 75 - .../com.plexapp.agents.plexthememusic.log | 63 - .../com.plexapp.agents.themoviedb.log | 71 - .../com.plexapp.agents.thetvdb.log | 81 - .../PMS Plugin Logs/com.plexapp.system.log | 775 -- .../org.musicbrainz.agents.music.log | 66 - .../Logs/Plex Crash Uploader.log | 4 - .../Logs/Plex Media Server.log | 6660 ----------------- .../Logs/Plex Tuner Service.log | 27 - .../HTTP.system/CacheInfo | 1 - .../HTTP.system/CacheInfo | 1 - .../com.plexapp.agents.fanarttv/HTTPCookies | 4 - .../com.plexapp.agents.fanarttv/StoredValues | 1 - .../HTTPCookies | 4 - .../StoredValues | 1 - .../Data/com.plexapp.agents.imdb/HTTPCookies | 4 - .../Data/com.plexapp.agents.imdb/StoredValues | 1 - .../com.plexapp.agents.lastfm/HTTPCookies | 4 - .../com.plexapp.agents.lastfm/StoredValues | 1 - .../com.plexapp.agents.localmedia/HTTPCookies | 4 - .../StoredValues | 1 - .../com.plexapp.agents.lyricfind/HTTPCookies | 4 - .../com.plexapp.agents.lyricfind/StoredValues | 1 - .../HTTPCookies | 4 - .../StoredValues | 1 - .../Data/com.plexapp.agents.none/HTTPCookies | 4 - .../Data/com.plexapp.agents.none/StoredValues | 1 - .../HTTPCookies | 4 - .../StoredValues | 1 - .../com.plexapp.agents.themoviedb/HTTPCookies | 4 - .../StoredValues | 1 - .../com.plexapp.agents.thetvdb/HTTPCookies | 4 - .../com.plexapp.agents.thetvdb/StoredValues | 1 - .../Data/com.plexapp.system/Dict | 1756 ----- .../Data/com.plexapp.system/HTTPCookies | 4 - .../Data/com.plexapp.system/StoredValues | 1 - .../org.musicbrainz.agents.music/HTTPCookies | 4 - .../org.musicbrainz.agents.music/StoredValues | 1 - .../com.plexapp.plugins.library.blobs.db | Bin 365568 -> 0 bytes .../Databases/com.plexapp.plugins.library.db | Bin 370688 -> 0 bytes .../com.plexapp.agents.imdb/Movies.xml | 6 - .../com.plexapp.agents.lastfm/Albums.xml | 8 - .../com.plexapp.agents.lastfm/Artists.xml | 8 - .../com.plexapp.agents.localmedia/Albums.xml | 6 - .../com.plexapp.agents.localmedia/Artists.xml | 6 - .../com.plexapp.agents.localmedia/Movies.xml | 5 - .../TV Shows.xml | 6 - .../com.plexapp.agents.none/Albums.xml | 7 - .../com.plexapp.agents.none/Artists.xml | 7 - .../com.plexapp.agents.none/Movies.xml | 7 - .../com.plexapp.agents.none/TV Shows.xml | 7 - .../com.plexapp.agents.themoviedb/Movies.xml | 6 - .../com.plexapp.agents.thetvdb/TV Shows.xml | 8 - .../org.musicbrainz.agents.music/Albums.xml | 7 - .../org.musicbrainz.agents.music/Artists.xml | 7 - .../tv.plex.agents.music/Albums.xml | 8 - .../tv.plex.agents.music/Artists.xml | 7 - .../Preferences/com.plexapp.agents.imdb.xml | 15 - .../com.plexapp.agents.localmedia.xml | 4 - .../Plex Media Server/Preferences.xml | 2 - .../Plex Media Server/Setup Plex.html | 136 - 79 files changed, 2 insertions(+), 10673 deletions(-) delete mode 100644 test-data/capture/traffic-20260603-224738.jsonl delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/.LocalAdminToken delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Cache/Flags.dat delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Cache/Privacy.dat delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Cache/UpdateChannels.dat delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Codecs/.device-id delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Crash Reports/.RateLimit.json delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.fanarttv.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.htbackdrops.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log.1 delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lastfm.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.1 delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.2 delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lyricfind.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.movieposterdb.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.none.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.plexthememusic.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.themoviedb.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.thetvdb.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.system.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/org.musicbrainz.agents.music.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Crash Uploader.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Media Server.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Tuner Service.log delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.imdb/HTTP.system/CacheInfo delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.localmedia/HTTP.system/CacheInfo delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/Dict delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/HTTPCookies delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/StoredValues delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.blobs.db delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.imdb/Movies.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Albums.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Artists.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Albums.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Artists.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Movies.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/TV Shows.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Albums.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Artists.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Movies.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/TV Shows.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.themoviedb/Movies.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.thetvdb/TV Shows.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Albums.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Artists.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Albums.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Artists.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.imdb.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.localmedia.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Preferences.xml delete mode 100644 test-data/config/Library/Application Support/Plex Media Server/Setup Plex.html diff --git a/.gitignore b/.gitignore index b77366ad7..15eb33627 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,5 @@ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json # Finder (MacOS) folder config .DS_Store report-prefix*.json +# Plex test data generated by docker compose +test-data/ diff --git a/test-data/capture/traffic-20260603-224738.jsonl b/test-data/capture/traffic-20260603-224738.jsonl deleted file mode 100644 index 3c624e778..000000000 --- a/test-data/capture/traffic-20260603-224738.jsonl +++ /dev/null @@ -1,40 +0,0 @@ -{"path":"http://localhost:32400/","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/identity","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/library","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/library/sections","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/library/sections/1/all","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} -{"path":"http://localhost:32400/library/sections/1/onDeck","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} -{"path":"http://localhost:32400/library/sections/1/recentlyAdded","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} -{"path":"http://localhost:32400/library/metadata/1","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} -{"path":"http://localhost:32400/library/metadata/1/children","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} -{"path":"http://localhost:32400/status/sessions","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/status/sessions/history/all","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/accounts","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/devices","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/clients","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/servers","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/hubs/search","method":"GET","queryParams":[],"status":400,"contentType":"text/html"} -{"path":"http://localhost:32400/playlists","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/butler","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/activities","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/updater/status","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/system/agents","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/system/settings","method":"GET","queryParams":[],"status":404} -{"path":"http://localhost:32400/system/updates","method":"GET","queryParams":[],"status":404} -{"path":"http://localhost:32400/statistics/bandwidth","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} -{"path":"http://localhost:32400/statistics/resources","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} -{"path":"http://localhost:32400/diagnostics","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/sync","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/sync/items","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} -{"path":"http://localhost:32400/sync/queue","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} -{"path":"http://localhost:32400/services/browse","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n\n\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/media/grabbers","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/livetv/dvrs","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/livetv/epg","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} -{"path":"http://localhost:32400/channels","method":"GET","queryParams":[],"status":200,"body":"\n\n\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/player/timeline/poll","method":"GET","queryParams":[],"status":400,"contentType":"text/html"} -{"path":"http://localhost:32400/player/playback/playMedia","method":"GET","queryParams":[],"status":400,"contentType":"text/html"} -{"path":"http://localhost:32400/transcode/sessions","method":"GET","queryParams":[],"status":200,"body":"\n\n\n","contentType":"text/xml;charset=utf-8"} -{"path":"http://localhost:32400/security/resources","method":"GET","queryParams":[],"status":400,"contentType":"text/html"} -{"path":"http://localhost:32400/security/token","method":"GET","queryParams":[],"status":400,"contentType":"text/html"} -{"path":"http://localhost:32400/downloadQueue","method":"GET","queryParams":[],"status":404,"contentType":"text/html"} diff --git a/test-data/config/Library/Application Support/Plex Media Server/.LocalAdminToken b/test-data/config/Library/Application Support/Plex Media Server/.LocalAdminToken deleted file mode 100644 index c67cc42e3..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/.LocalAdminToken +++ /dev/null @@ -1 +0,0 @@ -local-836a1042-dae9-404b-82b0-e1608e98ca67 \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Cache/Flags.dat b/test-data/config/Library/Application Support/Plex Media Server/Cache/Flags.dat deleted file mode 100644 index d937b77779c1418f07a127a9e2b35526a848916f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5024 zcmV;R6JP8(JAsRiUy2KqTyowSagqF-zjmM(Vn;)te0Rqb(x}?r(#66)T5aX8Yljv5 zzlxmkgLOMa+0j|Z=_?_CI%&b%kIjIHEuF{u4sq*bwt#1G7>zkYOUd*fpGcQ9w_&)E-bKq( zi@O(dJC)!8HQ>aNU_fEY~TpOae@UJ1V!Y?^A zjxdK*f1h-6A*51{qVX7^N*J90E84~z#lrT}`(`aPH_U1)w9D*wx9y2~K_mZkIxJ2m zQ#rJ)*W=D2F%lk#DkK)Ju=r)wCOXOnU;cN{W5k<_j>4LrUyqMcs~hDX0lvIODQj5d zDVL(~=}81TjfNRaUktylnucPU&3b|eVEJjXc^pt8_8M!$HGqw*e!kO=%Y_RLcSddo z#@TdX`E=Bfp4X-1bN~e!VEZ!)L~nKnDG~0Yacqj|!FS>-bR57I`noozwqm3HxnQTehhEH{1<1JWWD(*at^;1aQG0X;2Q5 zW8B1nw0#X>!Y-of@@{zpKzk4!xZ%vfHJ)W_M9NNw5FM@@7|Yp$WkQ#M2s$oZjtKRT z-_%Q1El;K+W~857RJ9`9Ofm|wH9p)?QDPs0tfMjXK1a+6vzrv+!0PWUt)|v;pT!HN zZ1h~Aeu?}SjmSNki7~ttTLG_cUtVh|_L7WDw)9Sv%z}I3zRo-xbEI@j4psWf=75v# zlyPt@804?=;A9oaarOPVh+5_9(z37_>!iVS2d@haOg3^ZRXzvh1p+c1XJHaXG~qws z)k9HI>4v-KXqxjwG`WU%jqmafz7~lK#qK_{q5KHkOj%Z1OBJlA!Tg^wOl@}f;VGH{ z5n!0V5Eu~R#MVWh>tAui=jARlk?1fM^{e0)d}F;fn;0Q2n9!2L0bK-_ko^gQ~asf%HI z#D#9chAmlB6@p7#EsZf8^BF56veNzq$_>_XBjZQ<$SZVVOHn_$Y0%i1FxrKFlfuf{hds zcmBH#j-IXX(brYF<5=44KIJ#ykGQ3p+-h~ZLx_IiC@@S>v^w{Q*(zr9b3VZ7tl)2 z6L?p}4NI*%K=N0mfr=~zBZso6vsbq}U1VaD(Kn9-*?p7k!|s!nBHj2J1wh$LE0%Km z6s?ih@tTPwf^E?=+EO>jy&~FRT-E9H98n7h80NFc8ume$!ZdfNn9<#)B6jR_aEj^D z#9;!X`yo}!+wfU&MP_}ZIH4u5-5yeg-x8WSY?lIkdcBuFLHnW%j)pxI(PfveTU_r% z8$Z=qYC~G-grzW?v%g%w{uN0j% z7qNS$K?jaF^iP-c1k@q2uJ-wSXKXLrc^ms};Ny!J*U?T8U5B9oDHPcvk_V;!a_}oJ z^j!U59)6$})5Hco#nxBS`!ANFyD0ut5s_7M&@Eb-Y8q^E5$e%8dKscnX8J(UCbO3w zMz^hjx?#+80wfhPQ}i+jR-v?Q^kLxTH$zwmy!n&53{K&%HR?=ZcG7dioJvDtS>N8Z zMj4B~m)rHY5D5gq=}%Rx_{(#3bDJY3UM!-=a(*&+y1lFp`lTW}IyjrDp)NnCWvF^$ zVp7|aM?XcIV#5)xiWb7_Dbkh6nr=+kW}%U0)=ZBG5@E20%}u%>1P?CQ2m7}Ta(eed zVkVK03xS|M&mXsldat`o8$F6#)s|4l+|nS5{id;mR(6ugggQv|v^fW;An=h&+aj4< z{^iWj9^~yVdyM{)M!MRm;=AQy8iI1_q|_urj-kGw1r56OkX6{zfdk9&kSwsN?Pvw@ z*ymRn>*r(~G_yKYDh@zpFb-_*6vBWm5xL{{&*JjuCy8wi3&vF(#Bh`%7(6YkupumO zc=Ln?TwGhH%6P|S-?=6)sL%RKrGR%PMeoogzB_ZJAqQR1Xc6>INUDWL#k@jc)&#V5 zGnFd?FVv>JmU08BDCm%r1RtgZQo9H{RXbl`#Zn&=Vx`K{QCMh^wi-~(L{DbvB#qZ@ zT&LtlO4+-wXfWW{9TnHdD`j%PsRwQF(<|r^Ojs!Tvtt+lMIFp_2<_MhlgQZqv zA_xGrfIup00}yJLgb{QYt!VMLU!zmf?zhkQWz0Q|x0Vni^c{~#%mudNe&PI$`*03AzcZBkUznnft`D#B_0CB2CQp^DvKDx@+1=-RcKBK2B-z~ z#nfNNydBExj&#~W*`D@2^Ipb^42AaGVgkf|6Az$M62@zEY0wTm<0UR5^h{6#;^snM zzAy{xifuhjjBYfa=H+XL%e+VJ&>&k>$f^4;)pM*yPWbWe#io#@R|5=3*ts@`Y=Fit&KrJ z^HuaRZ5C>1Uzy1;-7cYnj4a?PMP=yS?Jq_BIzY>~yz&{n_T~B1YMjejP zwN=AhxG_5l|9&YVD`pmZ$Bw{@fjng2S$DkPBqxFRIEHAdpIt~d(lwFtieVZF)HDM5 z6&l{A`2#~cFA!AB7dQq&CZ31gHh(iSOEF`JAk}8e6BG2kuX52B3s8btjy@&)rysWt z`EUDe`qUuKq9*s>Anqdj36H3GYDnKpmVlus;Gk?$MA8dd-O7eb(&B&@0{tUbC@1kT z&m&RI9wo-ndo{HG$@4N9x$^VdT5+h`@^YYctllI(;q&qb&!!P8$pEXZEMWw$Ch4=x zEKsmBe7JH`7Z|Pwtq2Skfv;{(`MOg~6>+y9q1`U^!0LujcDr_~FSg^+OVRd~hml=@ zW79lf{jLQmzT;_0*mR12JSf|xGzVN+V_LQFy3ii2{^oc}f%=-`2ibA41Cl0zoq#y% zS!CK8iqW5m3=bC|$!s|4t>bd9QjE~tCwOZySEjXZWdIt*eaSs!C7;@e&<&JFHs;GE z)^0(yv*pGn105rRdDqh~z};(r3?6{a3#f!d1}BFs>BB>;O889fTvZN(nIz_j*|NnBu-EJBv;A_)FW16;>Pn>IDM{p z664wUnd6^Eag8Xv233Q^ZNRNCN>q2H;o5ozdDTKT2<-w8!({uk2e&Zb1>hA}#{lMDVO1sys-g z4%Kp1!kF|LXwtZJ(hso4U!AU_)Q(5`nsl!z(vsd#pv6I{yvV0QOqzKA3+*ZaG=VC(scemP`h1vtVYcknt(~4d|dwb#+LHsQ*99i z#_fkuf1UBso(Vtxz7=ZYF#j&S+$L3K71A@$s(1BqevmY1de}4QVb+6)WOiBh z@lZ;=2LYM&xC*owyV@aCf>*!t0~T&#P2mmwK5?I5lz!SP%L7(}di7yF(U;zHM#787 z3PST1a7b7fW)^%aZj#JafGjDpA^0EEj)U5NMh8BQo{!k8%>{OA!W=~j#hb2M7kru7}@M-;v>29+ujdHZJU`q|>gwv=cT;8`W^IV*5 zDj!7APIL4`fWF_4B5mCnD^JE2tH;*}65vt&z!ywodsu0wm6|F$aaV-z4*uCD@tiX7 zo-4)fq2i8bO4>ORkUqD(1YyMch=yFEla`|NCCZ0JbpjN0Q7Su4y0 zgc0e6m2k9X$D($f7V^P@$BzIsm@^e3l*S#k#vNJuo7}q}DLaW(2?c@yw6=xiOW3Oq z7~q|309=^fx?8M{Sbc=zINDRC=wM_PUdOJOdqh)`(antQm|l^R>oxJdYD*AGfn|aS zK%ef9&pS@s##uiOio(QF7d^ANV%>ZgU%pvDuM;Jn;pmW2mWg}rG^vzC>NmcQiIycM zMn_5Yh~+)R+z~fAzeVi|5a`h3sV)c1HEoxf&d+HqjIO6-djUQ%?LGrZ+>3Hcxrwgbsz8f z-4jK6(tbP}+oxVEnoV|nsaN-xe*9S@yY##3Nf=X6cuw<0G%fGhn}-+kZnw_m{n?m! zYx{d)wcQ^5CvMW8zu{fd8vz(9B}<#2HFp{7ovD^AO8 zX0viqD#J&t^t1pV!Qqpchbnn@nyES%+Sl({zN%Lle6PoQtF?O0lG{8wYv!DMm70WE zlm$h5Wdb_BKc*m*C+Myu^B3nh^4qt0~ccqS95eY zcl@PAz3i_q*2j*)8))(D7X<@6m%}UJ;@g(;&WmApEMAzh=eXk&G)k%nZF@AGRU8VmQ76nCPogvwlSI)l4-s{s*e?jrv zA^3b*QNgV@(z1DQIBF}5QQCzzHm_Ym~GR&o#E(CZOSakb>)+_8l zhJRCmHj82b=aUq#0s0}WjYUHeztKCo@A{_>#${o2-h2LR!13KB$`gAbteP5BrRD?a zb(o#H&+R=O?lhCF{41J)sxLXfAbVm3f${6Fs2&ivbDFp<9rM*I{fuu#ijogX7-A)< z;aI8vgAIk*`aha6RFo>(ifvD*n8W*+b_g{>A(w*M!q+QY#1iS1M-b$+2L4MvR(skl zKo>fWl4*EovO#PxhBrXrg!v^HY`)K)U%|E$|9=ZYpx2x&Vi=xdK5FNECb=^4dCibs zsJi`(j>xS-7<2_47c|3W#>?#CW5XdKKro;w)T3b@hVDi~hhC`JpcV{=L~4=zJ@<@- zBn9xwBE!f@wEL`MR7Nr{=9UQrN4;jAuE_E}8)yg4TCVSue-1`5-a3MU>j-dsDT5qc zjTL z&}0Q;ZP$!KK1GsDi=@d>hOf`ryC&f8kmoqOs$mAd+UfT{1G)aXNU>YB_4*Zt|FuH= zS?1i)_o*jaqRw9(V4os8I)=1kb^ip7l03JfQ=2eH%(YV75vQisL$`!+7IshwYaIJ& qdD-f*pfm)ZDe1v+D!lG|y%H#jgC&=HN*n?r)UddHn2Q^Lttox{PQHEs diff --git a/test-data/config/Library/Application Support/Plex Media Server/Cache/Privacy.dat b/test-data/config/Library/Application Support/Plex Media Server/Cache/Privacy.dat deleted file mode 100644 index 98de206fa8ce5ccaa5bc27b6db72270748f169bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8464 zcmV+rA@ANfJAsRiUy2KqTyowSagqF-zjmM(Vn;)te0Rqb(x}?bxfDHO4SYJ~cm`b` z2ab5ueV{Dy;L>_?(i5W2e=S!v^e_+sdL>M_Er7{DA5?BL?)dp&8*BjQ5CKXx8bH9+ z=8;=@_?b=37v5wt79m0X^VHk0kh!l!_HYxFs<4CNC%%r|ZSYodmEkko>b>hZn~5Vy zHkbHtR}@NvU1$vHXli058iar`JSyyH>@idCK0hR-KAYtUyddSnl-3O$&u3{}hZDyv zI4&xiu`^Ak{qF5DhtJJiuDnuVs9p3~IFQ!0} zAV*Lvr|BQk$WJK_iP}&5anC7GiCH3K@r zs72k4S4unkpqYn+WF9jjVTA>E=reb_Jg@D5CqQcI4(y(nB|Y)y$iWSu;F_nI%(y%K z%~}vczDMy2+O6~9qioab8Z7wiukyp zE|`W^9Xw}rVvzl>=4O(U~gnux;X6r!QWz#K`1KaE!|gccL7jUn9YRi=>C zK@;Rf>I<$$@K?&e$kUL2iYo#s3Fg;FQXeOR>^%P}bE=dPW37RPNg|f~a3ya)o$tk` z%Fqa%&D9TJ{v>xg9&n?yoOZ4AxoM*$uT?=RhOI7%5e?GUPl(M+Xirk%SGLJ9iRo&= zfscg5YUPExJ7yY%Ovy(uVXG&tp>LWIV7pLtMr!mVrXeC|!NcDs@HJWj=s{=1g4se9 zA#4BINpEB1S7j<1YzJMs-W%hHY$teD&XamneEcn;T^*(ITj?*Uvs9<%ITZh^^~)km zGoS$1l(l+u8zgkltO%|dKC^V{B631XFx_6sl=fJ*6g4os(T1Z$($wZQzyGaKxVZ-E z+`(cJ&Q>SLp9rv(WK!iyz7?VOs`@EiOva29Gx|Qajc=X>9u=W9m2z-cQ#F~|sPFYEGHH@EFmRIX?ie031AJQ;E4I~_7zbafG zS%C(vm&*a$%uRMkEWe0ckxTC-fGdJ&h1u~tc&rWnW6z@B7wCJ&y?cl2F1&G-j#C^4 zUSo)Zq1xx1(8UgrJr4F2oue^vLopz)`DSReMKSNAJ4O(-ZYayI2pnI6NdsV`yZvQ{ z-d=8bQ&TwZ75Pe0T3g*SxST1tzUq|OYu(j7-HJZrlTT1U&|WsE{TSf07AeD2_|PLh zGSVsET6X{avJs6eyio3xij2 zFQ5X+4eAg#MX}Du5bt=Ki=x>{w~TLMK^$s@z#f*bbv62JbH&VIEvn1_xVOXGcB-DncEe{@{W${h#=`4mrx-iu3TT&JK^77 z{TES{+5*KH<@QpmGwb=4qqn-m)LpP)y{Y(gxXci{`KaI=w-bRtgm3i)lt~4@v*r|dVAKU5WyEAwQhAMoMBMc%>g=m{A zCLgCf1JsCp0}Wh9o0v_S+uegukmU9wZUME3WqvSf0r)-oPV_Lv7eSY|h9GEZUv-%t z&nqj~Qq}q=SE|bhu_jHy{h~s=Ir@N*Jk7BjQswx@PP{eXDF5j$15J;ymRo2zsJcDi zT$}^a`FWP2LV}@@8*<_k=u%{^rjuWZZkSu*cB&GZl4$3GRXrhI?-iF@gv{GlCmfV~Yc;-$B z^me*tBVeJhAYQRB>=@D|DIy__Pw$yePl2)w1|AuLujU}Nq+WuyV51QZm7!5r-LQ#a z4HOeX1~$=3{UUwzekWDsG%>99MFBuP54&jMg9_SZH^I%>d6T7m5@zgGjXWR54EH^U zY>g>bct>KJ-n9Ixq5v_%k2CO6iTs?w%y*XJhsSNOci60yBgJHA;VF!G90!b2q?Q*o z9K=f9zxkYxvw;20A5=I_Vhi>n{n=@TXZsjb0`JjOsqw2(vz~h-nwl>j5tBmcQONSD zpz9olcQd727>1?U`&}iusas~0`IKAQ79DZ`K~7#nY|*k*b$~^gN2j#2-eKOT1Oy_o zk?9>WZcU&Z>fZz`T}ON*w9!+ZVV5x;{uRk-O|R;OH7|hUoQw z=`t){;pfc^0rIlcySq12mYdqEwDPDIO!W_0?%OW62CNJqH}iD=3dc+H1$il|L+zOP zJR>-ovcj7qkU*MYjfEGc)-z`c%}^sh+8uEtMkeNe+vi|=+Tf)EODkZa9hbmVWSI5S zfo(35xVT*RH?0j)!<)(#dD4CDk>^OqAV(BDbv5B5e>RVD9(Zj5J~#cm$*<4lds+FQ zFgtbOu?5Y<<~|dT)#rEFYOh+PdPwC;~PLzs?h_L_WY4 zQHEL-__qG{OOMLGh4;pRaku?omq%t}tGH?62t@9#$HulokEF6}I+_LFHW{~G z>Qw6SRXP&5sGcu7)>{eg;=1F*n?8%V)7({(&_MhtHdm@qKNCz~c;WY%wl^>?#w z=tiLu;Lm%Ak8%!Ar$YZ?xPUT-B^*95936dZE_7hjMn_Gt{ey%{Y zIFFh{p_mIW?AUb*Nx+%v$oNN*x89g6R8!j>p_skOmBxX$VIIy{UqA!rMY-@EJp{L9 zuJ5&Czn)DB#4<}r9cm<_`-QN= zCjI3sL>O5(M#X`lPBVvIwgC)O5zK%;G+g30DM7p&5a@G)%8DLJ8!627PE2CSk#3-V z1&R=$keJ(jT8H7y3kPl_g4Ot$**!W-NIgsX<;TBT2<%~}#JccuddkQn3MF1)OVnF< z#ccc}R?6#rk|l@8%hFMjBF`_wy2Ppg;TaS>$sNc(;eeH%-yOalHxNXCh|c`M(#!jE zVB!8dgX>>V5)J%t8ciXaoAzTE^voMLt(cnMF>g*sPE4(<>buc>?}!WpN_72E9sHP5 zTU8qCXqPw0TE?zoT4NDAryb5buEq2|-wkpMh31e-?1-4peg}4-756y#mR4IoX)q}H z&}-8c6jQROLDp{cHql$5&F>xv{!7}n^_PCv0|pyHq{con1>zmW%BymH)y4fsr&rMsnz9k19V?)EbWg5#eX_^FuZmw`cvHjumMb>XhkpS&`1&l>FIuv4>YxGS!K8(m zD?$VPljqZ=nQ7(QY~lutZ1J|3QPWn4tV~0irb&~kG3jP0fWc5-T(`NU&>jfBM3Z%{ z<}=0aX=6bDu4T*zLqYd#zHS2_?XDZFaCtTs-HwOEj`c6{B|%H%SZY-dx#Qfy+5xYC z=tsx`H~!iWa2P(%P^Xw?oD>~E7CKyR6sz%Kf%L6eR$~EC`=SYfY+?m2+mK<3*GzPu zN7>@rw%RRs+dnZHl>YNGyW2VK)1`=p9+)Wayr#5~GF|1gQ~;D70WPybO)J;j5h^Ki zDGdCD3Q(dLEJKQAU4*_FZBJOf$q-YT!MW!q8fEppf&|`-HXrS&Dzw$TH?SQkqbn_`?{l50yu!-w0^y%J4 zA{PxxS?J?L!Y=Pf6=>mCdZ$iTX-Lcal<|xe5mIOXhIuFNK>>;ldFPXjJW>@dON`N! zYNm1GP=!NLt*+}IlXC%D&=pI^3!Jwj|4rX^9`yztrRZW8qqtnJ^3yafuPndJa+(N6 z9NiCavvI#L@V!PQqSqqYv5<3blSp1V7Ej?_S$&}?<n&WCcxv0+)xG;sc9zz)l=T{` z>*ILC<+y(`X=9a!#`G&NY_bE%Nv8>Y*M4j0&U%d>eWBt{KA zqez&JF5JmGRhTE=9$p0bFJ8sFNAX5atlAY(iJW8&8JEO@zzCs}$q915*0kzDVk8=D z_&07kACv+-T-sjD&8?It@a$5iCec!`&E-ZhJ=_GMauQKg&CiCQVDNp2>4hpK2*ja(5-YJS%ps-;=Y*4QoS~06LI(kiyn!xom zVsz9Fz6Ois)vG<8+WjQe@E_z{*uod*Yv~2C6<~PEp^qo)m@toIt0$>`2vU{&J;sXu zh)lFpxEQuc#t;3&Eb!jv`7Td*1??nZ1ZuM{l&^GQnxi{^2ZjvLf z5zcp>l<5eqb5_xkW; zm17hLB581vo6~QXYhqd{62Q#$6%FEB^{Cd!eU%RaX1KwLrI@Tm>}$CI>{Ia*7m-O% z8ldtr7@yT)W4We9?XqZ|D~)^71u->rG=CGhjg4|K#yFI_-dEXD$L>1K^!@|*!|fr0F()7 zEM<97C;hS+#UM`dN6=h&invM%;8lMuu`f9sR+VBSeJ;TDG23e15c@U}#;_q}9uQYG z5!gdiEXRw9*+KjiS}A~-7f}JC=N+baaxh3wgJ4A0DXH(OHJcfnak)kXF}E0@5-1{J z_3o|4ro2Wep6#ZZ-05RD$w2ihjoQ$FW>1qHB>vI+#S<4JZo4SoIDBvFvAmw#|LCTl zAdnpIQ!e5*mjdFNWPd1*lW7X()-ExiYIKbu@GNgt+b61Wkw%(r8w?bgo(C{COmf&B zye<@+{_0bW1-S3bw!oGZEhahyPsbX|+{H5ogWkQu-YB+V`x5P2f!KcaGK~9n`<)3l z!vgo<8s8VMK%ibsE3NT*?WT>3vz@)y0%oJ_g0Ud>wED~Gm(6EA-0euk(9-cFe(Xe6@gt*qz9lB9u~BSDm^f^mBoj@ewCw1C8PmJu#oxMA#|Vbh?ND@ z0Q+u(!;WX3HlquziP+LO`S->H4#GLoO>9$80XEoaZ<9spi&7DyydJsH<9Ei{_7(kjQ?e5^2?002pISjh(txo$2LZ3GIX!_)T>{oufLaHG>W4 zq#==pDVL9(s3(3LDhq z1aw1Pt3M5C0_8GX4UyCt8ROwdcTe%w+#*unuHW_PTDF&`L?CMbx{*7lm|`vQWN22t z)<%MHE;}UOGwq@2oYeOwcLty85~Jl72S@P!3#^BZB(s}u=ja1%WP@QF94DIMDv06$ z$a?AU>^WV>(|#BVN69p8kHo}5m+M_w9p;{7r^LQ97F$=o_pX-yx)|qULb-bNa~T!L z*_z@qB`Pw+JTy;27LyK_?;xd=N96nYR0m277}JapPtK-+R&7IDeo4~eP?b-5OlanG zU$1v+AU_?&i(2RRJgqa)gFjY5OpmR{%D_Z9t(3TAv^Cs%kBleDwf$exr&(esnh{Ri z@JvfFlTxjR8T(!>dN%kM8BLA6%yufrYP+l5=KHC9cS;e#>wSm{Aeaw&j=f{fXT&g& z*$92S%&WzS?@-9r@aARv?3%{+V14rs0YA|Eg+0U`qgw>&x|5em^|2z!j-s-<#Vtai z6Fb@aUgct$4xHFk+(pwYJq| z9VsyIzCG4;t1z8h+y7SKvxP?W<|}a@YJEQ9s7-|CQJxh)fTnHC^W;>-9Zq3d?b4u@ z-iU;fArgvqSa@Z@G{}`!VmlSI`Qxoy>cBZYq{j4Du;9YZ1h(4(@7IRW8sMX7QculN zaIHwhX|>JrH|;{muVh6VPCE+lQ~3#u&jZqN;LW{D=thKxjAyWvR8Tx z&JKQU3_nVo2}5id9`Zbu!Lku`Ux9N~DoL;@hyOeSxI&;p8n+`KXjhlA2W&%+ZAj#Q zdvth-5{Dnls5&VB>3w@RTxP8PRhxMqZ!j4;I%o?$AK1`-uVHOReO7xmB;cWD+Z~4W z&13e(cu}{yiaTaCfXWIwU_)G<4y0vio9|hzMU0y@ZQ6{ zArZzCX-?XH3}dBB5ALJc4X`%WIxC`R6HqEUeDXV74)@X;c<$}sw5 zgLRj3!%bKK86`F&BN_pKl(i_w-LMPBA`Y`jKM?d}8lK5If7`gBWk^j#27S-!E4dU< zGHWZANqK{M98XY2Y`T_Pphbs>ru7>Ap{m3_JyTx>&-bP#BIpGs2AT06K}k!~^^Zj> z4@?&*8!esi9fTVSG+|Ur8%dhHtJ^ zp4O0`%tlJpzV^!DPb4~FD;8vJnklPN;8HQ+KoJG*bKVoS?i(h(qEA>D>Sg2&816V_ zaZH_!C?08|6mSK&)SmJ4 z0Glcf(&n_lkcncZ0pWx)W6;OTeC!yk0hy-ERRQsLh#SCYAuGHpb)=E_6?EsiI&lqA z{}I2~wg*|J2)lx0ECu)ILK~q!RVlMCo z(W%|Eq`p3qi41+KsWJ7maq$39>zULs?x1{0J5tjqJZ*S_7_6)m`&v(;jzUXG?bD|i z9F*}1{@+_1TCy)1ur}3hQ;*lWdKcv#+sZu70L0VXg*= z)r2*phr&m-r6Id^kvPfGu7eO%+*@1so}Ka@Ba|=?`%08x1@%YqO&3@Wp`lDx(^6`cZ0p^S-^(CMnH*dQF(+ydU&FYzfxA+R4Q5&hk8<6nPe)aL z;hB+t_FEo5AMc}Ka{`&-Zh35B<;q5G5pw7c+x=W|c(m_AU_(ImWJU?ibIL}F2s#W> z!8o%3MN@Oj#*kH9#~Sh{dt=J}mvF1@Yc6jgGA*kfU7{KD9qOJ86Ly@5Bq*q7FrwuU z0Xw@cy6{ijLyv>`Y(ZYhxp|_ahV@9l#Onm#LiTqi>rLyfcc!2gd4qIZ)P~+Mt=+3H z)lk2pf2ye>-Rnxf-8tL}PrTg9SaWF~|Mp?ylJTiB3rVjVN4UG4ED_a42{w@~AwSti#6o6V7j{E8ipl3va0}qmeFmzjs^v=yNxu+*g(mumFNt zjP8vA7e<01{;;&msU18br806^KE_7s`xUBea)K>*|Js|4If>s{EL;iBWm}oyMQZ0d zV_bJ8mGeZkJCxEa1C@p_yy8;iFE@rVuZgWYnZ@v4k;-dsk&e@XPb~(izP9~y1?b({ z=nicwb9yALwq+MQ31NL@b0sK8kzfRC^WDQ<(ca9U0dM^MqHx z2|V=QfEji{grBG1J=38xEZ1@$d>0b0Ubxhu6G@>>2q{J%ezRtSr@Tg+-=2_R6MDyB zhdP4@^fqd@*K_y$r{O4Ex0zASGmY9Tq{2^kzbifmE^H;BEPn>y<6noz1rMiz!KTDl zj0kV0SW*jV_XV}sFBkf;N^To2L^JzT5NKo>(5__26oyy$&1y(^KJ8WrVRTM|zJX{8 z=U8aATJk>PKi?$+?o9G=7F@9n?T8ZEflcKP?L-s`GVZb4_a2kKD+-1!JxtgM(NFLr zig=%)lhT(vZO*q63xjDm7$Oww5;yWqsf0A`Vg-gfKH;7`1mUfweWOth%UaVR7iTR& zoYZgca}XCK-NQAYa?%`Z;Gd*1#fj{M0SCci`L;K|>o86Mij&~|7nJ*wHA yL@lGTtq7-1ert5{`t-F#HH*PiNAiN0#pHyY=llw-nZ@dv zHt$1@WaGg5tx>#_26^k<7NNXqf9xciU|ec&7QC#G(D Og(tq#BD*w>!VSymno?H) diff --git a/test-data/config/Library/Application Support/Plex Media Server/Codecs/.device-id b/test-data/config/Library/Application Support/Plex Media Server/Codecs/.device-id deleted file mode 100644 index 787db27f7..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Codecs/.device-id +++ /dev/null @@ -1 +0,0 @@ -66e98651-ddf2-4595-9cf4-09017dbb9ec8 \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Crash Reports/.RateLimit.json b/test-data/config/Library/Application Support/Plex Media Server/Crash Reports/.RateLimit.json deleted file mode 100644 index fbc66eed7..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Crash Reports/.RateLimit.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - nextReset: 1780548075, - uploadsRemaining: 5 -} diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.fanarttv.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.fanarttv.log deleted file mode 100644 index ff1c6395d..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.fanarttv.log +++ /dev/null @@ -1,73 +0,0 @@ -2026-06-04 03:41:15,608 (7f451b8d1808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:15,608 (7f451b8d1808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:41:15,609 (7f451b8d1808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:15,609 (7f451b8d1808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:15,609 (7f451b8d1808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:15,609 (7f451b8d1808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:15,610 (7f451b8d1808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:15,610 (7f451b8d1808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:15,610 (7f451b8d1808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:15,610 (7f451b8d1808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:15,610 (7f451b8d1808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:15,610 (7f451b8d1808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:15,610 (7f451b8d1808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:15,611 (7f45184abb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.fanarttv' -2026-06-04 03:41:15,611 (7f451b8d1808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:15,611 (7f451b8d1808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:15,655 (7f451b8d1808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.fanarttv in namespace 'metadata' -2026-06-04 03:41:15,657 (7f451b8d1808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:15,680 (7f451b8d1808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:15,681 (7f451b8d1808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:15,684 (7f45182c8b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:15,684 (7f451b8d1808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:15,685 (7f451b8d1808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:15,685 (7f45182c8b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:15,685 (7f4518282b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:15,686 (7f451b8d1808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:15,686 (7f451b8d1808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:15,691 (7f4518282b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:15,691 (7f4518282b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:15,691 (7f45182c8b38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:15,694 (7f45182a5b38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:15,728 (7f451b8d1808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:15,728 (7f451b8d1808) : DEBUG (messaging:69) - Exposing function AlbumPosters for remote access -2026-06-04 03:41:15,728 (7f451b8d1808) : DEBUG (agentkit:1132) - Creating new agent class called FanartTVAgent -2026-06-04 03:41:15,728 (7f451b8d1808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}] -2026-06-04 03:41:15,728 (7f451b8d1808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_' -2026-06-04 03:41:15,732 (7f451b8d1808) : DEBUG (agentkit:1132) - Creating new agent class called FanartTVAgent -2026-06-04 03:41:15,732 (7f451b8d1808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}] -2026-06-04 03:41:15,732 (7f451b8d1808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_' -2026-06-04 03:41:15,735 (7f451b8d1808) : DEBUG (agentkit:1132) - Creating new agent class called FanartTVAgent -2026-06-04 03:41:15,735 (7f451b8d1808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}] -2026-06-04 03:41:15,736 (7f451b8d1808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK' -2026-06-04 03:41:15,739 (7f451b8d1808) : DEBUG (agentkit:1132) - Creating new agent class called FanartTVAgent -2026-06-04 03:41:15,739 (7f451b8d1808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Fanart.tv'}] -2026-06-04 03:41:15,739 (7f451b8d1808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK' -2026-06-04 03:41:15,743 (7f451b8d1808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:15,743 (7f451b8d1808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:15,744 (7f451b8d1808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:15,744 (7f451b8d1808) : INFO (socketinterface:184) - Socket server started on port 38641 -2026-06-04 03:41:15,744 (7f451b8d1808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:15,744 (7f451b8d1808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:15,744 (7f451b8d1808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:15,745 (7f451b8d1808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 152 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.htbackdrops.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.htbackdrops.log deleted file mode 100644 index 26400a243..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.htbackdrops.log +++ /dev/null @@ -1,64 +0,0 @@ -2026-06-04 03:41:15,612 (7fdc103c8808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:15,612 (7fdc103c8808) : DEBUG (core:361) - Using the standard policy -2026-06-04 03:41:15,613 (7fdc103c8808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:15,613 (7fdc103c8808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:15,613 (7fdc103c8808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:15,613 (7fdc103c8808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:15,614 (7fdc103c8808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:15,614 (7fdc103c8808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:15,615 (7fdc103c8808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:15,615 (7fdc0cfa2b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.htbackdrops' -2026-06-04 03:41:15,658 (7fdc103c8808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.htbackdrops in namespace 'metadata' -2026-06-04 03:41:15,660 (7fdc103c8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:15,682 (7fdc103c8808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:15,683 (7fdc103c8808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:15,686 (7fdc0cd6cb38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:15,686 (7fdc103c8808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:15,686 (7fdc0cd6cb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:15,687 (7fdc103c8808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:15,687 (7fdc0cd26b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:15,687 (7fdc103c8808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:15,687 (7fdc103c8808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:15,689 (7fdc0cd26b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:15,690 (7fdc0cd26b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:15,698 (7fdc0cd6cb38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:15,701 (7fdc0cd49b38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:15,704 (7fdc103c8808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:15,704 (7fdc103c8808) : DEBUG (messaging:69) - Exposing function ArtistSearch for remote access -2026-06-04 03:41:15,705 (7fdc103c8808) : DEBUG (agentkit:1132) - Creating new agent class called HTBDAgent -2026-06-04 03:41:15,706 (7fdc103c8808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['ab', 'aa', 'af', 'ak', 'sq', 'am', 'ar', 'an', 'hy', 'as', 'av', 'ae', 'ay', 'az', 'bm', 'ba', 'eu', 'be', 'bn', 'bh', 'bi', 'bs', 'pb', 'br', 'bg', 'my', 'ca', 'ch', 'ce', 'ny', 'zh', 'cu', 'cv', 'kw', 'co', 'cr', 'hr', 'cs', 'da', 'dv', 'nl', 'dz', 'en', 'eo', 'et', 'ee', 'fo', 'fj', 'fi', 'fr', 'fy', 'ff', 'gd', 'gl', 'lg', 'ka', 'de', 'el', 'gn', 'gu', 'ht', 'ha', 'he', 'hz', 'hi', 'ho', 'hu', 'is', 'io', 'ig', 'id', 'ia', 'ie', 'iu', 'ik', 'ga', 'it', 'ja', 'jv', 'kl', 'kn', 'kr', 'ks', 'kk', 'km', 'ki', 'rw', 'ky', 'kv', 'kg', 'ko', 'kj', 'ku', 'lo', 'la', 'lv', 'li', 'ln', 'lt', 'lu', 'lb', 'mk', 'mg', 'ms', 'ml', 'mt', 'gv', 'mi', 'mr', 'mh', 'mo', 'mn', 'na', 'nv', 'ng', 'ne', 'xn', 'nd', 'no', 'nb', 'nn', 'oc', 'oj', 'or', 'om', 'os', 'pi', 'pa', 'fa', 'pl', 'pt', 'ps', 'qu', 'rm', 'ro', 'rn', 'ru', 'se', 'sm', 'sg', 'sa', 'sc', 'sr', 'sn', 'ii', 'sd', 'si', 'sk', 'sl', 'so', 'st', 'nr', 'es', 'su', 'sw', 'ss', 'sv', 'tl', 'ty', 'tg', 'ta', 'tt', 'te', 'th', 'bo', 'ti', 'to', 'ts', 'tn', 'tr', 'tk', 'tw', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'cy', 'wo', 'xh', 'yi', 'yo', 'za', 'zu'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': False, 'name': 'Home Theater Backdrops'}] -2026-06-04 03:41:15,707 (7fdc103c8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK' -2026-06-04 03:41:15,711 (7fdc103c8808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:15,711 (7fdc103c8808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:15,711 (7fdc103c8808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:15,711 (7fdc103c8808) : INFO (socketinterface:184) - Socket server started on port 38111 -2026-06-04 03:41:15,711 (7fdc103c8808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:15,711 (7fdc103c8808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:15,712 (7fdc103c8808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:15,712 (7fdc103c8808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 155 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log deleted file mode 100644 index 7d99ef248..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log +++ /dev/null @@ -1,71 +0,0 @@ -2026-06-04 03:41:58,186 (7f17f5394808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:58,186 (7f17f5394808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:41:58,186 (7f17f5394808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:58,187 (7f17f5394808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:58,187 (7f17f5394808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:58,187 (7f17f5394808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:58,187 (7f17f5394808) : DEBUG (networking:262) - Loaded HTTP cookies -2026-06-04 03:41:58,187 (7f17f5394808) : DEBUG (caching:108) - No info file found, trashing the cache folder -2026-06-04 03:41:58,188 (7f17f5394808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:58,188 (7f17f5394808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:58,188 (7f17f5394808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:58,188 (7f17f5394808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:58,188 (7f17f5394808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:58,188 (7f17f5394808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:58,188 (7f17f5394808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:58,189 (7f17f1f6eb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.imdb' -2026-06-04 03:41:58,189 (7f17f5394808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:58,235 (7f17f5394808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.imdb in namespace 'metadata' -2026-06-04 03:41:58,237 (7f17f5394808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:58,239 (7f17f5394808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:58,240 (7f17f5394808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:58,243 (7f17f1d36b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:58,243 (7f17f5394808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:58,244 (7f17f1d36b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:58,244 (7f17f5394808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:58,244 (7f17f5394808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:58,244 (7f17f1cf0b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:58,244 (7f17f5394808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:58,261 (7f17f1cf0b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:58,261 (7f17f1cf0b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:58,261 (7f17f1d36b38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:58,264 (7f17f1d13b38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:58,412 (7f17f5394808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:58,468 (7f17f5394808) : DEBUG (agentkit:1132) - Creating new agent class called PlexMovieAgent -2026-06-04 03:41:58,468 (7f17f5394808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': ['com.plexapp.agents.localmedia'], 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.themoviedb'], 'languages': ['en', 'sv', 'fr', 'es', 'nl', 'de', 'it', 'da', 'ar', 'ca', 'zh', 'cs', 'et', 'fi', 'el', 'he', 'hi', 'hu', 'id', 'ja', 'ko', 'lv', 'no', 'fa', 'pl', 'pt', 'ro', 'ru', 'sk', 'th', 'tr', 'uk', 'vi'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Plex Movie (Legacy)'}] -2026-06-04 03:41:58,469 (7f17f5394808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_' -2026-06-04 03:41:58,472 (7f17f5394808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:58,472 (7f17f5394808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:58,472 (7f17f5394808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:58,472 (7f17f5394808) : INFO (socketinterface:184) - Socket server started on port 40185 -2026-06-04 03:41:58,472 (7f17f5394808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:58,472 (7f17f5394808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:58,473 (7f17f5394808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:58,473 (7f17f5394808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 148 bytes -2026-06-04 03:41:58,474 (7f17f1c81b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.agents.imdb/prefs -2026-06-04 03:41:58,478 (7f17f1c81b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.agents.imdb/prefs -2026-06-04 03:41:58,478 (7f17f1c81b38) : DEBUG (preferences:258) - Loaded preferences from DefaultPrefs.json -2026-06-04 03:41:58,478 (7f17f1c81b38) : INFO (preferences:161) - No user preferences file exists -2026-06-04 03:41:58,478 (7f17f1c81b38) : DEBUG (preferences:198) - Saved the user preferences -2026-06-04 03:41:58,480 (7f17f1c81b38) : DEBUG (runtime:88) - Sending packed state data (104 bytes) -2026-06-04 03:41:58,480 (7f17f1c81b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 2224 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log.1 b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log.1 deleted file mode 100644 index 9793fa7c5..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.imdb.log.1 +++ /dev/null @@ -1,63 +0,0 @@ -2026-06-04 03:41:16,761 (7f00d96e5808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:16,761 (7f00d96e5808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:41:16,761 (7f00d96e5808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:16,762 (7f00d96e5808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:16,762 (7f00d96e5808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:16,763 (7f00d96e5808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:16,763 (7f00d96e5808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:16,763 (7f00d62bfb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.imdb' -2026-06-04 03:41:16,763 (7f00d96e5808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:16,764 (7f00d96e5808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:16,805 (7f00d96e5808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.imdb in namespace 'metadata' -2026-06-04 03:41:16,806 (7f00d96e5808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:16,809 (7f00d96e5808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:16,810 (7f00d96e5808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:16,813 (7f00d60ddb38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:16,813 (7f00d96e5808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:16,813 (7f00d60ddb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:16,813 (7f00d96e5808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:16,814 (7f00d6097b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:16,814 (7f00d96e5808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:16,814 (7f00d96e5808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:16,833 (7f00d6097b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:16,833 (7f00d60ddb38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:16,834 (7f00d6097b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:16,836 (7f00d60bab38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:16,983 (7f00d96e5808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:17,040 (7f00d96e5808) : DEBUG (agentkit:1132) - Creating new agent class called PlexMovieAgent -2026-06-04 03:41:17,040 (7f00d96e5808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': ['com.plexapp.agents.localmedia'], 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.themoviedb'], 'languages': ['en', 'sv', 'fr', 'es', 'nl', 'de', 'it', 'da', 'ar', 'ca', 'zh', 'cs', 'et', 'fi', 'el', 'he', 'hi', 'hu', 'id', 'ja', 'ko', 'lv', 'no', 'fa', 'pl', 'pt', 'ro', 'ru', 'sk', 'th', 'tr', 'uk', 'vi'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Plex Movie (Legacy)'}] -2026-06-04 03:41:17,041 (7f00d96e5808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_' -2026-06-04 03:41:17,044 (7f00d96e5808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:17,044 (7f00d96e5808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:17,044 (7f00d96e5808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:17,044 (7f00d96e5808) : INFO (socketinterface:184) - Socket server started on port 39585 -2026-06-04 03:41:17,044 (7f00d96e5808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:17,044 (7f00d96e5808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:17,045 (7f00d96e5808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:17,045 (7f00d96e5808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 148 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lastfm.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lastfm.log deleted file mode 100644 index 5ec9d3377..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lastfm.log +++ /dev/null @@ -1,74 +0,0 @@ -2026-06-04 03:41:15,608 (7efeadd81808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:15,609 (7efeadd81808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:41:15,609 (7efeadd81808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:15,609 (7efeadd81808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:15,610 (7efeadd81808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:15,610 (7efeadd81808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:15,611 (7efeadd81808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:15,611 (7efeaa95bb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.lastfm' -2026-06-04 03:41:15,611 (7efeadd81808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:15,611 (7efeadd81808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:15,654 (7efeadd81808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.lastfm in namespace 'metadata' -2026-06-04 03:41:15,656 (7efeadd81808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:15,680 (7efeadd81808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:15,681 (7efeadd81808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:15,685 (7efeaa722b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:15,685 (7efeadd81808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:15,685 (7efeaa722b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:15,685 (7efeadd81808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:15,686 (7efeaa6dcb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:15,686 (7efeadd81808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:15,686 (7efeadd81808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:15,701 (7efeaa722b38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:15,702 (7efeaa6dcb38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:15,702 (7efeaa6dcb38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:15,704 (7efeaa6ffb38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function ArtistMbidLookup for remote access -2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function GetMusicBrainzId for remote access -2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function ArtistSearch for remote access -2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function AlbumSearch for remote access -2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function ArtistTopTracks for remote access -2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function ArtistGetSimilar for remote access -2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (messaging:69) - Exposing function ArtistGetEvents for remote access -2026-06-04 03:41:15,778 (7efeadd81808) : DEBUG (agentkit:1132) - Creating new agent class called LastFmAgent -2026-06-04 03:41:15,779 (7efeadd81808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'sv', 'fr', 'es', 'de', 'pl', 'it', 'pt', 'ja', 'tr', 'ru', 'zh'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Last.fm'}] -2026-06-04 03:41:15,779 (7efeadd81808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__' -2026-06-04 03:41:15,782 (7efeadd81808) : DEBUG (agentkit:1132) - Creating new agent class called LastFmAlbumAgent -2026-06-04 03:41:15,782 (7efeadd81808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'sv', 'fr', 'es', 'de', 'pl', 'it', 'pt', 'ja', 'tr', 'ru', 'zh'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Last.fm'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'sv', 'fr', 'es', 'de', 'pl', 'it', 'pt', 'ja', 'tr', 'ru', 'zh'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Last.fm'}] -2026-06-04 03:41:15,783 (7efeadd81808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__' -2026-06-04 03:41:15,786 (7efeadd81808) : DEBUG (messaging:69) - Exposing function GetArtistEventsFromSongkickById for remote access -2026-06-04 03:41:15,786 (7efeadd81808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:15,786 (7efeadd81808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:15,786 (7efeadd81808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:15,786 (7efeadd81808) : INFO (socketinterface:184) - Socket server started on port 33769 -2026-06-04 03:41:15,787 (7efeadd81808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:15,787 (7efeadd81808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:15,787 (7efeadd81808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:15,787 (7efeadd81808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 150 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log deleted file mode 100644 index 6448c3c65..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log +++ /dev/null @@ -1,83 +0,0 @@ -2026-06-04 03:42:00,196 (7f883084d808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:42:00,197 (7f883084d808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:42:00,197 (7f883084d808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:42:00,197 (7f883084d808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (networking:262) - Loaded HTTP cookies -2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:42:00,198 (7f883084d808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:42:00,198 (7f883084d808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:42:00,199 (7f882d427b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.localmedia' -2026-06-04 03:42:00,199 (7f883084d808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:42:00,199 (7f883084d808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:42:00,199 (7f883084d808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:42:00,242 (7f883084d808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.localmedia in namespace 'metadata' -2026-06-04 03:42:00,244 (7f883084d808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:42:00,246 (7f883084d808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:42:00,247 (7f883084d808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:42:00,250 (7f882d1edb38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:42:00,250 (7f883084d808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:42:00,250 (7f882d1edb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:42:00,251 (7f883084d808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:42:00,251 (7f882d1a7b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:42:00,251 (7f883084d808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:42:00,252 (7f883084d808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:42:00,263 (7f882d1a7b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:42:00,263 (7f882d1a7b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:42:00,263 (7f882d1edb38) : DEBUG (services:362) - Loaded services -2026-06-04 03:42:00,266 (7f882d1cab38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:42:00,331 (7f883084d808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:42:00,505 (7f883084d808) : DEBUG (messaging:69) - Exposing function ReadTags for remote access -2026-06-04 03:42:00,505 (7f883084d808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaMovie -2026-06-04 03:42:00,505 (7f883084d808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}] -2026-06-04 03:42:00,506 (7f883084d808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_' -2026-06-04 03:42:00,508 (7f883084d808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaTV -2026-06-04 03:42:00,508 (7f883084d808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}] -2026-06-04 03:42:00,509 (7f883084d808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_' -2026-06-04 03:42:00,511 (7f883084d808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaArtistLegacy -2026-06-04 03:42:00,511 (7f883084d808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] -2026-06-04 03:42:00,512 (7f883084d808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK' -2026-06-04 03:42:00,515 (7f883084d808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaArtistModern -2026-06-04 03:42:00,515 (7f883084d808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] -2026-06-04 03:42:00,515 (7f883084d808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK' -2026-06-04 03:42:00,519 (7f883084d808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaAlbum -2026-06-04 03:42:00,519 (7f883084d808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Albums)'}] -2026-06-04 03:42:00,520 (7f883084d808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_' -2026-06-04 03:42:00,523 (7f883084d808) : CRITICAL (sandbox:298) - Function named 'Start' couldn't be found in the current environment -2026-06-04 03:42:00,523 (7f883084d808) : INFO (core:611) - Started plug-in -2026-06-04 03:42:00,523 (7f883084d808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:42:00,523 (7f883084d808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:42:00,524 (7f883084d808) : INFO (socketinterface:184) - Socket server started on port 35691 -2026-06-04 03:42:00,524 (7f883084d808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:42:00,524 (7f883084d808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:42:00,524 (7f883084d808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:42:00,524 (7f883084d808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 154 bytes -2026-06-04 03:42:00,525 (7f882d0d9b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.agents.localmedia/prefs -2026-06-04 03:42:00,529 (7f882d0d9b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.agents.localmedia/prefs -2026-06-04 03:42:00,529 (7f882d0d9b38) : DEBUG (preferences:258) - Loaded preferences from DefaultPrefs.json -2026-06-04 03:42:00,529 (7f882d0d9b38) : INFO (preferences:161) - No user preferences file exists -2026-06-04 03:42:00,530 (7f882d0d9b38) : DEBUG (preferences:198) - Saved the user preferences -2026-06-04 03:42:00,530 (7f882d0d9b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 281 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.1 b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.1 deleted file mode 100644 index 963eb39ed..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.1 +++ /dev/null @@ -1,78 +0,0 @@ -2026-06-04 03:41:57,486 (7f238d0a8808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:57,486 (7f238d0a8808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:41:57,486 (7f238d0a8808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:57,487 (7f238d0a8808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:57,487 (7f238d0a8808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:57,487 (7f238d0a8808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:57,487 (7f238d0a8808) : DEBUG (networking:262) - Loaded HTTP cookies -2026-06-04 03:41:57,487 (7f238d0a8808) : DEBUG (caching:108) - No info file found, trashing the cache folder -2026-06-04 03:41:57,488 (7f238d0a8808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:57,488 (7f238d0a8808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:57,488 (7f238d0a8808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:57,488 (7f238d0a8808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:57,488 (7f238d0a8808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:57,488 (7f238d0a8808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:57,488 (7f2389c82b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.localmedia' -2026-06-04 03:41:57,488 (7f238d0a8808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:57,489 (7f238d0a8808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:57,531 (7f238d0a8808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.localmedia in namespace 'metadata' -2026-06-04 03:41:57,533 (7f238d0a8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:57,536 (7f238d0a8808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:57,537 (7f238d0a8808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:57,541 (7f2389a48b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:57,541 (7f238d0a8808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:57,541 (7f2389a48b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:57,541 (7f238d0a8808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:57,541 (7f2389a02b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:57,542 (7f238d0a8808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:57,542 (7f238d0a8808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:57,553 (7f2389a02b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:57,553 (7f2389a02b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:57,554 (7f2389a48b38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:57,556 (7f2389a25b38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:57,625 (7f238d0a8808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:57,807 (7f238d0a8808) : DEBUG (messaging:69) - Exposing function ReadTags for remote access -2026-06-04 03:41:57,807 (7f238d0a8808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaMovie -2026-06-04 03:41:57,807 (7f238d0a8808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}] -2026-06-04 03:41:57,808 (7f238d0a8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_' -2026-06-04 03:41:57,811 (7f238d0a8808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaTV -2026-06-04 03:41:57,812 (7f238d0a8808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}] -2026-06-04 03:41:57,812 (7f238d0a8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_' -2026-06-04 03:41:57,816 (7f238d0a8808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaArtistLegacy -2026-06-04 03:41:57,816 (7f238d0a8808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] -2026-06-04 03:41:57,816 (7f238d0a8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK' -2026-06-04 03:41:57,820 (7f238d0a8808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaArtistModern -2026-06-04 03:41:57,820 (7f238d0a8808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] -2026-06-04 03:41:57,820 (7f238d0a8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK' -2026-06-04 03:41:57,824 (7f238d0a8808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaAlbum -2026-06-04 03:41:57,824 (7f238d0a8808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Albums)'}] -2026-06-04 03:41:57,825 (7f238d0a8808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_' -2026-06-04 03:41:57,829 (7f238d0a8808) : CRITICAL (sandbox:298) - Function named 'Start' couldn't be found in the current environment -2026-06-04 03:41:57,829 (7f238d0a8808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:57,829 (7f238d0a8808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:57,830 (7f238d0a8808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:57,830 (7f238d0a8808) : INFO (socketinterface:184) - Socket server started on port 34913 -2026-06-04 03:41:57,830 (7f238d0a8808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:57,830 (7f238d0a8808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:57,830 (7f238d0a8808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:57,831 (7f238d0a8808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 154 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.2 b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.2 deleted file mode 100644 index 1293dabba..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.localmedia.log.2 +++ /dev/null @@ -1,77 +0,0 @@ -2026-06-04 03:41:16,068 (7fd844296808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:16,069 (7fd844296808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:41:16,069 (7fd844296808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:16,069 (7fd844296808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:16,070 (7fd844296808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:16,070 (7fd844296808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:16,071 (7fd840e70b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.localmedia' -2026-06-04 03:41:16,071 (7fd844296808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:16,072 (7fd844296808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:16,072 (7fd844296808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:16,115 (7fd844296808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.localmedia in namespace 'metadata' -2026-06-04 03:41:16,117 (7fd844296808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:16,119 (7fd844296808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:16,120 (7fd844296808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:16,124 (7fd840c8eb38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:16,124 (7fd844296808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:16,124 (7fd840c8eb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:16,124 (7fd844296808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:16,125 (7fd840c48b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:16,125 (7fd844296808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:16,125 (7fd844296808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:16,136 (7fd840c48b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:16,136 (7fd840c48b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:16,136 (7fd840c8eb38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:16,137 (7fd840c6bb38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:16,206 (7fd844296808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:16,389 (7fd844296808) : DEBUG (messaging:69) - Exposing function ReadTags for remote access -2026-06-04 03:41:16,389 (7fd844296808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaMovie -2026-06-04 03:41:16,389 (7fd844296808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}] -2026-06-04 03:41:16,390 (7fd844296808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_' -2026-06-04 03:41:16,392 (7fd844296808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaTV -2026-06-04 03:41:16,393 (7fd844296808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}] -2026-06-04 03:41:16,393 (7fd844296808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_' -2026-06-04 03:41:16,397 (7fd844296808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaArtistLegacy -2026-06-04 03:41:16,397 (7fd844296808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] -2026-06-04 03:41:16,397 (7fd844296808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK' -2026-06-04 03:41:16,401 (7fd844296808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaArtistModern -2026-06-04 03:41:16,401 (7fd844296808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] -2026-06-04 03:41:16,402 (7fd844296808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK' -2026-06-04 03:41:16,406 (7fd844296808) : DEBUG (agentkit:1132) - Creating new agent class called localMediaAlbum -2026-06-04 03:41:16,406 (7fd844296808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'primary_provider': False, 'prefs': True, 'name': 'Local Media Assets (Albums)'}] -2026-06-04 03:41:16,407 (7fd844296808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_' -2026-06-04 03:41:16,410 (7fd844296808) : CRITICAL (sandbox:298) - Function named 'Start' couldn't be found in the current environment -2026-06-04 03:41:16,410 (7fd844296808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:16,410 (7fd844296808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:16,410 (7fd844296808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:16,411 (7fd844296808) : INFO (socketinterface:184) - Socket server started on port 40699 -2026-06-04 03:41:16,411 (7fd844296808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:16,411 (7fd844296808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:16,411 (7fd844296808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:16,411 (7fd844296808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 154 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lyricfind.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lyricfind.log deleted file mode 100644 index f90e6c2ce..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.lyricfind.log +++ /dev/null @@ -1,63 +0,0 @@ -2026-06-04 03:41:16,108 (7f9749061808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:16,108 (7f9749061808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:41:16,108 (7f9749061808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:16,109 (7f9749061808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:16,109 (7f9749061808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:16,109 (7f9749061808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:16,109 (7f9749061808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:16,109 (7f9749061808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:16,109 (7f9749061808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:16,110 (7f9749061808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:16,110 (7f9749061808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:16,110 (7f9749061808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:16,110 (7f9745c3bb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.lyricfind' -2026-06-04 03:41:16,110 (7f9749061808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:16,110 (7f9749061808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:16,111 (7f9749061808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:16,157 (7f9749061808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.lyricfind in namespace 'metadata' -2026-06-04 03:41:16,159 (7f9749061808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:16,161 (7f9749061808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:16,162 (7f9749061808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:16,165 (7f9745a03b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:16,165 (7f9749061808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:16,166 (7f9745a03b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:16,166 (7f9749061808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:16,167 (7f97459bdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:16,167 (7f9749061808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:16,167 (7f9749061808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:16,170 (7f97459bdb38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:16,170 (7f9745a03b38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:16,170 (7f97459bdb38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:16,172 (7f97459e0b38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:16,183 (7f9749061808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:16,183 (7f9749061808) : DEBUG (agentkit:1132) - Creating new agent class called LyricFindAlbumAgent -2026-06-04 03:41:16,184 (7f9749061808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': False, 'name': 'LyricFind'}] -2026-06-04 03:41:16,184 (7f9749061808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__' -2026-06-04 03:41:16,186 (7f9749061808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:16,187 (7f9749061808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:16,187 (7f9749061808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:16,187 (7f9749061808) : INFO (socketinterface:184) - Socket server started on port 35737 -2026-06-04 03:41:16,187 (7f9749061808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:16,187 (7f9749061808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:16,188 (7f9749061808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:16,188 (7f9749061808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 153 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.movieposterdb.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.movieposterdb.log deleted file mode 100644 index 13a8fdd28..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.movieposterdb.log +++ /dev/null @@ -1,63 +0,0 @@ -2026-06-04 03:41:16,149 (7f1309066808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:16,150 (7f1309066808) : DEBUG (core:361) - Using the standard policy -2026-06-04 03:41:16,150 (7f1309066808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:16,151 (7f1309066808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:16,151 (7f1309066808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:16,152 (7f1309066808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:16,152 (7f1309066808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:16,152 (7f1305c40b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.movieposterdb' -2026-06-04 03:41:16,152 (7f1309066808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:16,152 (7f1309066808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:16,196 (7f1309066808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.movieposterdb in namespace 'metadata' -2026-06-04 03:41:16,197 (7f1309066808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:16,199 (7f1309066808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:16,200 (7f1309066808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:16,203 (7f1305a5eb38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:16,204 (7f1309066808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:16,204 (7f1305a5eb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:16,204 (7f1309066808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:16,204 (7f1305a18b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:16,205 (7f1309066808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:16,205 (7f1309066808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:16,207 (7f1305a18b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:16,207 (7f1305a18b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:16,208 (7f1305a5eb38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:16,209 (7f1305a3bb38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:16,214 (7f1309066808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:16,214 (7f1309066808) : DEBUG (agentkit:1132) - Creating new agent class called CineMaterialAgent -2026-06-04 03:41:16,214 (7f1309066808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': False, 'name': 'CineMaterial'}] -2026-06-04 03:41:16,214 (7f1309066808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_' -2026-06-04 03:41:16,217 (7f1309066808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:16,217 (7f1309066808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:16,217 (7f1309066808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:16,217 (7f1309066808) : INFO (socketinterface:184) - Socket server started on port 43189 -2026-06-04 03:41:16,217 (7f1309066808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:16,217 (7f1309066808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:16,218 (7f1309066808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:16,218 (7f1309066808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 157 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.none.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.none.log deleted file mode 100644 index cd84a44ed..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.none.log +++ /dev/null @@ -1,75 +0,0 @@ -2026-06-04 03:41:16,577 (7f1ccfb21808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:16,577 (7f1ccfb21808) : DEBUG (core:361) - Using the standard policy -2026-06-04 03:41:16,577 (7f1ccfb21808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:16,578 (7f1ccfb21808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:16,578 (7f1ccfb21808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:16,578 (7f1ccfb21808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:16,578 (7f1ccfb21808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:16,578 (7f1ccfb21808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:16,579 (7f1ccfb21808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:16,579 (7f1ccfb21808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:16,579 (7f1ccfb21808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:16,579 (7f1ccfb21808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:16,579 (7f1ccfb21808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:16,579 (7f1ccc6fbb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.none' -2026-06-04 03:41:16,579 (7f1ccfb21808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:16,580 (7f1ccfb21808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:16,623 (7f1ccfb21808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.none in namespace 'metadata' -2026-06-04 03:41:16,625 (7f1ccfb21808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:16,629 (7f1ccfb21808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:16,630 (7f1ccfb21808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:16,633 (7f1ccfb21808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:16,633 (7f1ccc511b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:16,634 (7f1ccfb21808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:16,634 (7f1ccc511b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:16,634 (7f1ccc4cbb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:16,635 (7f1ccfb21808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:16,635 (7f1ccfb21808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:16,637 (7f1ccc4cbb38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:16,638 (7f1ccc4cbb38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:16,638 (7f1ccc511b38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:16,640 (7f1ccc4eeb38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:16,650 (7f1ccfb21808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:16,650 (7f1ccfb21808) : DEBUG (agentkit:1132) - Creating new agent class called PlexPersonalMediaAgentMovies -2026-06-04 03:41:16,650 (7f1ccfb21808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media'}] -2026-06-04 03:41:16,650 (7f1ccfb21808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__' -2026-06-04 03:41:16,653 (7f1ccfb21808) : DEBUG (agentkit:1132) - Creating new agent class called PlexPersonalMediaAgentTVShows -2026-06-04 03:41:16,653 (7f1ccfb21808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Shows'}] -2026-06-04 03:41:16,654 (7f1ccfb21808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK' -2026-06-04 03:41:16,657 (7f1ccfb21808) : DEBUG (agentkit:1132) - Creating new agent class called PlexPersonalMediaAgentArtists -2026-06-04 03:41:16,657 (7f1ccfb21808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Shows'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Artists'}] -2026-06-04 03:41:16,657 (7f1ccfb21808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_' -2026-06-04 03:41:16,660 (7f1ccfb21808) : DEBUG (agentkit:1132) - Creating new agent class called PlexPersonalMediaAgentAlbums -2026-06-04 03:41:16,660 (7f1ccfb21808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Shows'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Artists'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Albums'}] -2026-06-04 03:41:16,661 (7f1ccfb21808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK' -2026-06-04 03:41:16,664 (7f1ccfb21808) : DEBUG (agentkit:1132) - Creating new agent class called PlexPersonalMediaAgentPhotos -2026-06-04 03:41:16,665 (7f1ccfb21808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Shows'}, {'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Artists'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Personal Media Albums'}, {'media_types': ['Photo'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'ca', 'cs', 'cy', 'da', 'de', 'el', 'es', 'et', 'fa', 'fi', 'fr', 'he', 'hi', 'hr', 'ht', 'hu', 'id', 'it', 'ja', 'ko', 'lt', 'lv', 'ms', 'mt', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sk', 'sv', 'sl', 'sr', 'th', 'tr', 'uk', 'ur', 'vi', 'zh', 'xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': False, 'name': 'Photos'}] -2026-06-04 03:41:16,665 (7f1ccfb21808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK' -2026-06-04 03:41:16,668 (7f1ccfb21808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:16,668 (7f1ccfb21808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:16,669 (7f1ccfb21808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:16,669 (7f1ccfb21808) : INFO (socketinterface:184) - Socket server started on port 46761 -2026-06-04 03:41:16,669 (7f1ccfb21808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:16,669 (7f1ccfb21808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:16,669 (7f1ccfb21808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:16,670 (7f1ccfb21808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 148 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.plexthememusic.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.plexthememusic.log deleted file mode 100644 index ecd8ac504..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.plexthememusic.log +++ /dev/null @@ -1,63 +0,0 @@ -2026-06-04 03:41:17,392 (7fd02677a808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:17,392 (7fd02677a808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:41:17,392 (7fd02677a808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:17,393 (7fd02677a808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:17,393 (7fd02677a808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:17,394 (7fd02677a808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:17,394 (7fd02677a808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:17,395 (7fd023354b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.plexthememusic' -2026-06-04 03:41:17,395 (7fd02677a808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:17,395 (7fd02677a808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:17,437 (7fd02677a808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.plexthememusic in namespace 'metadata' -2026-06-04 03:41:17,439 (7fd02677a808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:17,441 (7fd02677a808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:17,442 (7fd02677a808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:17,446 (7fd023172b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:17,446 (7fd02677a808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:17,446 (7fd023172b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:17,447 (7fd02677a808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:17,447 (7fd02312cb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:17,447 (7fd02677a808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:17,448 (7fd02677a808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:17,450 (7fd02312cb38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:17,450 (7fd02312cb38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:17,451 (7fd023172b38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:17,453 (7fd02314fb38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:17,455 (7fd02677a808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:17,456 (7fd02677a808) : DEBUG (agentkit:1132) - Creating new agent class called PlexThemeMusicAgent -2026-06-04 03:41:17,456 (7fd02677a808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.thetvdbdvdorder', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'primary_provider': False, 'prefs': False, 'name': 'Plex Theme Music'}] -2026-06-04 03:41:17,456 (7fd02677a808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_' -2026-06-04 03:41:37,057 (7fd02677a808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:37,057 (7fd02677a808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:37,057 (7fd02677a808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:37,057 (7fd02677a808) : INFO (socketinterface:184) - Socket server started on port 39625 -2026-06-04 03:41:37,058 (7fd02677a808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:37,058 (7fd02677a808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:37,058 (7fd02677a808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:37,058 (7fd02677a808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 158 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.themoviedb.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.themoviedb.log deleted file mode 100644 index 6385ebd70..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.themoviedb.log +++ /dev/null @@ -1,71 +0,0 @@ -2026-06-04 03:41:17,030 (7f2157dbd808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:17,030 (7f2157dbd808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:41:17,031 (7f2157dbd808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:17,031 (7f2157dbd808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:17,031 (7f2157dbd808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:17,031 (7f2157dbd808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:17,032 (7f2157dbd808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:17,032 (7f2157dbd808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:17,032 (7f2157dbd808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:17,032 (7f2157dbd808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:17,032 (7f2157dbd808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:17,032 (7f2157dbd808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:17,032 (7f2157dbd808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:17,033 (7f2154997b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.themoviedb' -2026-06-04 03:41:17,033 (7f2157dbd808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:17,033 (7f2157dbd808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:17,076 (7f2157dbd808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.themoviedb in namespace 'metadata' -2026-06-04 03:41:17,078 (7f2157dbd808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:17,080 (7f2157dbd808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:17,081 (7f2157dbd808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:17,084 (7f215475fb38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:17,084 (7f2157dbd808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:17,085 (7f215475fb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:17,085 (7f2157dbd808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:17,085 (7f2154719b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:17,086 (7f2157dbd808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:17,086 (7f2157dbd808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:17,099 (7f2154719b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:17,099 (7f2154719b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:17,099 (7f215475fb38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:17,101 (7f215473cb38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:17,204 (7f2157dbd808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:17,205 (7f2157dbd808) : DEBUG (messaging:69) - Exposing function GetImdbId for remote access -2026-06-04 03:41:17,205 (7f2157dbd808) : DEBUG (messaging:69) - Exposing function GetTvdbId for remote access -2026-06-04 03:41:17,205 (7f2157dbd808) : DEBUG (messaging:69) - Exposing function GetTvRageId for remote access -2026-06-04 03:41:17,205 (7f2157dbd808) : DEBUG (messaging:69) - Exposing function GetTMDbSearchResults for remote access -2026-06-04 03:41:17,205 (7f2157dbd808) : DEBUG (messaging:69) - Exposing function GetTMDbMetadata for remote access -2026-06-04 03:41:17,205 (7f2157dbd808) : DEBUG (agentkit:1132) - Creating new agent class called TMDbAgent -2026-06-04 03:41:17,206 (7f2157dbd808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': ['com.plexapp.agents.localmedia'], 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'hu', 'it', 'lv', 'lt', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'th', 'tr', 'vi', 'zh', 'ko'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'The Movie Database'}] -2026-06-04 03:41:17,206 (7f2157dbd808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_' -2026-06-04 03:41:37,054 (7f2157dbd808) : DEBUG (agentkit:1132) - Creating new agent class called TMDbAgent -2026-06-04 03:41:37,055 (7f2157dbd808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Movie'], 'accepts_from': ['com.plexapp.agents.localmedia'], 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'hu', 'it', 'lv', 'lt', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'th', 'tr', 'vi', 'zh', 'ko'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'The Movie Database'}, {'media_types': ['TV_Show'], 'accepts_from': ['com.plexapp.agents.localmedia', 'com.plexapp.agents.thetvdb'], 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb'], 'languages': ['en', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'hu', 'it', 'lv', 'lt', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'th', 'tr', 'vi', 'zh', 'ko'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'The Movie Database'}] -2026-06-04 03:41:37,055 (7f2157dbd808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK' -2026-06-04 03:41:37,062 (7f2157dbd808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:37,062 (7f2157dbd808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:37,062 (7f2157dbd808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:37,063 (7f2157dbd808) : INFO (socketinterface:184) - Socket server started on port 46579 -2026-06-04 03:41:37,063 (7f2157dbd808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:37,063 (7f2157dbd808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:37,063 (7f2157dbd808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:37,063 (7f2157dbd808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 154 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.thetvdb.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.thetvdb.log deleted file mode 100644 index 0b57c0e91..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.agents.thetvdb.log +++ /dev/null @@ -1,81 +0,0 @@ -2026-06-04 03:41:37,425 (7f16c8431808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:37,425 (7f16c8431808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:41:37,425 (7f16c8431808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:37,426 (7f16c8431808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:37,426 (7f16c8431808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:37,426 (7f16c8431808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:37,426 (7f16c8431808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:37,426 (7f16c8431808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:37,427 (7f16c8431808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:37,427 (7f16c8431808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:37,427 (7f16c8431808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:37,427 (7f16c8431808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:37,427 (7f16c8431808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:37,427 (7f16c8431808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:37,427 (7f16c4ff7b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/com.plexapp.agents.thetvdb' -2026-06-04 03:41:37,428 (7f16c8431808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:37,473 (7f16c8431808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.agents.thetvdb in namespace 'metadata' -2026-06-04 03:41:37,475 (7f16c8431808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:37,477 (7f16c8431808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:37,478 (7f16c8431808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:37,481 (7f16c4e2ab38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:37,481 (7f16c8431808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:37,482 (7f16c4e2ab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:37,482 (7f16c8431808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:37,482 (7f16c4de4b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:37,483 (7f16c8431808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:37,483 (7f16c8431808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:37,498 (7f16c4de4b38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:37,498 (7f16c4de4b38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:37,498 (7f16c4e2ab38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:37,500 (7f16c4e07b38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:37,621 (7f16c8431808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:37,621 (7f16c8431808) : DEBUG (agentkit:1132) - Creating new agent class called TVDBAgent -2026-06-04 03:41:37,622 (7f16c8431808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['TV_Show'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'fr', 'zh', 'sv', 'no', 'da', 'fi', 'nl', 'de', 'it', 'es', 'pl', 'hu', 'el', 'tr', 'ru', 'he', 'ja', 'pt', 'cs', 'ko', 'sl', 'hr'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'TheTVDB'}] -2026-06-04 03:41:37,622 (7f16c8431808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__' -2026-06-04 03:41:57,122 (7f16c8431808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:57,122 (7f16c8431808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:57,122 (7f16c8431808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:57,122 (7f16c8431808) : INFO (socketinterface:184) - Socket server started on port 46809 -2026-06-04 03:41:57,122 (7f16c8431808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:57,122 (7f16c8431808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:57,123 (7f16c8431808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:57,123 (7f16c8431808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 151 bytes -2026-06-04 03:41:57,126 (7f16c42dcb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.agents.thetvdb -2026-06-04 03:41:57,126 (7f16c42b5b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.agents.thetvdb -2026-06-04 03:41:57,131 (7f16c42dcb38) : CRITICAL (runtime:493) - Exception matching route for path "/" (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route - raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) -FrameworkException: No route found matching '/' - -2026-06-04 03:41:57,131 (7f16c42dcb38) : ERROR (runtime:846) - Could not find route matching /:/plugins/com.plexapp.agents.thetvdb -2026-06-04 03:41:57,131 (7f16c42b5b38) : CRITICAL (runtime:493) - Exception matching route for path "/" (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route - raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) -FrameworkException: No route found matching '/' - -2026-06-04 03:41:57,131 (7f16c42b5b38) : ERROR (runtime:846) - Could not find route matching /:/plugins/com.plexapp.agents.thetvdb -2026-06-04 03:41:57,132 (7f16c42dcb38) : DEBUG (runtime:88) - Sending packed state data (107 bytes) -2026-06-04 03:41:57,132 (7f16c42b5b38) : DEBUG (runtime:88) - Sending packed state data (107 bytes) -2026-06-04 03:41:57,132 (7f16c42dcb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:57,132 (7f16c42b5b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.system.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.system.log deleted file mode 100644 index b181caf92..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/com.plexapp.system.log +++ /dev/null @@ -1,775 +0,0 @@ -2026-06-04 03:41:14,898 (7f8fe32bc808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:14,898 (7f8fe32bc808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:41:14,898 (7f8fe32bc808) : DEBUG (core:365) - Extending whitelist: ['cgi', 'tempfile'] -2026-06-04 03:41:14,898 (7f8fe32bc808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:14,899 (7f8fe32bc808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:14,899 (7f8fe32bc808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:14,899 (7f8fe32bc808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:14,900 (7f8fe32bc808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:14,900 (7f8fe32bc808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:14,900 (7f8fe32bc808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:14,900 (7f8fe32bc808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:14,900 (7f8fe32bc808) : WARNING (data:179) - Error decoding with simplejson, using demjson instead (this will cause a performance hit) - Expecting property name enclosed in double quotes: line 26 column 1 (char 1078) -2026-06-04 03:41:14,901 (7f8fe32bc808) : DEBUG (localization:427) - Loaded en strings -2026-06-04 03:41:14,901 (7f8fe32bc808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:14,901 (7f8fe32bc808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:14,901 (7f8fe32bc808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:14,901 (7f8fe32bc808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:14,901 (7f8fe32bc808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:14,942 (7f8fe32bc808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.system in namespace 'metadata' -2026-06-04 03:41:14,946 (7f8fdfcd0b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:14,946 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:14,947 (7f8fdfcd0b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:14,947 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:14,948 (7f8fdfc8ab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:14,948 (7f8fe32bc808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:14,949 (7f8fe32bc808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:14,949 (7f8fdfc8ab38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400' -2026-06-04 03:41:14,949 (7f8fdfcd0b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:14,949 (7f8fdfc8ab38) : WARNING (core:541) - Unable to retrieve the machine identifier or server version. -2026-06-04 03:41:14,949 (7f8fdfcd0b38) : ERROR (services:272) - Unable to load services from system. Loading from the current bundle only. -2026-06-04 03:41:14,950 (7f8fdfcd0b38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:14,951 (7f8fdfcadb38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:14,956 (7f8fe32bc808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:14,956 (7f8fe32bc808) : DEBUG (runtime:640) - Adding a prefix handler for 'System' ('/system') -2026-06-04 03:41:15,166 (7f8fe32bc808) : INFO (__init__:35) - Starting System 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:15,166 (7f8fe32bc808) : DEBUG (runtime:640) - Adding a prefix handler for 'Player' ('/player') -2026-06-04 03:41:15,167 (7f8fe32bc808) : INFO (datakit:118) - No default dictionary file -2026-06-04 03:41:15,167 (7f8fe32bc808) : DEBUG (agentservice:52) - Starting the agent service -2026-06-04 03:41:15,207 (7f8fe32bc808) : DEBUG (accessor:68) - Creating a new model access point for provider com.plexapp.system in namespace 'metadata' -2026-06-04 03:41:15,209 (7f8fe32bc808) : DEBUG (bundleservice:65) - Starting the bundle service -2026-06-04 03:41:15,210 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:15,210 (7f8fe32bc808) : DEBUG (playerservice:12) - Starting the player service -2026-06-04 03:41:15,210 (7f8fe32bc808) : DEBUG (flagservice:13) - Starting the media flag service -2026-06-04 03:41:15,210 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:15,211 (7f8fdfa9db38) : INFO (agentservice:167) - Agents in com.plexapp.agents.fanarttv not in info dictionary - pinging! -2026-06-04 03:41:15,211 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,211 (7f8fe32bc808) : DEBUG (peerservice:141) - Starting the peer service -2026-06-04 03:41:15,211 (7f8fdfa9db38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.fanarttv' -2026-06-04 03:41:15,212 (7f8fdfa7ab38) : DEBUG (peerservice:164) - Fetching the current list of servers -2026-06-04 03:41:15,212 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'refresh_servers' -2026-06-04 03:41:15,212 (7f8fdfa9db38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.fanarttv' -2026-06-04 03:41:15,213 (7f8fdfa9db38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,213 (7f8fe32bc808) : DEBUG (runtime:1150) - Scheduled a timed thread named 'refresh_servers' -2026-06-04 03:41:15,213 (7f8fdfa7ab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/servers' -2026-06-04 03:41:15,213 (7f8fe32bc808) : DEBUG (streamservice:18) - Starting the stream service -2026-06-04 03:41:15,214 (7f8fe32bc808) : CRITICAL (runtime:709) - Private handlers are no longer supported; couldn't register > -2026-06-04 03:41:15,214 (7f8fe32bc808) : DEBUG (runtime:1150) - Scheduled a timed thread named 'invalidation_timer' -2026-06-04 03:41:15,215 (7f8fdfa7ab38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/servers' -2026-06-04 03:41:15,215 (7f8fe32bc808) : DEBUG (proxyservice:12) - Starting the proxy service -2026-06-04 03:41:15,215 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,215 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in org.musicbrainz.agents.music not in info dictionary - pinging! -2026-06-04 03:41:15,216 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,216 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/org.musicbrainz.agents.music' -2026-06-04 03:41:15,218 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,218 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/org.musicbrainz.agents.music' -2026-06-04 03:41:15,218 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,218 (7f8fdf4b9b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.lyricfind not in info dictionary - pinging! -2026-06-04 03:41:15,219 (7f8fdf4b9b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.lyricfind' -2026-06-04 03:41:15,219 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,220 (7f8fdfa7ab38) : CRITICAL (runtime:1128) - Exception in thread named 'refresh_servers' (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1126, in _start_thread - f(*args, **kwargs) - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/System.bundle/Contents/Code/peerservice.py", line 169, in refresh_servers - servers_el = self.get_servers_el() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/System.bundle/Contents/Code/peerservice.py", line 165, in get_servers_el - return XML.ElementFromURL('http://127.0.0.1:32400/servers', cacheTime = 0) - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/api/parsekit.py", line 344, in ElementFromURL - method=method, - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/api/networkkit.py", line 67, in _http_request - req = self._core.networking.http_request(url, *args, **kwargs) - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 352, in http_request - return HTTPRequest(self._core, url, data, h, url_cache, encoding, errors, timeout, immediate, sleep, opener, follow_redirects, method) - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 119, in __init__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 503: Service Unavailable - -2026-06-04 03:41:15,220 (7f8fdf4b9b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.lyricfind' -2026-06-04 03:41:15,220 (7f8fdf4b9b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,221 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,221 (7f8fdf496b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:15,221 (7f8fdf4b9b38) : INFO (agentservice:129) - Agent info: {} -2026-06-04 03:41:15,221 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'update_attribution_flags_inner' -2026-06-04 03:41:15,222 (7f8fdf496b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,222 (7f8fe32bc808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:15,223 (7f8fdf4b9b38) : INFO (datakit:131) - Saved the dictionary file -2026-06-04 03:41:15,223 (7f8fe32bc808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:15,224 (7f8fdf496b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,224 (7f8fdf496b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,224 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.themoviedb not in info dictionary - pinging! -2026-06-04 03:41:15,224 (7f8fe32bc808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:15,225 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,225 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.themoviedb' -2026-06-04 03:41:15,225 (7f8fe32bc808) : INFO (socketinterface:184) - Socket server started on port 33755 -2026-06-04 03:41:15,225 (7f8fe32bc808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:15,225 (7f8fe32bc808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:15,226 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.themoviedb' -2026-06-04 03:41:15,226 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,226 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,227 (7f8fdfa7ab38) : INFO (agentservice:167) - Agents in com.plexapp.agents.localmedia not in info dictionary - pinging! -2026-06-04 03:41:15,227 (7f8fdfa7ab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.localmedia' -2026-06-04 03:41:15,228 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,228 (7f8fdfa7ab38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.localmedia' -2026-06-04 03:41:15,228 (7f8fdfa7ab38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,229 (7f8fdf496b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.none not in info dictionary - pinging! -2026-06-04 03:41:15,229 (7f8fdf496b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.none' -2026-06-04 03:41:15,229 (7f8fe32bc808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:15,230 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,230 (7f8fdf496b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.none' -2026-06-04 03:41:15,230 (7f8fdf496b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,231 (7f8fe32bc808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 486 bytes -2026-06-04 03:41:15,231 (7f8fdf381b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.plexthememusic not in info dictionary - pinging! -2026-06-04 03:41:15,231 (7f8fdf381b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.plexthememusic' -2026-06-04 03:41:15,231 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,232 (7f8fdf381b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.plexthememusic' -2026-06-04 03:41:15,233 (7f8fdf30ab38) : DEBUG (runtime:717) - Handling request GET /system/agents -2026-06-04 03:41:15,233 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,233 (7f8fdf381b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,233 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.htbackdrops not in info dictionary - pinging! -2026-06-04 03:41:15,234 (7f8fdfae3b38) : INFO (bundleservice:131) - Found duplicate identifier at /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/TheTVDBv4.bundle for bundled plugin (com.plexapp.agents.thetvdb), ignoring duplicate plugin. -2026-06-04 03:41:15,234 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.htbackdrops' -2026-06-04 03:41:15,235 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,238 (7f8fdfae3b38) : DEBUG (runtime:1117) - Created a thread named 'remove_unavailable_agents' -2026-06-04 03:41:15,238 (7f8fdfae3b38) : DEBUG (bundleservice:81) - Started the bundle service -2026-06-04 03:41:15,239 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.htbackdrops' -2026-06-04 03:41:15,239 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,240 (7f8fdfa7ab38) : INFO (agentservice:167) - Agents in com.plexapp.agents.movieposterdb not in info dictionary - pinging! -2026-06-04 03:41:15,240 (7f8fdf097b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,241 (7f8fdfa7ab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.movieposterdb' -2026-06-04 03:41:15,242 (7f8fdfa7ab38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.movieposterdb' -2026-06-04 03:41:15,242 (7f8fdfa7ab38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,243 (7f8fdf496b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.lastfm not in info dictionary - pinging! -2026-06-04 03:41:15,243 (7f8fdf496b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.lastfm' -2026-06-04 03:41:15,244 (7f8fdf30ab38) : DEBUG (runtime:814) - Found route matching /system/agents -2026-06-04 03:41:15,244 (7f8fdf496b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.lastfm' -2026-06-04 03:41:15,245 (7f8fdf496b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,245 (7f8fdf0bab38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:15,245 (7f8fdf0bab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,246 (7f8fdf30ab38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,246 (7f8fdf0bab38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,247 (7f8fdf0bab38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,247 (7f8fdfac0b38) : DEBUG (flagservice:46) - Started the media flag service -2026-06-04 03:41:15,247 (7f8fdf381b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.imdb not in info dictionary - pinging! -2026-06-04 03:41:15,247 (7f8fdf381b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.imdb' -2026-06-04 03:41:15,248 (7f8fdf381b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.imdb' -2026-06-04 03:41:15,248 (7f8fdf381b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,248 (7f8fdfae3b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:15,248 (7f8fdfae3b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,249 (7f8fdfae3b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,249 (7f8fdfae3b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,249 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:15,249 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,250 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,250 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,250 (7f8fdf30ab38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 130 bytes -2026-06-04 03:41:15,613 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.lastfm -2026-06-04 03:41:15,613 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.fanarttv -2026-06-04 03:41:15,618 (7f8fdf496b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.htbackdrops -2026-06-04 03:41:15,622 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.lastfm -2026-06-04 03:41:15,622 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.fanarttv -2026-06-04 03:41:15,622 (7f8fdf496b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.htbackdrops -2026-06-04 03:41:15,622 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,623 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,623 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:15,623 (7f8fdf496b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,623 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:15,624 (7f8fdf496b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:15,657 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:15,661 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:15,662 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:15,662 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:15,663 (7f8fdf496b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:15,663 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://resources-cdn.plexapp.com/hashes.json' -2026-06-04 03:41:15,664 (7f8fdf496b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:15,678 (7f8fdf9fdb38) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1291, in get_resource_hashes - json = self._core.networking.http_request("http://resources-cdn.plexapp.com/hashes.json", timeout=5).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 429, in open - response = self._open(req, data) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 447, in _open - '_open', req) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 1228, in http_open - return self.do_open(httplib.HTTPConnection, req) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 1198, in do_open - raise URLError(err) -URLError: - -2026-06-04 03:41:15,678 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,679 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:15,679 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,679 (7f8fdf496b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,680 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:15,680 (7f8fdf496b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:15,686 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:15,687 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:15,687 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:15,688 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,688 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:15,688 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:15,688 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:15,689 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:15,689 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,689 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:15,689 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:15,690 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:15,690 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:15,690 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,691 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:15,708 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK -2026-06-04 03:41:15,708 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:15,709 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK -2026-06-04 03:41:15,709 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.htbackdrops: [{'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['ab', 'aa', 'af', 'ak', 'sq', 'am', 'ar', 'an', 'hy', 'as', 'av', 'ae', 'ay', 'az', 'bm', 'ba', 'eu', 'be', 'bn', 'bh', 'bi', 'bs', 'pb', 'br', 'bg', 'my', 'ca', 'ch', 'ce', 'ny', 'zh', 'cu', 'cv', 'kw', 'co', 'cr', 'hr', 'cs', 'da', 'dv', 'nl', 'dz', 'en', 'eo', 'et', 'ee', 'fo', 'fj', 'fi', 'fr', 'fy', 'ff', 'gd', 'gl', 'lg', 'ka', 'de', 'el', 'gn', 'gu', 'ht', 'ha', 'he', 'hz', 'hi', 'ho', 'hu', 'is', 'io', 'ig', 'id', 'ia', 'ie', 'iu', 'ik', 'ga', 'it', 'ja', 'jv', 'kl', 'kn', 'kr', 'ks', 'kk', 'km', 'ki', 'rw', 'ky', 'kv', 'kg', 'ko', 'kj', 'ku', 'lo', 'la', 'lv', 'li', 'ln', 'lt', 'lu', 'lb', 'mk', 'mg', 'ms', 'ml', 'mt', 'gv', 'mi', 'mr', 'mh', 'mo', 'mn', 'na', 'nv', 'ng', 'ne', 'xn', 'nd', 'no', 'nb', 'nn', 'oc', 'oj', 'or', 'om', 'os', 'pi', 'pa', 'fa', 'pl', 'pt', 'ps', 'qu', 'rm', 'ro', 'rn', 'ru', 'se', 'sm', 'sg', 'sa', 'sc', 'sr', 'sn', 'ii', 'sd', 'si', 'sk', 'sl', 'so', 'st', 'nr', 'es', 'su', 'sw', 'ss', 'sv', 'tl', 'ty', 'tg', 'ta', 'tt', 'te', 'th', 'bo', 'ti', 'to', 'ts', 'tn', 'tr', 'tk', 'tw', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'cy', 'wo', 'xh', 'yi', 'yo', 'za', 'zu'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Home Theater Backdrops'}] -2026-06-04 03:41:15,710 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,710 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:15,713 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents -2026-06-04 03:41:15,713 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents -2026-06-04 03:41:15,714 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,714 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:15,714 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,715 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,715 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,716 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 246 bytes -2026-06-04 03:41:15,729 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -2026-06-04 03:41:15,730 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:15,730 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -2026-06-04 03:41:15,730 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.fanarttv: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}] -2026-06-04 03:41:15,731 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,731 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:15,733 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -2026-06-04 03:41:15,733 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:15,734 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -2026-06-04 03:41:15,734 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.fanarttv: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}] -2026-06-04 03:41:15,734 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,734 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:15,737 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK -2026-06-04 03:41:15,737 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:15,737 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK -2026-06-04 03:41:15,737 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.fanarttv: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}] -2026-06-04 03:41:15,738 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,738 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:15,740 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK -2026-06-04 03:41:15,741 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:15,741 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK -2026-06-04 03:41:15,741 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.fanarttv: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}, {'media_types': ['Album'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Fanart.tv'}] -2026-06-04 03:41:15,742 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,742 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:15,746 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents -2026-06-04 03:41:15,746 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents -2026-06-04 03:41:15,746 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,747 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:15,747 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,748 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,748 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,748 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 342 bytes -2026-06-04 03:41:15,780 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ -2026-06-04 03:41:15,780 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:15,781 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ -2026-06-04 03:41:15,781 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.lastfm: [{'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'sv', 'fr', 'es', 'de', 'pl', 'it', 'pt', 'ja', 'tr', 'ru', 'zh'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Last.fm'}] -2026-06-04 03:41:15,781 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,781 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:15,784 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ -2026-06-04 03:41:15,784 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:15,784 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ -2026-06-04 03:41:15,785 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.lastfm: [{'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'sv', 'fr', 'es', 'de', 'pl', 'it', 'pt', 'ja', 'tr', 'ru', 'zh'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Last.fm'}, {'media_types': ['Album'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'sv', 'fr', 'es', 'de', 'pl', 'it', 'pt', 'ja', 'tr', 'ru', 'zh'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Last.fm'}] -2026-06-04 03:41:15,785 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:15,785 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:15,788 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents -2026-06-04 03:41:15,789 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents -2026-06-04 03:41:15,789 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:15,789 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:15,790 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,790 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:15,790 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:15,791 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 1242 bytes -2026-06-04 03:41:16,072 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.localmedia -2026-06-04 03:41:16,072 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.localmedia -2026-06-04 03:41:16,073 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,073 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:16,112 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.lyricfind -2026-06-04 03:41:16,113 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.lyricfind -2026-06-04 03:41:16,113 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,113 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:16,118 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:16,118 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:16,119 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,119 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:16,125 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:16,126 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,126 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:16,126 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,126 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:16,153 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.movieposterdb -2026-06-04 03:41:16,154 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.movieposterdb -2026-06-04 03:41:16,154 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,154 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:16,160 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:16,160 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:16,161 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,161 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:16,167 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:16,167 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,168 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:16,168 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,168 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:16,184 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ -2026-06-04 03:41:16,185 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,185 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ -2026-06-04 03:41:16,185 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.lyricfind: [{'media_types': ['Album'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.lastfm', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'LyricFind'}] -2026-06-04 03:41:16,186 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,186 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,189 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents -2026-06-04 03:41:16,189 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents -2026-06-04 03:41:16,190 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:16,190 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:16,193 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:16,194 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:16,194 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:16,195 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 1339 bytes -2026-06-04 03:41:16,198 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:16,199 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:16,199 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,199 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:16,205 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:16,205 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,206 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:16,206 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,206 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:16,215 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ -2026-06-04 03:41:16,215 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,216 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ -2026-06-04 03:41:16,216 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.movieposterdb: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'CineMaterial'}] -2026-06-04 03:41:16,216 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,216 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,219 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents -2026-06-04 03:41:16,219 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents -2026-06-04 03:41:16,220 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:16,220 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:16,220 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:16,221 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:16,221 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:16,221 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 1440 bytes -2026-06-04 03:41:16,391 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -2026-06-04 03:41:16,391 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,391 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -2026-06-04 03:41:16,391 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}] -2026-06-04 03:41:16,392 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,392 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,394 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -2026-06-04 03:41:16,394 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,395 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -2026-06-04 03:41:16,395 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}] -2026-06-04 03:41:16,396 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,396 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,398 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -2026-06-04 03:41:16,399 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,399 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -2026-06-04 03:41:16,399 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] -2026-06-04 03:41:16,400 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,400 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,403 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -2026-06-04 03:41:16,404 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,404 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -2026-06-04 03:41:16,404 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] -2026-06-04 03:41:16,405 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,405 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,408 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -2026-06-04 03:41:16,408 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,408 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -2026-06-04 03:41:16,409 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Album'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Albums)'}] -2026-06-04 03:41:16,409 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,409 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,412 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents -2026-06-04 03:41:16,412 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents -2026-06-04 03:41:16,413 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:16,413 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:16,413 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:16,414 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:16,414 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:16,415 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 1538 bytes -2026-06-04 03:41:16,554 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/org.musicbrainz.agents.music -2026-06-04 03:41:16,555 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/org.musicbrainz.agents.music -2026-06-04 03:41:16,555 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,555 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:16,581 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.none -2026-06-04 03:41:16,581 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.none -2026-06-04 03:41:16,582 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,582 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:16,598 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:16,599 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:16,599 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,599 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:16,605 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:16,606 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,606 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:16,606 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,607 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:16,615 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK -2026-06-04 03:41:16,616 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,616 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK -2026-06-04 03:41:16,616 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from org.musicbrainz.agents.music: [{'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'zh', 'hr', 'cs', 'da', 'nl', 'fi', 'fr', 'de', 'el', 'hu', 'id', 'it', 'ja', 'ko', 'nn', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'es', 'sv', 'th', 'tr', 'vi', 'xx'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Musicbrainz'}] -2026-06-04 03:41:16,616 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,616 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,619 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK -2026-06-04 03:41:16,619 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,620 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK -2026-06-04 03:41:16,620 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from org.musicbrainz.agents.music: [{'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'zh', 'hr', 'cs', 'da', 'nl', 'fi', 'fr', 'de', 'el', 'hu', 'id', 'it', 'ja', 'ko', 'nn', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'es', 'sv', 'th', 'tr', 'vi', 'xx'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Musicbrainz'}, {'media_types': ['Album'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'zh', 'hr', 'cs', 'da', 'nl', 'fi', 'fr', 'de', 'el', 'hu', 'id', 'it', 'ja', 'ko', 'nn', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'es', 'sv', 'th', 'tr', 'vi', 'xx'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Musicbrainz'}] -2026-06-04 03:41:16,620 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,620 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,623 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /system/agents -2026-06-04 03:41:16,624 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /system/agents -2026-06-04 03:41:16,624 (7f8fdf9fdb38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:16,624 (7f8fdfac0b38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:16,624 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:16,625 (7f8fdf9fdb38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:16,625 (7f8fdf9fdb38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:16,627 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:16,628 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 3457 bytes -2026-06-04 03:41:16,628 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:16,628 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,629 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:16,635 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:16,635 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,636 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:16,636 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,636 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:16,651 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ -2026-06-04 03:41:16,652 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,652 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ -2026-06-04 03:41:16,652 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.none: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media'}] -2026-06-04 03:41:16,653 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,653 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,655 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK -2026-06-04 03:41:16,655 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,655 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK -2026-06-04 03:41:16,655 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.none: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Shows'}] -2026-06-04 03:41:16,656 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,656 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,658 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ -2026-06-04 03:41:16,658 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,659 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ -2026-06-04 03:41:16,659 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.none: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Shows'}, {'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Artists'}] -2026-06-04 03:41:16,659 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,659 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,662 (7f8fdfac0b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK -2026-06-04 03:41:16,662 (7f8fdfac0b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,662 (7f8fdfac0b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK -2026-06-04 03:41:16,663 (7f8fdfac0b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.none: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Shows'}, {'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Artists'}, {'media_types': ['Album'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Albums'}] -2026-06-04 03:41:16,663 (7f8fdfac0b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,663 (7f8fdfac0b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,666 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK -2026-06-04 03:41:16,666 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,667 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK -2026-06-04 03:41:16,667 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.none: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media'}, {'media_types': ['TV_Show'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Shows'}, {'media_types': ['Artist'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Artists'}, {'media_types': ['Album'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Personal Media Albums'}, {'media_types': ['Photo'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'ca', 'cs', 'cy', 'da', 'de', 'el', 'es', 'et', 'fa', 'fi', 'fr', 'he', 'hi', 'hr', 'ht', 'hu', 'id', 'it', 'ja', 'ko', 'lt', 'lv', 'ms', 'mt', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sk', 'sv', 'sl', 'sr', 'th', 'tr', 'uk', 'ur', 'vi', 'zh', 'xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Photos'}] -2026-06-04 03:41:16,668 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,668 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:16,670 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/agents -2026-06-04 03:41:16,671 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/agents -2026-06-04 03:41:16,671 (7f8fdf496b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:16,671 (7f8fdf9fdb38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:16,671 (7f8fdf496b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:16,672 (7f8fdf496b38) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:16,673 (7f8fdf496b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:16,674 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 5262 bytes -2026-06-04 03:41:16,764 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.imdb -2026-06-04 03:41:16,765 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.imdb -2026-06-04 03:41:16,765 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,765 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:16,807 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:16,808 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:16,808 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,809 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:16,815 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:16,815 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:16,815 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:16,816 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:16,816 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:17,035 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.themoviedb -2026-06-04 03:41:17,035 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.themoviedb -2026-06-04 03:41:17,035 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:17,036 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:17,042 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ -2026-06-04 03:41:17,042 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:17,042 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ -2026-06-04 03:41:17,043 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.imdb: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.themoviedb'], 'languages': ['en', 'sv', 'fr', 'es', 'nl', 'de', 'it', 'da', 'ar', 'ca', 'zh', 'cs', 'et', 'fi', 'el', 'he', 'hi', 'hu', 'id', 'ja', 'ko', 'lv', 'no', 'fa', 'pl', 'pt', 'ro', 'ru', 'sk', 'th', 'tr', 'uk', 'vi'], 'persist_stored_files': True, 'version': 0, 'accepts_from': ['com.plexapp.agents.localmedia'], 'prefs': True, 'name': 'Plex Movie (Legacy)'}] -2026-06-04 03:41:17,043 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:17,043 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:17,046 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/agents -2026-06-04 03:41:17,046 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/agents -2026-06-04 03:41:17,047 (7f8fdf9fdb38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:17,047 (7f8fdf496b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:17,047 (7f8fdf496b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:17,079 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:17,079 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:17,080 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:17,080 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:17,086 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:17,087 (7f8fdf381b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:17,087 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:17,087 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:17,087 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:17,207 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ -2026-06-04 03:41:17,208 (7f8fdf381b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:17,208 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ -2026-06-04 03:41:17,396 (7f8fdf30ab38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.plexthememusic -2026-06-04 03:41:17,397 (7f8fdf30ab38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.plexthememusic -2026-06-04 03:41:17,397 (7f8fdf30ab38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:17,397 (7f8fdf30ab38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:17,440 (7f8fdf30ab38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:17,440 (7f8fdf30ab38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:17,441 (7f8fdf30ab38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:17,441 (7f8fdf30ab38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:17,448 (7f8fdf30ab38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:17,449 (7f8fdf30ab38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:17,449 (7f8fdf30ab38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:17,450 (7f8fdf30ab38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:17,450 (7f8fdf30ab38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:17,457 (7f8fdf30ab38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -2026-06-04 03:41:17,457 (7f8fdf30ab38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:17,458 (7f8fdf30ab38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -2026-06-04 03:41:20,234 (7f8fdf0bab38) : DEBUG (runtime:717) - Handling request GET /system/notify/serverUpdated?host=127.0.0.1 -2026-06-04 03:41:20,234 (7f8fdf0bab38) : DEBUG (runtime:814) - Found route matching /system/notify/serverUpdated -2026-06-04 03:41:20,234 (7f8fdf0bab38) : DEBUG (peerservice:386) - Handling server update notification (127.0.0.1) -2026-06-04 03:41:20,235 (7f8fdf0bab38) : DEBUG (peerservice:189) - Updating servers (True/False True/True/True) -2026-06-04 03:41:20,235 (7f8fdf0bab38) : DEBUG (peerservice:164) - Fetching the current list of servers -2026-06-04 03:41:20,235 (7f8fdf0bab38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/servers' -2026-06-04 03:41:20,236 (7f8fdf0bab38) : DEBUG (peerservice:198) - Found 1 servers -2026-06-04 03:41:20,236 (7f8fdf0bab38) : DEBUG (peerservice:214) - Ignoring b4e051156514c3673d6305f3df48b2bd645d6fd5 because host != 127.0.0.1 (172.22.0.2) -2026-06-04 03:41:20,237 (7f8fdf0bab38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:20,251 (7f8fdfae3b38) : INFO (datakit:131) - Saved the dictionary file -2026-06-04 03:41:37,051 (7f8fdf496b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:37,052 (7f8fdf381b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.themoviedb: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'hu', 'it', 'lv', 'lt', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'th', 'tr', 'vi', 'zh', 'ko'], 'persist_stored_files': True, 'version': 0, 'accepts_from': ['com.plexapp.agents.localmedia'], 'prefs': True, 'name': 'The Movie Database'}] -2026-06-04 03:41:37,052 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:37,052 (7f8fdf30ab38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.plexthememusic: [{'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.thetvdbdvdorder', 'com.plexapp.agents.themoviedb'], 'languages': ['xn'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': False, 'name': 'Plex Theme Music'}] -2026-06-04 03:41:37,053 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:37,054 (7f8fdf30ab38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:37,055 (7f8fdf30ab38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:37,057 (7f8fdf496b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK -2026-06-04 03:41:37,057 (7f8fdf496b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:37,057 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 7374 bytes -2026-06-04 03:41:37,058 (7f8fdf496b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK -2026-06-04 03:41:37,058 (7f8fdf496b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.themoviedb: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'hu', 'it', 'lv', 'lt', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'th', 'tr', 'vi', 'zh', 'ko'], 'persist_stored_files': True, 'version': 0, 'accepts_from': ['com.plexapp.agents.localmedia'], 'prefs': True, 'name': 'The Movie Database'}, {'media_types': ['TV_Show'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb'], 'languages': ['en', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hr', 'hu', 'it', 'lv', 'lt', 'nl', 'no', 'pl', 'pt', 'ru', 'sk', 'sv', 'th', 'tr', 'vi', 'zh', 'ko'], 'persist_stored_files': True, 'version': 0, 'accepts_from': ['com.plexapp.agents.localmedia', 'com.plexapp.agents.thetvdb'], 'prefs': True, 'name': 'The Movie Database'}] -2026-06-04 03:41:37,059 (7f8fdf496b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:37,059 (7f8fdf496b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:37,064 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/agents -2026-06-04 03:41:37,064 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/agents -2026-06-04 03:41:37,065 (7f8fdf9fdb38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:37,065 (7f8fdf496b38) : INFO (agentservice:167) - Agents in com.plexapp.agents.thetvdb not in info dictionary - pinging! -2026-06-04 03:41:37,065 (7f8fdf496b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.agents.thetvdb' -2026-06-04 03:41:37,429 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.thetvdb -2026-06-04 03:41:37,430 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.thetvdb -2026-06-04 03:41:37,430 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:37,430 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:37,476 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:37,476 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:37,476 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:37,476 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:37,483 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:37,483 (7f8fdf381b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:37,484 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:37,484 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:37,484 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:37,623 (7f8fdf381b38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ -2026-06-04 03:41:37,624 (7f8fdf381b38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:37,624 (7f8fdf381b38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ -2026-06-04 03:41:42,054 (7f8fdfae3b38) : INFO (datakit:131) - Saved the dictionary file -2026-06-04 03:41:57,118 (7f8fdf496b38) : WARNING (agentservice:169) - We weren't able to get information from the server about the agents. -2026-06-04 03:41:57,119 (7f8fdf381b38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.thetvdb: [{'media_types': ['TV_Show'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'fr', 'zh', 'sv', 'no', 'da', 'fi', 'nl', 'de', 'it', 'es', 'pl', 'hu', 'el', 'tr', 'ru', 'he', 'ja', 'pt', 'cs', 'ko', 'sl', 'hr'], 'persist_stored_files': True, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'TheTVDB'}] -2026-06-04 03:41:57,120 (7f8fdf381b38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:57,120 (7f8fdf381b38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:57,123 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 8986 bytes -2026-06-04 03:41:57,491 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.localmedia -2026-06-04 03:41:57,491 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.localmedia -2026-06-04 03:41:57,492 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:57,492 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:57,534 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:57,535 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:57,535 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:57,535 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:57,542 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:57,543 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:57,543 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:57,543 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:57,543 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:57,809 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -2026-06-04 03:41:57,810 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:57,810 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -2026-06-04 03:41:57,810 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}] -2026-06-04 03:41:57,810 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:57,811 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:57,813 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -2026-06-04 03:41:57,814 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:57,814 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -2026-06-04 03:41:57,815 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}] -2026-06-04 03:41:57,815 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:57,815 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:57,818 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -2026-06-04 03:41:57,818 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:57,818 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -2026-06-04 03:41:57,819 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] -2026-06-04 03:41:57,819 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:57,819 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:57,822 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -2026-06-04 03:41:57,822 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:57,822 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -2026-06-04 03:41:57,823 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] -2026-06-04 03:41:57,823 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:57,823 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:57,826 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -2026-06-04 03:41:57,827 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:57,827 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -2026-06-04 03:41:57,828 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Album'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Albums)'}] -2026-06-04 03:41:57,828 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:57,828 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:58,191 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.imdb -2026-06-04 03:41:58,191 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.imdb -2026-06-04 03:41:58,192 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:58,192 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:41:58,238 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:58,238 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:41:58,238 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:58,238 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:41:58,245 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:58,245 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:58,246 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:41:58,246 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:58,246 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:41:58,470 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ -2026-06-04 03:41:58,470 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:41:58,471 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ -2026-06-04 03:41:58,471 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.imdb: [{'media_types': ['Movie'], 'primary_provider': True, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.themoviedb'], 'languages': ['en', 'sv', 'fr', 'es', 'nl', 'de', 'it', 'da', 'ar', 'ca', 'zh', 'cs', 'et', 'fi', 'el', 'he', 'hi', 'hu', 'id', 'ja', 'ko', 'lv', 'no', 'fa', 'pl', 'pt', 'ro', 'ru', 'sk', 'th', 'tr', 'uk', 'vi'], 'persist_stored_files': True, 'version': 0, 'accepts_from': ['com.plexapp.agents.localmedia'], 'prefs': True, 'name': 'Plex Movie (Legacy)'}] -2026-06-04 03:41:58,471 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:41:58,471 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:41:59,835 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/agents -2026-06-04 03:41:59,835 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/agents -2026-06-04 03:41:59,836 (7f8fdf9fdb38) : DEBUG (runtime:1117) - Created a thread named 'ensure_agent_info_exists_inner' -2026-06-04 03:41:59,838 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] MediaContainer, 8986 bytes -2026-06-04 03:42:00,200 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /system/messaging/clear_events/com.plexapp.agents.localmedia -2026-06-04 03:42:00,201 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /system/messaging/clear_events/com.plexapp.agents.localmedia -2026-06-04 03:42:00,201 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:42:00,201 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 0 bytes -2026-06-04 03:42:00,245 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:42:00,245 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/resourceHashes -2026-06-04 03:42:00,246 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:42:00,246 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:42:00,252 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:42:00,252 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:42:00,252 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -2026-06-04 03:42:00,253 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:42:00,253 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 516 bytes -2026-06-04 03:42:00,506 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -2026-06-04 03:42:00,507 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:42:00,507 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -2026-06-04 03:42:00,507 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}] -2026-06-04 03:42:00,508 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:42:00,508 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:42:00,509 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -2026-06-04 03:42:00,510 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:42:00,510 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -2026-06-04 03:42:00,510 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}] -2026-06-04 03:42:00,511 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:42:00,511 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:42:00,513 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -2026-06-04 03:42:00,513 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:42:00,513 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -2026-06-04 03:42:00,513 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] -2026-06-04 03:42:00,514 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:42:00,514 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:42:00,517 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -2026-06-04 03:42:00,517 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:42:00,517 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -2026-06-04 03:42:00,518 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}] -2026-06-04 03:42:00,518 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:42:00,518 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:42:00,521 (7f8fdf9fdb38) : DEBUG (runtime:717) - Handling request GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -2026-06-04 03:42:00,521 (7f8fdf9fdb38) : DEBUG (runtime:49) - Received packed state data (80 bytes) -2026-06-04 03:42:00,521 (7f8fdf9fdb38) : DEBUG (runtime:814) - Found route matching /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -2026-06-04 03:42:00,522 (7f8fdf9fdb38) : INFO (agentservice:175) - Receiving agent info from com.plexapp.agents.localmedia: [{'media_types': ['Movie'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.imdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Movies)'}, {'media_types': ['TV_Show'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.thetvdb', 'com.plexapp.agents.none'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (TV)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Artist'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.plexmusic'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 2, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Artists)'}, {'media_types': ['Album'], 'primary_provider': False, 'fallback_agent': None, 'contributes_to': ['com.plexapp.agents.discogs', 'com.plexapp.agents.lastfm', 'com.plexapp.agents.plexmusic', 'com.plexapp.agents.none', 'tv.plex.agents.music', 'org.musicbrainz.agents.music'], 'languages': ['xn'], 'persist_stored_files': False, 'version': 0, 'accepts_from': None, 'prefs': True, 'name': 'Local Media Assets (Albums)'}] -2026-06-04 03:42:00,522 (7f8fdf9fdb38) : DEBUG (runtime:88) - Sending packed state data (99 bytes) -2026-06-04 03:42:00,522 (7f8fdf9fdb38) : DEBUG (runtime:924) - Response: [200] str, 16 bytes -2026-06-04 03:42:02,121 (7f8fdfae3b38) : INFO (datakit:131) - Saved the dictionary file -2026-06-04 03:42:06,402 (7f8fdfae3b38) : DEBUG (runtime:717) - Handling request GET /system/settings -2026-06-04 03:42:06,403 (7f8fdfae3b38) : CRITICAL (runtime:493) - Exception matching route for path "/system/settings" (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route - raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) -FrameworkException: No route found matching '/system/settings' - -2026-06-04 03:42:06,403 (7f8fdfae3b38) : ERROR (runtime:846) - Could not find route matching /system/settings -2026-06-04 03:42:06,404 (7f8fdfae3b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:42:06,606 (7f8fdfae3b38) : DEBUG (runtime:717) - Handling request GET /system/updates -2026-06-04 03:42:06,607 (7f8fdfae3b38) : CRITICAL (runtime:493) - Exception matching route for path "/system/updates" (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route - raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) -FrameworkException: No route found matching '/system/updates' - -2026-06-04 03:42:06,607 (7f8fdfae3b38) : ERROR (runtime:846) - Could not find route matching /system/updates -2026-06-04 03:42:06,607 (7f8fdfae3b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:42:54,671 (7f8fdfae3b38) : DEBUG (runtime:717) - Handling request GET /system/settings -2026-06-04 03:42:54,671 (7f8fdfae3b38) : CRITICAL (runtime:493) - Exception matching route for path "/system/settings" (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route - raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) -FrameworkException: No route found matching '/system/settings' - -2026-06-04 03:42:54,672 (7f8fdfae3b38) : ERROR (runtime:846) - Could not find route matching /system/settings -2026-06-04 03:42:54,672 (7f8fdfae3b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:42:54,676 (7f8fdfae3b38) : DEBUG (runtime:717) - Handling request GET /system/updates -2026-06-04 03:42:54,676 (7f8fdfae3b38) : CRITICAL (runtime:493) - Exception matching route for path "/system/updates" (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route - raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) -FrameworkException: No route found matching '/system/updates' - -2026-06-04 03:42:54,676 (7f8fdfae3b38) : ERROR (runtime:846) - Could not find route matching /system/updates -2026-06-04 03:42:54,676 (7f8fdfae3b38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:43:15,213 (7f8fdfa57b38) : DEBUG (runtime:1156) - Starting timed thread named 'refresh_servers' -2026-06-04 03:43:15,214 (7f8fdfa57b38) : DEBUG (peerservice:164) - Fetching the current list of servers -2026-06-04 03:43:15,214 (7f8fdfa57b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/servers' -2026-06-04 03:43:15,215 (7f8fdfa57b38) : DEBUG (peerservice:171) - Refreshing local server -2026-06-04 03:43:15,215 (7f8fdfa57b38) : DEBUG (peerservice:189) - Updating servers (True/False True/True/True) -2026-06-04 03:43:15,215 (7f8fdfa57b38) : DEBUG (peerservice:198) - Found 1 servers -2026-06-04 03:43:15,216 (7f8fdfa57b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:43:15,217 (7f8fdfa57b38) : DEBUG (core:521) - Attribute 'machineIdentifier' set to 'b4e051156514c3673d6305f3df48b2bd645d6fd5' -2026-06-04 03:43:15,217 (7f8fdfa57b38) : DEBUG (peerservice:230) - Creating new server b6f2a1226b70 (b4e051156514c3673d6305f3df48b2bd645d6fd5) -2026-06-04 03:43:15,218 (7f8fdfa57b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/library/sections' -2026-06-04 03:43:15,219 (7f8fdfa57b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/channels/all' -2026-06-04 03:43:15,220 (7f8fdf9fdb38) : DEBUG (peerservice:176) - Background-refreshing remote servers -2026-06-04 03:43:15,220 (7f8fdfa57b38) : DEBUG (runtime:1117) - Created a thread named 'background_refresh' -2026-06-04 03:43:15,220 (7f8fdf9fdb38) : DEBUG (peerservice:189) - Updating servers (True/False True/True/True) -2026-06-04 03:43:15,220 (7f8fdf9fdb38) : DEBUG (peerservice:198) - Found 1 servers -2026-06-04 03:43:15,220 (7f8fdf9fdb38) : DEBUG (peerservice:233) - Updating existing server b6f2a1226b70 (b4e051156514c3673d6305f3df48b2bd645d6fd5) -2026-06-04 03:43:15,220 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/library/sections' -2026-06-04 03:43:15,221 (7f8fdf9fdb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/channels/all' -2026-06-04 03:46:36,563 (7f8fdfa6ab38) : DEBUG (runtime:717) - Handling request GET /system/settings -2026-06-04 03:46:36,563 (7f8fdfa6ab38) : CRITICAL (runtime:493) - Exception matching route for path "/system/settings" (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route - raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) -FrameworkException: No route found matching '/system/settings' - -2026-06-04 03:46:36,563 (7f8fdfa6ab38) : ERROR (runtime:846) - Could not find route matching /system/settings -2026-06-04 03:46:36,564 (7f8fdfa6ab38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes -2026-06-04 03:46:36,765 (7f8fdfa6ab38) : DEBUG (runtime:717) - Handling request GET /system/updates -2026-06-04 03:46:36,765 (7f8fdfa6ab38) : CRITICAL (runtime:493) - Exception matching route for path "/system/updates" (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 464, in match_route - raise Framework.exceptions.FrameworkException("No route found matching '%s'" % path) -FrameworkException: No route found matching '/system/updates' - -2026-06-04 03:46:36,765 (7f8fdfa6ab38) : ERROR (runtime:846) - Could not find route matching /system/updates -2026-06-04 03:46:36,766 (7f8fdfa6ab38) : DEBUG (runtime:924) - Response: [404] NoneType, 0 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/org.musicbrainz.agents.music.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/org.musicbrainz.agents.music.log deleted file mode 100644 index 3b143f56b..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/PMS Plugin Logs/org.musicbrainz.agents.music.log +++ /dev/null @@ -1,66 +0,0 @@ -2026-06-04 03:41:16,551 (7f4cab722808) : INFO (core:349) - Starting framework core - Version: 2.6.3, Build: 563d026 (Sat May 02 13:56:55 UTC 2026) -2026-06-04 03:41:16,551 (7f4cab722808) : DEBUG (core:361) - Using the elevated policy -2026-06-04 03:41:16,551 (7f4cab722808) : DEBUG (core:450) - Starting runtime component. -2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (core:450) - Starting caching component. -2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (core:450) - Starting data component. -2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (core:450) - Starting networking component. -2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (networking:266) - No cookie jar found -2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (networking:434) - Setting the default network timeout to 20.0 -2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (core:450) - Starting localization component. -2026-06-04 03:41:16,552 (7f4cab722808) : INFO (localization:409) - Setting the default locale to en-us -2026-06-04 03:41:16,552 (7f4cab722808) : DEBUG (core:450) - Starting messaging component. -2026-06-04 03:41:16,553 (7f4cab722808) : DEBUG (core:450) - Starting debugging component. -2026-06-04 03:41:16,553 (7f4cab722808) : DEBUG (core:450) - Starting services component. -2026-06-04 03:41:16,553 (7f4ca82fcb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/system/messaging/clear_events/org.musicbrainz.agents.music' -2026-06-04 03:41:16,553 (7f4cab722808) : DEBUG (core:450) - Starting myplex component. -2026-06-04 03:41:16,554 (7f4cab722808) : DEBUG (core:450) - Starting notifications component. -2026-06-04 03:41:16,595 (7f4cab722808) : DEBUG (accessor:68) - Creating a new model access point for provider org.musicbrainz.agents.music in namespace 'metadata' -2026-06-04 03:41:16,597 (7f4cab722808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:16,600 (7f4cab722808) : ERROR (networking:197) - Error opening URL 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes' -2026-06-04 03:41:16,600 (7f4cab722808) : CRITICAL (runtime:1299) - Exception getting hosted resource hashes (most recent call last): - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/runtime.py", line 1293, in get_resource_hashes - json = self._core.networking.http_request("http://127.0.0.1:32400/:/plugins/com.plexapp.system/resourceHashes", timeout=10).content - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 243, in content - return self.__str__() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 221, in __str__ - self.load() - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/components/networking.py", line 159, in load - f = self._opener.open(req, timeout=self._timeout) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 435, in open - response = meth(req, response) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 548, in http_response - 'http', request, response, code, msg, hdrs) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 473, in error - return self._call_chain(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 407, in _call_chain - result = func(*args) - File "/usr/lib/plexmediaserver/Resources/Python/python27.zip/urllib2.py", line 556, in http_error_default - raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) -HTTPError: HTTP Error 404: Not Found - -2026-06-04 03:41:16,603 (7f4ca8112b38) : DEBUG (services:265) - Plug-in is not daemonized - loading services from system -2026-06-04 03:41:16,603 (7f4cab722808) : DEBUG (runtime:1117) - Created a thread named 'load_all_services' -2026-06-04 03:41:16,604 (7f4cab722808) : DEBUG (runtime:1117) - Created a thread named 'get_server_info' -2026-06-04 03:41:16,604 (7f4ca8112b38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_' -2026-06-04 03:41:16,604 (7f4ca80ccb38) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400' -2026-06-04 03:41:16,605 (7f4cab722808) : DEBUG (core:150) - Finished starting framework core -2026-06-04 03:41:16,605 (7f4cab722808) : DEBUG (core:560) - Loading plug-in code -2026-06-04 03:41:16,608 (7f4ca80ccb38) : DEBUG (core:538) - Machine identifier is b4e051156514c3673d6305f3df48b2bd645d6fd5 -2026-06-04 03:41:16,608 (7f4ca8112b38) : DEBUG (services:362) - Loaded services -2026-06-04 03:41:16,608 (7f4ca80ccb38) : DEBUG (core:539) - Server version is 1.43.2.10687-563d026ea -2026-06-04 03:41:16,611 (7f4ca80efb38) : DEBUG (services:438) - No shared code to load -2026-06-04 03:41:16,613 (7f4cab722808) : DEBUG (core:566) - Finished loading plug-in code -2026-06-04 03:41:16,613 (7f4cab722808) : DEBUG (agentkit:1132) - Creating new agent class called MusicbrainzArtistAgent -2026-06-04 03:41:16,614 (7f4cab722808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'zh', 'hr', 'cs', 'da', 'nl', 'fi', 'fr', 'de', 'el', 'hu', 'id', 'it', 'ja', 'ko', 'nn', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'es', 'sv', 'th', 'tr', 'vi', 'xx'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Musicbrainz'}] -2026-06-04 03:41:16,614 (7f4cab722808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK' -2026-06-04 03:41:16,617 (7f4cab722808) : DEBUG (agentkit:1132) - Creating new agent class called PlexMusicAlbumAgent -2026-06-04 03:41:16,618 (7f4cab722808) : DEBUG (agentkit:937) - Updating agent information: [{'media_types': ['Artist'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'zh', 'hr', 'cs', 'da', 'nl', 'fi', 'fr', 'de', 'el', 'hu', 'id', 'it', 'ja', 'ko', 'nn', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'es', 'sv', 'th', 'tr', 'vi', 'xx'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Musicbrainz'}, {'media_types': ['Album'], 'accepts_from': None, 'fallback_agent': None, 'contributes_to': None, 'languages': ['en', 'ar', 'bg', 'zh', 'hr', 'cs', 'da', 'nl', 'fi', 'fr', 'de', 'el', 'hu', 'id', 'it', 'ja', 'ko', 'nn', 'pl', 'pt', 'ro', 'ru', 'sr', 'sk', 'es', 'sv', 'th', 'tr', 'vi', 'xx'], 'persist_stored_files': True, 'version': 0, 'primary_provider': True, 'prefs': True, 'name': 'Musicbrainz'}] -2026-06-04 03:41:16,618 (7f4cab722808) : DEBUG (networking:144) - Requesting 'http://127.0.0.1:32400/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK' -2026-06-04 03:41:16,621 (7f4cab722808) : INFO (core:611) - Started plug-in -2026-06-04 03:41:16,621 (7f4cab722808) : DEBUG (socketinterface:160) - Starting socket server -2026-06-04 03:41:16,621 (7f4cab722808) : DEBUG (runtime:1117) - Created a thread named 'start' -2026-06-04 03:41:16,621 (7f4cab722808) : INFO (socketinterface:184) - Socket server started on port 46041 -2026-06-04 03:41:16,621 (7f4cab722808) : INFO (pipeinterface:25) - Entering run loop -2026-06-04 03:41:16,622 (7f4cab722808) : DEBUG (runtime:717) - Handling request GET /:/prefixes -2026-06-04 03:41:16,622 (7f4cab722808) : DEBUG (runtime:814) - Found route matching /:/prefixes -2026-06-04 03:41:16,622 (7f4cab722808) : DEBUG (runtime:924) - Response: [200] MediaContainer, 153 bytes diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Crash Uploader.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Crash Uploader.log deleted file mode 100644 index 8d2b0f630..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Crash Uploader.log +++ /dev/null @@ -1,4 +0,0 @@ -Jun 04, 2026 03:41:15.610 [140406263966520] INFO - Crash Uploader - Platform: Linux ServerUUID: b4e051156514c3673d6305f3df48b2bd645d6fd5 UserId: NOUSERID Version: 1.43.2.10687-563d026ea -Jun 04, 2026 03:41:15.610 [140406263966520] INFO - Pre-processed minidump directory: /config/Library/Application Support/Plex Media Server/Crash Reports/1.43.2.10687-563d026ea -Jun 04, 2026 03:41:15.610 [140406263966520] INFO - Post-processed minidump directory: /tmp -Jun 04, 2026 03:41:15.610 [140406291888136] INFO - Crash Uploader - Processing Complete. diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Media Server.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Media Server.log deleted file mode 100644 index 5d856a580..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Media Server.log +++ /dev/null @@ -1,6660 +0,0 @@ -Jun 04, 2026 03:41:13.606 [140443271535416] INFO - Plex Media Server v1.43.2.10687-563d026ea - Docker Docker Container x86_64 - build: linux-x86_64 debian - GMT 00:00 -Jun 04, 2026 03:41:13.606 [140443271535416] INFO - Linux version: 7.0.10-arch1-1, language: en-US -Jun 04, 2026 03:41:13.606 [140443271535416] INFO - Processor: 32-core AMD Ryzen 9 7950X3D 16-Core Processor -Jun 04, 2026 03:41:13.606 [140443271535416] INFO - Compiler is - Clang 11.0.1 (https://plex.tv 9b997da8e5b47bdb4a9425b3a3b290be393b4b1f) -Jun 04, 2026 03:41:13.606 [140443271535416] INFO - /usr/lib/plexmediaserver/Plex Media Server -Jun 04, 2026 03:41:13.606 [140443274078864] DEBUG - BPQ: [Idle] -> [Starting] -Jun 04, 2026 03:41:13.606 [140443274078864] DEBUG - MyPlex: mapping state set to 'Unknown'. -Jun 04, 2026 03:41:13.606 [140443274078864] DEBUG - Relay: read 0 cached entries from hosts file -Jun 04, 2026 03:41:13.606 [140443274078864] DEBUG - Opening 20 database sessions to library (com.plexapp.plugins.library), SQLite 3.39.4, threadsafe=1 -Jun 04, 2026 03:41:13.606 [140443274078864] DEBUG - Installing Library Database from ["/usr/lib/plexmediaserver/Resources/com.plexapp.plugins.library.db"] to ["/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db"] -Jun 04, 2026 03:41:13.622 [140443274078864] DEBUG - MyPlex: no cached data to load for request for https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - HttpServer: Listening on IPv6 as well as IPv4. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - HttpServer: Listening on port 32400. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - HttpServer: Listening on port 32401. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Running server... -Jun 04, 2026 03:41:13.631 [140443256027960] DEBUG - HttpServer: Set up a thread pool with 2 threads. -Jun 04, 2026 03:41:13.631 [140443274078864] INFO - Running migrations. (EPG 0) -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.631 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.632 [140443274078864] INFO - Running forward migration 20190130000000. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.632 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.635 [140443274078864] INFO - Completed forward migration 20190130000000. -Jun 04, 2026 03:41:13.635 [140443274078864] INFO - Running forward migration 20190201190600. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.635 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.636 [140443274078864] INFO - Completed forward migration 20190201190600. -Jun 04, 2026 03:41:13.636 [140443274078864] INFO - Running forward migration 20190205190600. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.636 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.636 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.637 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.637 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.638 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.639 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.639 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.640 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.641 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.642 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.642 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.643 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.644 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.644 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.645 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.646 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.647 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.647 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.648 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.649 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.650 [140443274078864] INFO - Completed forward migration 20190205190600. -Jun 04, 2026 03:41:13.650 [140443274078864] INFO - Running forward migration 20190215190600. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.650 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.651 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.652 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.653 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.653 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.654 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.654 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.655 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.656 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.656 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.657 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.658 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.659 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.659 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.660 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.661 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.662 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.662 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.663 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.663 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.664 [140443274078864] INFO - Completed forward migration 20190215190600. -Jun 04, 2026 03:41:13.664 [140443274078864] INFO - Running forward migration 20190218032400. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.664 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.665 [140443274078864] INFO - Completed forward migration 20190218032400. -Jun 04, 2026 03:41:13.665 [140443274078864] INFO - Running forward migration 20190316132700. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.665 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.666 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.666 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.667 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.668 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.668 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.669 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.669 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.670 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.671 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.671 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.672 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.672 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.673 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.674 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.674 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.675 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.676 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.676 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.677 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.677 [140443274078864] INFO - Completed forward migration 20190316132700. -Jun 04, 2026 03:41:13.677 [140443274078864] INFO - Running forward migration 20190403100000. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.677 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.679 [140443274078864] INFO - Completed forward migration 20190403100000. -Jun 04, 2026 03:41:13.679 [140443274078864] INFO - Running forward migration 20190501100000. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.679 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.679 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.680 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.680 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.681 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.681 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.682 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.683 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.683 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.684 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.685 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.685 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.686 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.686 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.687 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.688 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.688 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.689 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.689 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.690 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.691 [140443274078864] INFO - Completed forward migration 20190501100000. -Jun 04, 2026 03:41:13.691 [140443274078864] INFO - Running forward migration 20190528190600. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.691 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.692 [140443274078864] INFO - Completed forward migration 20190528190600. -Jun 04, 2026 03:41:13.692 [140443274078864] INFO - Running forward migration 20190520131301. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.692 [140443274078864] INFO - Completed forward migration 20190520131301. -Jun 04, 2026 03:41:13.692 [140443274078864] INFO - Running forward migration 20190520131302. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.692 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.693 [140443274078864] INFO - Completed forward migration 20190520131302. -Jun 04, 2026 03:41:13.693 [140443274078864] INFO - Running forward migration 20190520131303. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.693 [140443274078864] INFO - Completed forward migration 20190520131303. -Jun 04, 2026 03:41:13.693 [140443274078864] INFO - Running forward migration 20190603140000. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.693 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.694 [140443274078864] INFO - Completed forward migration 20190603140000. -Jun 04, 2026 03:41:13.694 [140443274078864] INFO - Running forward migration 20190612032400. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.694 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.694 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.695 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.696 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.696 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.697 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.697 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.698 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.699 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.699 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.700 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.701 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.701 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.702 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.702 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.703 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.704 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.704 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.705 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.705 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.706 [140443274078864] INFO - Completed forward migration 20190612032400. -Jun 04, 2026 03:41:13.706 [140443274078864] INFO - Running forward migration 20190614032400. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.706 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.707 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.707 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.708 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.709 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.709 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.710 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.711 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.711 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.712 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.712 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.713 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.714 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.714 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.715 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.716 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.716 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.717 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.717 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.718 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.719 [140443274078864] INFO - Completed forward migration 20190614032400. -Jun 04, 2026 03:41:13.719 [140443274078864] INFO - Running forward migration 20190708132500. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.719 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.719 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.720 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.721 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.721 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.722 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.723 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.723 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.724 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.725 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.725 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.726 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.726 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.727 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.728 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.728 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.729 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.730 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.730 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.731 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.732 [140443274078864] INFO - Completed forward migration 20190708132500. -Jun 04, 2026 03:41:13.732 [140443274078864] INFO - Running forward migration 20190430032400. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.732 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.733 [140443274078864] INFO - Completed forward migration 20190430032400. -Jun 04, 2026 03:41:13.733 [140443274078864] INFO - Running forward migration 20190111032400. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.733 [140443274078864] INFO - Completed forward migration 20190111032400. -Jun 04, 2026 03:41:13.733 [140443274078864] INFO - Running forward migration 20190815130000. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.733 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.734 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.734 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.735 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.736 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.736 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.737 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.738 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.738 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.739 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.740 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.740 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.741 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.742 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.742 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.743 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.744 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.744 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.745 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.746 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.746 [140443274078864] INFO - Completed forward migration 20190815130000. -Jun 04, 2026 03:41:13.746 [140443274078864] INFO - Running forward migration 20190912140000. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.746 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.747 [140443274078864] INFO - Completed forward migration 20190912140000. -Jun 04, 2026 03:41:13.747 [140443274078864] INFO - Running forward migration 20180330131300. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.747 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.748 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.749 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.749 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.750 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.751 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.751 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.752 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.753 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.753 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.754 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.754 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.755 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.756 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.756 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.757 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.758 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.758 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.759 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.760 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.760 [140443274078864] INFO - Completed forward migration 20180330131300. -Jun 04, 2026 03:41:13.760 [140443274078864] INFO - Running forward migration 20190801130200. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.760 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.761 [140443274078864] INFO - Completed forward migration 20190801130200. -Jun 04, 2026 03:41:13.761 [140443274078864] INFO - Running forward migration 20190604032400. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.761 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.762 [140443274078864] INFO - Completed forward migration 20190604032400. -Jun 04, 2026 03:41:13.762 [140443274078864] INFO - Running forward migration 20190919032400. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.762 [140443274078864] INFO - Completed forward migration 20190919032400. -Jun 04, 2026 03:41:13.762 [140443274078864] INFO - Running forward migration 20190920032400. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.762 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.763 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.764 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.764 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.765 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.766 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.766 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.767 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.768 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.768 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.769 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.769 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.770 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.771 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.771 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.772 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.773 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.773 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.774 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.774 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.775 [140443274078864] INFO - Completed forward migration 20190920032400. -Jun 04, 2026 03:41:13.775 [140443274078864] INFO - Running forward migration 20190616032400. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.775 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.776 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.776 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.777 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.778 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.778 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.779 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.780 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.780 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.781 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.782 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.782 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.783 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.783 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.784 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.785 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.785 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.786 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.787 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.787 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.788 [140443274078864] INFO - Completed forward migration 20190616032400. -Jun 04, 2026 03:41:13.788 [140443274078864] INFO - Running forward migration 20191003131300. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.788 [140443274078864] INFO - Completed forward migration 20191003131300. -Jun 04, 2026 03:41:13.788 [140443274078864] INFO - Running forward migration 20191213143300. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.788 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.789 [140443274078864] INFO - Completed forward migration 20191213143300. -Jun 04, 2026 03:41:13.789 [140443274078864] INFO - Running forward migration 20200110143300. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.789 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.789 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.790 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.791 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.791 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.792 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.793 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.793 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.794 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.795 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.795 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.796 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.797 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.797 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.798 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.798 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.799 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.800 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.800 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.801 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.802 [140443274078864] INFO - Completed forward migration 20200110143300. -Jun 04, 2026 03:41:13.802 [140443274078864] INFO - Running forward migration 20200114193300. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.802 [140443274078864] INFO - Completed forward migration 20200114193300. -Jun 04, 2026 03:41:13.802 [140443274078864] INFO - Running forward migration 20200124193500. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.802 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.803 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.804 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.804 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.805 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.806 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.806 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.807 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.807 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.808 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.809 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.809 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.810 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.811 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.811 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.812 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.813 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.813 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.814 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.815 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.815 [140443274078864] INFO - Completed forward migration 20200124193500. -Jun 04, 2026 03:41:13.815 [140443274078864] INFO - Running forward migration 20200131193503. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.815 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.816 [140443274078864] INFO - Completed forward migration 20200131193503. -Jun 04, 2026 03:41:13.816 [140443274078864] INFO - Running forward migration 20191125131300. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.816 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.817 [140443274078864] INFO - Completed forward migration 20191125131300. -Jun 04, 2026 03:41:13.817 [140443274078864] INFO - Running forward migration 20200224131300. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.817 [140443274078864] INFO - Completed forward migration 20200224131300. -Jun 04, 2026 03:41:13.817 [140443274078864] INFO - Running forward migration 20200327131300. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.817 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.818 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.819 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.820 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.820 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.821 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.822 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.822 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.823 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.823 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.824 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.825 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.825 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.826 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.827 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.827 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.828 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.829 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.829 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.830 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.831 [140443274078864] INFO - Completed forward migration 20200327131300. -Jun 04, 2026 03:41:13.831 [140443274078864] INFO - Running forward migration 20200401131300. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.831 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.832 [140443274078864] INFO - Completed forward migration 20200401131300. -Jun 04, 2026 03:41:13.832 [140443274078864] INFO - Running forward migration 20200506172900. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.832 [140443274078864] INFO - Completed forward migration 20200506172900. -Jun 04, 2026 03:41:13.832 [140443274078864] INFO - Running forward migration 20200515172900. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.832 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.833 [140443274078864] INFO - Completed forward migration 20200515172900. -Jun 04, 2026 03:41:13.833 [140443274078864] INFO - Running forward migration 20200610150000. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.833 [140443274078864] INFO - Completed forward migration 20200610150000. -Jun 04, 2026 03:41:13.833 [140443274078864] INFO - Running forward migration 20200615032400. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.833 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.834 [140443274078864] INFO - Completed forward migration 20200615032400. -Jun 04, 2026 03:41:13.834 [140443274078864] INFO - Running forward migration 20200701090000. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.834 [140443274078864] INFO - Completed forward migration 20200701090000. -Jun 04, 2026 03:41:13.834 [140443274078864] INFO - Running forward migration 20200728130000. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.834 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.835 [140443274078864] INFO - Completed forward migration 20200728130000. -Jun 04, 2026 03:41:13.835 [140443274078864] INFO - Running forward migration 20200731130000. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.835 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.836 [140443274078864] INFO - Completed forward migration 20200731130000. -Jun 04, 2026 03:41:13.836 [140443274078864] INFO - Running forward migration 20200812130000. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.836 [140443274078864] INFO - Completed forward migration 20200812130000. -Jun 04, 2026 03:41:13.836 [140443274078864] INFO - Running forward migration 20200921130000. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.836 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.837 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.837 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.838 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.839 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.839 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.840 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.841 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.841 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.842 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.843 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.843 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.844 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.845 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.845 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.846 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.847 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.848 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.848 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.849 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.850 [140443274078864] INFO - Completed forward migration 20200921130000. -Jun 04, 2026 03:41:13.850 [140443274078864] INFO - Running forward migration 20201103130000. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.850 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.851 [140443274078864] INFO - Completed forward migration 20201103130000. -Jun 04, 2026 03:41:13.851 [140443274078864] INFO - Running forward migration 20201119130000. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.851 [140443274078864] INFO - Completed forward migration 20201119130000. -Jun 04, 2026 03:41:13.851 [140443274078864] INFO - Running forward migration 20210304150000. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.851 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.852 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.852 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.853 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.854 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.854 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.855 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.856 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.856 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.857 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.857 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.858 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.859 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.860 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.860 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.861 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.862 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.862 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.863 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.864 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.864 [140443274078864] INFO - Completed forward migration 20210304150000. -Jun 04, 2026 03:41:13.864 [140443274078864] INFO - Running forward migration 500000000000. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.864 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.865 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.865 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.866 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.867 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.867 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.868 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.869 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.869 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.870 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.871 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.871 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.872 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.873 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.873 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.874 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.874 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.875 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.876 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.876 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.877 [140443274078864] INFO - Completed forward migration 500000000000. -Jun 04, 2026 03:41:13.877 [140443274078864] INFO - Running forward migration 500000000001. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.877 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.879 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.880 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.881 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.882 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.882 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.883 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.884 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.884 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.885 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.886 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.887 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.887 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.888 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.889 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.890 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.890 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.891 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.892 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.893 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.893 [140443274078864] INFO - Completed forward migration 500000000001. -Jun 04, 2026 03:41:13.893 [140443274078864] INFO - Running forward migration 20210628131300. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.893 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.894 [140443274078864] INFO - Completed forward migration 20210628131300. -Jun 04, 2026 03:41:13.894 [140443274078864] INFO - Running forward migration 202107070000. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.894 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.895 [140443274078864] INFO - Completed forward migration 202107070000. -Jun 04, 2026 03:41:13.895 [140443274078864] INFO - Running forward migration 202107221100. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.895 [140443274078864] INFO - Completed forward migration 202107221100. -Jun 04, 2026 03:41:13.895 [140443274078864] INFO - Running forward migration 20210726150000. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.895 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.896 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.897 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.897 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.898 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.899 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.899 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.900 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.901 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.902 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.902 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.903 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.904 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.904 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.905 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.906 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.906 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.907 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.908 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.908 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.909 [140443274078864] INFO - Completed forward migration 20210726150000. -Jun 04, 2026 03:41:13.909 [140443274078864] INFO - Running forward migration 20210830032400. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.909 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.910 [140443274078864] INFO - Completed forward migration 20210830032400. -Jun 04, 2026 03:41:13.910 [140443274078864] INFO - Running forward migration 202109061500. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.910 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.911 [140443274078864] INFO - Completed forward migration 202109061500. -Jun 04, 2026 03:41:13.911 [140443274078864] INFO - Running forward migration 20210922132300. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.911 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.912 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.912 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.913 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.914 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.914 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.915 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.916 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.916 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.917 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.918 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.919 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.919 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.920 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.921 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.921 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.922 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.923 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.923 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.924 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.925 [140443274078864] INFO - Completed forward migration 20210922132300. -Jun 04, 2026 03:41:13.925 [140443274078864] INFO - Running forward migration 20211027132200. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.925 [140443274078864] INFO - Completed forward migration 20211027132200. -Jun 04, 2026 03:41:13.925 [140443274078864] INFO - Running forward migration 20211116115800. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.925 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.926 [140443274078864] INFO - Completed forward migration 20211116115800. -Jun 04, 2026 03:41:13.926 [140443274078864] INFO - Running forward migration 20211208163900. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.926 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.927 [140443274078864] INFO - Completed forward migration 20211208163900. -Jun 04, 2026 03:41:13.927 [140443274078864] INFO - Running forward migration 202203040100. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.927 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.928 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.929 [140443274078864] INFO - Completed forward migration 202203040100. -Jun 04, 2026 03:41:13.929 [140443274078864] INFO - Running forward migration 202203220200. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.929 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.931 [140443274078864] INFO - Completed forward migration 202203220200. -Jun 04, 2026 03:41:13.931 [140443274078864] INFO - Running forward migration 202204252200. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.931 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.932 [140443274078864] INFO - Completed forward migration 202204252200. -Jun 04, 2026 03:41:13.932 [140443274078864] INFO - Running forward migration 202204252300. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.932 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.934 [140443274078864] INFO - Completed forward migration 202204252300. -Jun 04, 2026 03:41:13.934 [140443274078864] INFO - Running forward migration 202204252330. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.934 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.935 [140443274078864] INFO - Completed forward migration 202204252330. -Jun 04, 2026 03:41:13.935 [140443274078864] INFO - Running forward migration 202205090900. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.935 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.936 [140443274078864] INFO - Completed forward migration 202205090900. -Jun 04, 2026 03:41:13.936 [140443274078864] INFO - Running forward migration 202205090930. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.936 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.937 [140443274078864] INFO - Completed forward migration 202205090930. -Jun 04, 2026 03:41:13.937 [140443274078864] INFO - Running forward migration 202205090940. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.937 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.939 [140443274078864] INFO - Completed forward migration 202205090940. -Jun 04, 2026 03:41:13.939 [140443274078864] INFO - Running forward migration 202205091600. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.939 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.940 [140443274078864] INFO - Completed forward migration 202205091600. -Jun 04, 2026 03:41:13.940 [140443274078864] INFO - Running forward migration 202205091700. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.940 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.941 [140443274078864] INFO - Completed forward migration 202205091700. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.941 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.941 [140443274078864] INFO - Analyzing database. -Jun 04, 2026 03:41:13.942 [140443274078864] INFO - Vacuuming database. -Jun 04, 2026 03:41:13.953 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.953 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.954 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.955 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.955 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.956 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.957 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.958 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.958 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.959 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.960 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.961 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.962 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.962 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.963 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.964 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.965 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.966 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.966 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.967 [140443274078864] INFO - Running forward migration 202205181200. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.967 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.968 [140443274078864] INFO - Completed forward migration 202205181200. -Jun 04, 2026 03:41:13.968 [140443274078864] INFO - Running forward migration 202206291100. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.968 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.969 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.970 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.971 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.971 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.972 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.973 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.973 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.974 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.975 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.976 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.976 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.977 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.978 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.978 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.979 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.980 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.981 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.981 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.982 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.983 [140443274078864] INFO - Completed forward migration 202206291100. -Jun 04, 2026 03:41:13.983 [140443274078864] INFO - Running forward migration 20220818122500. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.983 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.984 [140443274078864] INFO - Completed forward migration 20220818122500. -Jun 04, 2026 03:41:13.984 [140443274078864] INFO - Running forward migration 202209091100. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.984 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.984 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.985 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.985 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.986 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.987 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.987 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.988 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.989 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.990 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.990 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.991 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.992 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.992 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.993 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.994 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.995 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.995 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.996 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.997 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:13.997 [140443274078864] INFO - Completed forward migration 202209091100. -Jun 04, 2026 03:41:13.997 [140443274078864] INFO - Running forward migration 20220911115800. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.997 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:13.998 [140443274078864] INFO - Completed forward migration 20220911115800. -Jun 04, 2026 03:41:13.998 [140443274078864] INFO - Running forward migration 202209271322. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:13.998 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.001 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.002 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.002 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.003 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.003 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.004 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.005 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.005 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.006 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.007 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.007 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.008 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.008 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.009 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.010 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.010 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.011 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.012 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.012 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.013 [140443274078864] INFO - Completed forward migration 202209271322. -Jun 04, 2026 03:41:14.013 [140443274078864] INFO - Running forward migration 202210260000. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.013 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.014 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.015 [140443274078864] INFO - Completed forward migration 202210260000. -Jun 04, 2026 03:41:14.015 [140443274078864] INFO - Running forward migration 202210260100. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.015 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.016 [140443274078864] INFO - Completed forward migration 202210260100. -Jun 04, 2026 03:41:14.016 [140443274078864] INFO - Running forward migration 202210260200. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.016 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.017 [140443274078864] INFO - Completed forward migration 202210260200. -Jun 04, 2026 03:41:14.017 [140443274078864] INFO - Running forward migration 202212012200. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.017 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.019 [140443274078864] INFO - Completed forward migration 202212012200. -Jun 04, 2026 03:41:14.019 [140443274078864] INFO - Running forward migration 202212012300. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.019 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.020 [140443274078864] INFO - Completed forward migration 202212012300. -Jun 04, 2026 03:41:14.020 [140443274078864] INFO - Running forward migration 202212022100. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.020 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.021 [140443274078864] INFO - Completed forward migration 202212022100. -Jun 04, 2026 03:41:14.021 [140443274078864] INFO - Running forward migration 202212022200. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.021 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.022 [140443274078864] INFO - Completed forward migration 202212022200. -Jun 04, 2026 03:41:14.022 [140443274078864] INFO - Running forward migration 202212022300. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.022 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.023 [140443274078864] INFO - Completed forward migration 202212022300. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.023 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.023 [140443274078864] INFO - Analyzing database. -Jun 04, 2026 03:41:14.024 [140443274078864] INFO - Vacuuming database. -Jun 04, 2026 03:41:14.039 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.040 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.041 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.041 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.042 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.043 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.043 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.044 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.045 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.046 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.046 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.047 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.048 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.048 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.049 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.050 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.050 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.051 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.051 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.052 [140443274078864] INFO - Running forward migration 202301280000. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.052 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.052 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.053 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.053 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.054 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.055 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.055 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.056 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.056 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.057 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.058 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.058 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.059 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.059 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.060 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.061 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.061 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.062 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.063 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.063 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.064 [140443274078864] INFO - Completed forward migration 202301280000. -Jun 04, 2026 03:41:14.064 [140443274078864] INFO - Running forward migration 20230118160000. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.064 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.064 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.065 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.065 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.066 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.067 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.067 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.068 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.069 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.069 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.070 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.070 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.071 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.072 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.072 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.073 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.073 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.074 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.074 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.075 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.076 [140443274078864] INFO - Completed forward migration 20230118160000. -Jun 04, 2026 03:41:14.076 [140443274078864] INFO - Running forward migration 20230830160000. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.076 [140443274078864] INFO - Completed forward migration 20230830160000. -Jun 04, 2026 03:41:14.076 [140443274078864] INFO - Running forward migration 202309200901. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.076 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.077 [140443274078864] INFO - Completed forward migration 202309200901. -Jun 04, 2026 03:41:14.077 [140443274078864] INFO - Running forward migration 202309200902. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.077 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.077 [140443274078864] INFO - Completed forward migration 202309200902. -Jun 04, 2026 03:41:14.078 [140443274078864] INFO - Running forward migration 202309200903. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.078 [140443274078864] INFO - Completed forward migration 202309200903. -Jun 04, 2026 03:41:14.078 [140443274078864] INFO - Running forward migration 202309200904. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.078 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.079 [140443274078864] INFO - Completed forward migration 202309200904. -Jun 04, 2026 03:41:14.079 [140443274078864] INFO - Running forward migration 202309200905. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.079 [140443274078864] INFO - Completed forward migration 202309200905. -Jun 04, 2026 03:41:14.079 [140443274078864] INFO - Running forward migration 202309200906. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.079 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.080 [140443274078864] INFO - Completed forward migration 202309200906. -Jun 04, 2026 03:41:14.080 [140443274078864] INFO - Running forward migration 202309200907. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.080 [140443274078864] INFO - Completed forward migration 202309200907. -Jun 04, 2026 03:41:14.080 [140443274078864] INFO - Running forward migration 202309200908. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.080 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.081 [140443274078864] INFO - Completed forward migration 202309200908. -Jun 04, 2026 03:41:14.081 [140443274078864] INFO - Running forward migration 202309200909. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.081 [140443274078864] INFO - Completed forward migration 202309200909. -Jun 04, 2026 03:41:14.081 [140443274078864] INFO - Running forward migration 202309200910. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.081 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.082 [140443274078864] INFO - Completed forward migration 202309200910. -Jun 04, 2026 03:41:14.082 [140443274078864] INFO - Running forward migration 202309200911. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.082 [140443274078864] INFO - Completed forward migration 202309200911. -Jun 04, 2026 03:41:14.082 [140443274078864] INFO - Running forward migration 202309200912. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.082 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.083 [140443274078864] INFO - Completed forward migration 202309200912. -Jun 04, 2026 03:41:14.083 [140443274078864] INFO - Running forward migration 202309200913. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.083 [140443274078864] INFO - Completed forward migration 202309200913. -Jun 04, 2026 03:41:14.083 [140443274078864] INFO - Running forward migration 202309200914. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.083 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.084 [140443274078864] INFO - Completed forward migration 202309200914. -Jun 04, 2026 03:41:14.084 [140443274078864] INFO - Running forward migration 202309200915. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.084 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.085 [140443274078864] INFO - Completed forward migration 202309200915. -Jun 04, 2026 03:41:14.085 [140443274078864] INFO - Running forward migration 202309200916. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.085 [140443274078864] INFO - Completed forward migration 202309200916. -Jun 04, 2026 03:41:14.085 [140443274078864] INFO - Running forward migration 202309200917. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.085 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.086 [140443274078864] INFO - Completed forward migration 202309200917. -Jun 04, 2026 03:41:14.086 [140443274078864] INFO - Running forward migration 202309200918. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.086 [140443274078864] INFO - Completed forward migration 202309200918. -Jun 04, 2026 03:41:14.086 [140443274078864] INFO - Running forward migration 202309200919. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.086 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.087 [140443274078864] INFO - Completed forward migration 202309200919. -Jun 04, 2026 03:41:14.087 [140443274078864] INFO - Running forward migration 202311120800. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.087 [140443274078864] INFO - Completed forward migration 202311120800. -Jun 04, 2026 03:41:14.087 [140443274078864] INFO - Running forward migration 202311171400. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.087 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.090 [140443274078864] INFO - Completed forward migration 202311171400. -Jun 04, 2026 03:41:14.090 [140443274078864] INFO - Running forward migration 20231120161500. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.090 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.091 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.092 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.093 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.093 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.094 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.095 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.095 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.096 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.097 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.097 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.098 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.099 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.099 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.100 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.101 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.101 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.102 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.103 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.103 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.104 [140443274078864] INFO - Completed forward migration 20231120161500. -Jun 04, 2026 03:41:14.104 [140443274078864] INFO - Running forward migration 202312190800. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.104 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.105 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.106 [140443274078864] INFO - Completed forward migration 202312190800. -Jun 04, 2026 03:41:14.106 [140443274078864] INFO - Running forward migration 202401290800. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.106 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.107 [140443274078864] INFO - Completed forward migration 202401290800. -Jun 04, 2026 03:41:14.107 [140443274078864] INFO - Running forward migration 202401290801. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.107 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.108 [140443274078864] INFO - Completed forward migration 202401290801. -Jun 04, 2026 03:41:14.108 [140443274078864] INFO - Running forward migration 202401290802. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.108 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.109 [140443274078864] INFO - Completed forward migration 202401290802. -Jun 04, 2026 03:41:14.109 [140443274078864] INFO - Running forward migration 202401290803. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.109 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.111 [140443274078864] INFO - Completed forward migration 202401290803. -Jun 04, 2026 03:41:14.111 [140443274078864] INFO - Running forward migration 202401290804. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.111 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.112 [140443274078864] INFO - Completed forward migration 202401290804. -Jun 04, 2026 03:41:14.112 [140443274078864] INFO - Running forward migration 202401290805. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.112 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.113 [140443274078864] INFO - Completed forward migration 202401290805. -Jun 04, 2026 03:41:14.113 [140443274078864] INFO - Running forward migration 202401290806. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.113 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.114 [140443274078864] INFO - Completed forward migration 202401290806. -Jun 04, 2026 03:41:14.114 [140443274078864] INFO - Running forward migration 202401290807. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.114 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.115 [140443274078864] INFO - Completed forward migration 202401290807. -Jun 04, 2026 03:41:14.115 [140443274078864] INFO - Running forward migration 202401290808. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.115 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.117 [140443274078864] INFO - Completed forward migration 202401290808. -Jun 04, 2026 03:41:14.117 [140443274078864] INFO - Running forward migration 202402260801. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.117 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.118 [140443274078864] INFO - Completed forward migration 202402260801. -Jun 04, 2026 03:41:14.118 [140443274078864] INFO - Running forward migration 202402260802. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.118 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.119 [140443274078864] INFO - Completed forward migration 202402260802. -Jun 04, 2026 03:41:14.119 [140443274078864] INFO - Running forward migration 202402260803. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.119 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.120 [140443274078864] INFO - Completed forward migration 202402260803. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.120 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.120 [140443274078864] INFO - Analyzing database. -Jun 04, 2026 03:41:14.120 [140443274078864] INFO - Vacuuming database. -Jun 04, 2026 03:41:14.130 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.131 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.131 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.132 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.133 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.133 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.134 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.135 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.135 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.136 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.137 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.138 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.138 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.139 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.140 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.140 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.141 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.142 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.142 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.143 [140443274078864] INFO - Running forward migration 202403110800. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.143 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.144 [140443274078864] INFO - Completed forward migration 202403110800. -Jun 04, 2026 03:41:14.144 [140443274078864] INFO - Running forward migration 202403120800. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.144 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.145 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.145 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.146 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.147 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.147 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.148 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.149 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.149 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.150 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.151 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.151 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.152 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.153 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.153 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.154 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.155 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.155 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.156 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.156 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.157 [140443274078864] INFO - Completed forward migration 202403120800. -Jun 04, 2026 03:41:14.157 [140443274078864] INFO - Running forward migration 202404300800. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.157 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.158 [140443274078864] INFO - Completed forward migration 202404300800. -Jun 04, 2026 03:41:14.158 [140443274078864] INFO - Running forward migration 202406050800. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.158 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.159 [140443274078864] INFO - Completed forward migration 202406050800. -Jun 04, 2026 03:41:14.159 [140443274078864] INFO - Running forward migration 202406250800. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.159 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.159 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.160 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.160 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.161 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.162 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.162 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.163 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.164 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.164 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.165 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.166 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.166 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.167 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.168 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.168 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.169 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.170 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.170 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.171 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.171 [140443274078864] INFO - Completed forward migration 202406250800. -Jun 04, 2026 03:41:14.171 [140443274078864] INFO - Running forward migration 202407231422. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.171 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.172 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.173 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.173 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.174 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.175 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.175 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.176 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.177 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.177 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.178 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.179 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.179 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.180 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.181 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.181 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.182 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.183 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.183 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.184 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.184 [140443274078864] INFO - Completed forward migration 202407231422. -Jun 04, 2026 03:41:14.184 [140443274078864] INFO - Running forward migration 20240718114400. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.184 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.185 [140443274078864] INFO - Completed forward migration 20240718114400. -Jun 04, 2026 03:41:14.185 [140443274078864] INFO - Running forward migration 202407301359. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.185 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.186 [140443274078864] INFO - Completed forward migration 202407301359. -Jun 04, 2026 03:41:14.186 [140443274078864] INFO - Running forward migration 202409201238. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.186 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.187 [140443274078864] INFO - Completed forward migration 202409201238. -Jun 04, 2026 03:41:14.187 [140443274078864] INFO - Running forward migration 202502171508. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.187 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.187 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.188 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.189 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.189 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.190 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.191 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.191 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.192 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.192 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.193 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.194 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.194 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.195 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.196 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.196 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.197 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.198 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.198 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.199 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.200 [140443274078864] INFO - Completed forward migration 202502171508. -Jun 04, 2026 03:41:14.200 [140443274078864] INFO - Running forward migration 202503041220. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.200 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.200 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.201 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.201 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.202 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.203 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.203 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.204 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.205 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.205 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.206 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.207 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.207 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.208 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.209 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.209 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.210 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.211 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.211 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.212 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.213 [140443274078864] INFO - Completed forward migration 202503041220. -Jun 04, 2026 03:41:14.213 [140443274078864] INFO - Running forward migration 202503041514. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.213 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.213 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.214 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.215 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.215 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.216 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.217 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.217 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.218 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.219 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.219 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.220 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.221 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.221 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.222 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.222 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.223 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.224 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.224 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.225 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.226 [140443274078864] INFO - Completed forward migration 202503041514. -Jun 04, 2026 03:41:14.226 [140443274078864] INFO - Running forward migration 202504160804. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.226 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.226 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.227 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.227 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.228 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.229 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.229 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.230 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.231 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.231 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.232 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.233 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.234 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.234 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.235 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.236 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.237 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.237 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.238 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.239 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.239 [140443274078864] INFO - Completed forward migration 202504160804. -Jun 04, 2026 03:41:14.239 [140443274078864] INFO - Running forward migration 202504161541. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.239 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.247 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.248 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.248 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.249 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.250 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.250 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.251 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.252 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.253 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.253 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.254 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.255 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.255 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.256 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.256 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.257 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.258 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.258 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.259 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.260 [140443274078864] INFO - Completed forward migration 202504161541. -Jun 04, 2026 03:41:14.260 [140443274078864] INFO - Running forward migration 202504211423. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.260 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.260 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.261 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.261 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.262 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.263 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.263 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.264 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.265 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.265 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.266 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.267 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.267 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.268 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.269 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.269 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.270 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.271 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.271 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.272 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.272 [140443274078864] INFO - Completed forward migration 202504211423. -Jun 04, 2026 03:41:14.272 [140443274078864] INFO - Running forward migration 202504241552. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.272 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.273 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.273 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.274 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.275 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.275 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.276 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.277 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.277 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.278 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.279 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.279 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.280 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.281 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.281 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.282 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.283 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.283 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.284 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.285 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.285 [140443274078864] INFO - Completed forward migration 202504241552. -Jun 04, 2026 03:41:14.285 [140443274078864] INFO - Running forward migration 202504301225. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.285 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.286 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.286 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.287 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.288 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.288 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.289 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.290 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.290 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.291 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.292 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.292 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.293 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.293 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.294 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.295 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.295 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.296 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.297 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.297 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.298 [140443274078864] INFO - Completed forward migration 202504301225. -Jun 04, 2026 03:41:14.298 [140443274078864] INFO - Running forward migration 202507011200. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.298 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.299 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.299 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.300 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.301 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.301 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.302 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.303 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.303 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.304 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.304 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.305 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.306 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.306 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.307 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.308 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.308 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.309 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.310 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.310 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.311 [140443274078864] INFO - Completed forward migration 202507011200. -Jun 04, 2026 03:41:14.311 [140443274078864] INFO - Running forward migration 202507311200. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.311 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.312 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.313 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.314 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.314 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.315 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.316 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.316 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.317 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.318 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.318 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.319 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.320 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.320 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.321 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.322 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.322 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.323 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.324 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.324 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.325 [140443274078864] INFO - Completed forward migration 202507311200. -Jun 04, 2026 03:41:14.325 [140443274078864] INFO - Running forward migration 202510021115. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.325 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.326 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.326 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.327 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.328 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.328 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.329 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.330 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.331 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.331 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.332 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.333 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.333 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.334 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.335 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.335 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.336 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.337 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.337 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.338 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.339 [140443274078864] INFO - Completed forward migration 202510021115. -Jun 04, 2026 03:41:14.339 [140443274078864] INFO - Running forward migration 202601121053. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 2. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 3. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 4. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 5. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 6. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 7. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 8. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 9. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 10. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 11. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 12. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 13. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 14. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 15. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 16. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 17. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 18. -Jun 04, 2026 03:41:14.339 [140443274078864] DEBUG - Captured session 19. -Jun 04, 2026 03:41:14.340 [140443274078864] INFO - Completed forward migration 202601121053. -Jun 04, 2026 03:41:14.340 [140443274078864] DEBUG - ChangestampAllocator: initialized to 0 -Jun 04, 2026 03:41:14.340 [140443274078864] DEBUG - Opening 2 database sessions to library (com.plexapp.plugins.library.blobs), SQLite 3.39.4, threadsafe=1 -Jun 04, 2026 03:41:14.340 [140443274078864] DEBUG - Installing Library Database from ["/usr/lib/plexmediaserver/Resources/com.plexapp.plugins.library.db"] to ["/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.blobs.db"] -Jun 04, 2026 03:41:14.342 [140443274078864] INFO - Running migrations. (EPG 0) -Jun 04, 2026 03:41:14.342 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.342 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.342 [140443274078864] INFO - Running forward migration 20190130000000. -Jun 04, 2026 03:41:14.342 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.342 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.344 [140443274078864] INFO - Completed forward migration 20190130000000. -Jun 04, 2026 03:41:14.344 [140443274078864] INFO - Running forward migration 20190201190600. -Jun 04, 2026 03:41:14.344 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.344 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.344 [140443274078864] INFO - Completed forward migration 20190201190600. -Jun 04, 2026 03:41:14.344 [140443274078864] INFO - Running forward migration 20190205190600. -Jun 04, 2026 03:41:14.344 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.344 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.345 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.346 [140443274078864] INFO - Completed forward migration 20190205190600. -Jun 04, 2026 03:41:14.346 [140443274078864] INFO - Running forward migration 20190215190600. -Jun 04, 2026 03:41:14.346 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.346 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.347 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.348 [140443274078864] INFO - Completed forward migration 20190215190600. -Jun 04, 2026 03:41:14.348 [140443274078864] INFO - Running forward migration 20190218032400. -Jun 04, 2026 03:41:14.348 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.348 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.348 [140443274078864] INFO - Completed forward migration 20190218032400. -Jun 04, 2026 03:41:14.348 [140443274078864] INFO - Running forward migration 20190316132700. -Jun 04, 2026 03:41:14.348 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.348 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.349 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 56: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.350 [140443274078864] INFO - Completed forward migration 20190316132700. -Jun 04, 2026 03:41:14.350 [140443274078864] INFO - Running forward migration 20190403100000. -Jun 04, 2026 03:41:14.350 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.350 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.350 [140443274078864] INFO - Completed forward migration 20190403100000. -Jun 04, 2026 03:41:14.350 [140443274078864] INFO - Running forward migration 20190501100000. -Jun 04, 2026 03:41:14.350 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.350 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.350 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Completed forward migration 20190501100000. -Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Running forward migration 20190528190600. -Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Completed forward migration 20190528190600. -Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Running forward migration 20190520131301. -Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Completed forward migration 20190520131301. -Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Running forward migration 20190520131302. -Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Completed forward migration 20190520131302. -Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Running forward migration 20190520131303. -Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Completed forward migration 20190520131303. -Jun 04, 2026 03:41:14.351 [140443274078864] INFO - Running forward migration 20190603140000. -Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.351 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.352 [140443274078864] INFO - Completed forward migration 20190603140000. -Jun 04, 2026 03:41:14.352 [140443274078864] INFO - Running forward migration 20190612032400. -Jun 04, 2026 03:41:14.352 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.352 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.352 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.352 [140443274078864] INFO - Completed forward migration 20190612032400. -Jun 04, 2026 03:41:14.352 [140443274078864] INFO - Running forward migration 20190614032400. -Jun 04, 2026 03:41:14.352 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.352 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.353 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.354 [140443274078864] INFO - Completed forward migration 20190614032400. -Jun 04, 2026 03:41:14.354 [140443274078864] INFO - Running forward migration 20190708132500. -Jun 04, 2026 03:41:14.354 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.354 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.355 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.355 [140443274078864] INFO - Completed forward migration 20190708132500. -Jun 04, 2026 03:41:14.355 [140443274078864] INFO - Running forward migration 20190430032400. -Jun 04, 2026 03:41:14.355 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.355 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.356 [140443274078864] INFO - Completed forward migration 20190430032400. -Jun 04, 2026 03:41:14.356 [140443274078864] INFO - Running forward migration 20190111032400. -Jun 04, 2026 03:41:14.356 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.356 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.356 [140443274078864] INFO - Completed forward migration 20190111032400. -Jun 04, 2026 03:41:14.356 [140443274078864] INFO - Running forward migration 20190815130000. -Jun 04, 2026 03:41:14.356 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.356 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.356 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.357 [140443274078864] INFO - Completed forward migration 20190815130000. -Jun 04, 2026 03:41:14.357 [140443274078864] INFO - Running forward migration 20190912140000. -Jun 04, 2026 03:41:14.357 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.357 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.357 [140443274078864] INFO - Completed forward migration 20190912140000. -Jun 04, 2026 03:41:14.357 [140443274078864] INFO - Running forward migration 20180330131300. -Jun 04, 2026 03:41:14.357 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.357 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.358 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.358 [140443274078864] INFO - Completed forward migration 20180330131300. -Jun 04, 2026 03:41:14.358 [140443274078864] INFO - Running forward migration 20190801130200. -Jun 04, 2026 03:41:14.358 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.358 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.359 [140443274078864] INFO - Completed forward migration 20190801130200. -Jun 04, 2026 03:41:14.359 [140443274078864] INFO - Running forward migration 20190604032400. -Jun 04, 2026 03:41:14.359 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.359 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.359 [140443274078864] INFO - Completed forward migration 20190604032400. -Jun 04, 2026 03:41:14.359 [140443274078864] INFO - Running forward migration 20190919032400. -Jun 04, 2026 03:41:14.359 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.359 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.359 [140443274078864] INFO - Completed forward migration 20190919032400. -Jun 04, 2026 03:41:14.359 [140443274078864] INFO - Running forward migration 20190920032400. -Jun 04, 2026 03:41:14.359 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.359 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.360 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.360 [140443274078864] INFO - Completed forward migration 20190920032400. -Jun 04, 2026 03:41:14.360 [140443274078864] INFO - Running forward migration 20190616032400. -Jun 04, 2026 03:41:14.360 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.360 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.361 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.362 [140443274078864] INFO - Completed forward migration 20190616032400. -Jun 04, 2026 03:41:14.362 [140443274078864] INFO - Running forward migration 20191003131300. -Jun 04, 2026 03:41:14.362 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.362 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.362 [140443274078864] INFO - Completed forward migration 20191003131300. -Jun 04, 2026 03:41:14.362 [140443274078864] INFO - Running forward migration 20191213143300. -Jun 04, 2026 03:41:14.362 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.362 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.362 [140443274078864] INFO - Completed forward migration 20191213143300. -Jun 04, 2026 03:41:14.362 [140443274078864] INFO - Running forward migration 20200110143300. -Jun 04, 2026 03:41:14.362 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.362 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.363 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.363 [140443274078864] INFO - Completed forward migration 20200110143300. -Jun 04, 2026 03:41:14.363 [140443274078864] INFO - Running forward migration 20200114193300. -Jun 04, 2026 03:41:14.363 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.363 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.363 [140443274078864] INFO - Completed forward migration 20200114193300. -Jun 04, 2026 03:41:14.363 [140443274078864] INFO - Running forward migration 20200124193500. -Jun 04, 2026 03:41:14.363 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.363 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.365 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.365 [140443274078864] INFO - Completed forward migration 20200124193500. -Jun 04, 2026 03:41:14.365 [140443274078864] INFO - Running forward migration 20200131193503. -Jun 04, 2026 03:41:14.365 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.365 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.366 [140443274078864] INFO - Completed forward migration 20200131193503. -Jun 04, 2026 03:41:14.366 [140443274078864] INFO - Running forward migration 20191125131300. -Jun 04, 2026 03:41:14.366 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.366 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.366 [140443274078864] INFO - Completed forward migration 20191125131300. -Jun 04, 2026 03:41:14.366 [140443274078864] INFO - Running forward migration 20200224131300. -Jun 04, 2026 03:41:14.366 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.366 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.366 [140443274078864] INFO - Completed forward migration 20200224131300. -Jun 04, 2026 03:41:14.366 [140443274078864] INFO - Running forward migration 20200327131300. -Jun 04, 2026 03:41:14.366 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.366 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.367 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Completed forward migration 20200327131300. -Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Running forward migration 20200401131300. -Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Completed forward migration 20200401131300. -Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Running forward migration 20200506172900. -Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Completed forward migration 20200506172900. -Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Running forward migration 20200515172900. -Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Completed forward migration 20200515172900. -Jun 04, 2026 03:41:14.368 [140443274078864] INFO - Running forward migration 20200610150000. -Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.368 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Completed forward migration 20200610150000. -Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Running forward migration 20200615032400. -Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Completed forward migration 20200615032400. -Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Running forward migration 20200701090000. -Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Completed forward migration 20200701090000. -Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Running forward migration 20200728130000. -Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Completed forward migration 20200728130000. -Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Running forward migration 20200731130000. -Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Completed forward migration 20200731130000. -Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Running forward migration 20200812130000. -Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Completed forward migration 20200812130000. -Jun 04, 2026 03:41:14.369 [140443274078864] INFO - Running forward migration 20200921130000. -Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.369 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.370 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.370 [140443274078864] INFO - Completed forward migration 20200921130000. -Jun 04, 2026 03:41:14.370 [140443274078864] INFO - Running forward migration 20201103130000. -Jun 04, 2026 03:41:14.370 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.370 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.371 [140443274078864] INFO - Completed forward migration 20201103130000. -Jun 04, 2026 03:41:14.371 [140443274078864] INFO - Running forward migration 20201119130000. -Jun 04, 2026 03:41:14.371 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.371 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.371 [140443274078864] INFO - Completed forward migration 20201119130000. -Jun 04, 2026 03:41:14.371 [140443274078864] INFO - Running forward migration 20210304150000. -Jun 04, 2026 03:41:14.371 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.371 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.371 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.372 [140443274078864] INFO - Completed forward migration 20210304150000. -Jun 04, 2026 03:41:14.372 [140443274078864] INFO - Running forward migration 500000000000. -Jun 04, 2026 03:41:14.372 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.372 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.372 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.373 [140443274078864] INFO - Completed forward migration 500000000000. -Jun 04, 2026 03:41:14.373 [140443274078864] INFO - Running forward migration 500000000001. -Jun 04, 2026 03:41:14.373 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.373 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.377 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.377 [140443274078864] INFO - Completed forward migration 500000000001. -Jun 04, 2026 03:41:14.377 [140443274078864] INFO - Running forward migration 20210628131300. -Jun 04, 2026 03:41:14.377 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.377 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.378 [140443274078864] INFO - Completed forward migration 20210628131300. -Jun 04, 2026 03:41:14.378 [140443274078864] INFO - Running forward migration 202107070000. -Jun 04, 2026 03:41:14.378 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.378 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.378 [140443274078864] INFO - Completed forward migration 202107070000. -Jun 04, 2026 03:41:14.378 [140443274078864] INFO - Running forward migration 202107221100. -Jun 04, 2026 03:41:14.378 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.378 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.378 [140443274078864] INFO - Completed forward migration 202107221100. -Jun 04, 2026 03:41:14.378 [140443274078864] INFO - Running forward migration 20210726150000. -Jun 04, 2026 03:41:14.378 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.378 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.379 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.380 [140443274078864] INFO - Completed forward migration 20210726150000. -Jun 04, 2026 03:41:14.380 [140443274078864] INFO - Running forward migration 20210830032400. -Jun 04, 2026 03:41:14.380 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.380 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.380 [140443274078864] INFO - Completed forward migration 20210830032400. -Jun 04, 2026 03:41:14.380 [140443274078864] INFO - Running forward migration 202109061500. -Jun 04, 2026 03:41:14.380 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.380 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.381 [140443274078864] INFO - Completed forward migration 202109061500. -Jun 04, 2026 03:41:14.381 [140443274078864] INFO - Running forward migration 20210922132300. -Jun 04, 2026 03:41:14.381 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.381 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.381 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Completed forward migration 20210922132300. -Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Running forward migration 20211027132200. -Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Completed forward migration 20211027132200. -Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Running forward migration 20211116115800. -Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Completed forward migration 20211116115800. -Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Running forward migration 20211208163900. -Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Completed forward migration 20211208163900. -Jun 04, 2026 03:41:14.382 [140443274078864] INFO - Running forward migration 202203040100. -Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.382 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.383 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.383 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.384 [140443274078864] INFO - Completed forward migration 202203040100. -Jun 04, 2026 03:41:14.384 [140443274078864] INFO - Running forward migration 202203220200. -Jun 04, 2026 03:41:14.384 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.384 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.385 [140443274078864] INFO - Completed forward migration 202203220200. -Jun 04, 2026 03:41:14.385 [140443274078864] INFO - Running forward migration 202204252200. -Jun 04, 2026 03:41:14.385 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.385 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.385 [140443274078864] INFO - Completed forward migration 202204252200. -Jun 04, 2026 03:41:14.386 [140443274078864] INFO - Running forward migration 202204252300. -Jun 04, 2026 03:41:14.386 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.386 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.386 [140443274078864] INFO - Completed forward migration 202204252300. -Jun 04, 2026 03:41:14.386 [140443274078864] INFO - Running forward migration 202204252330. -Jun 04, 2026 03:41:14.386 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.386 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.387 [140443274078864] INFO - Completed forward migration 202204252330. -Jun 04, 2026 03:41:14.387 [140443274078864] INFO - Running forward migration 202205090900. -Jun 04, 2026 03:41:14.387 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.387 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.388 [140443274078864] INFO - Completed forward migration 202205090900. -Jun 04, 2026 03:41:14.388 [140443274078864] INFO - Running forward migration 202205090930. -Jun 04, 2026 03:41:14.388 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.388 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.389 [140443274078864] INFO - Completed forward migration 202205090930. -Jun 04, 2026 03:41:14.389 [140443274078864] INFO - Running forward migration 202205090940. -Jun 04, 2026 03:41:14.389 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.389 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.390 [140443274078864] INFO - Completed forward migration 202205090940. -Jun 04, 2026 03:41:14.390 [140443274078864] INFO - Running forward migration 202205091600. -Jun 04, 2026 03:41:14.390 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.390 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.391 [140443274078864] INFO - Completed forward migration 202205091600. -Jun 04, 2026 03:41:14.391 [140443274078864] INFO - Running forward migration 202205091700. -Jun 04, 2026 03:41:14.391 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.391 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.392 [140443274078864] INFO - Completed forward migration 202205091700. -Jun 04, 2026 03:41:14.392 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.392 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.392 [140443274078864] INFO - Analyzing database. -Jun 04, 2026 03:41:14.393 [140443274078864] INFO - Vacuuming database. -Jun 04, 2026 03:41:14.421 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.422 [140443274078864] INFO - Running forward migration 202205181200. -Jun 04, 2026 03:41:14.422 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.422 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.422 [140443274078864] INFO - Completed forward migration 202205181200. -Jun 04, 2026 03:41:14.422 [140443274078864] INFO - Running forward migration 202206291100. -Jun 04, 2026 03:41:14.422 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.422 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.423 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 57: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.424 [140443274078864] INFO - Completed forward migration 202206291100. -Jun 04, 2026 03:41:14.424 [140443274078864] INFO - Running forward migration 20220818122500. -Jun 04, 2026 03:41:14.424 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.424 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.424 [140443274078864] INFO - Completed forward migration 20220818122500. -Jun 04, 2026 03:41:14.424 [140443274078864] INFO - Running forward migration 202209091100. -Jun 04, 2026 03:41:14.424 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.424 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.424 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.425 [140443274078864] INFO - Completed forward migration 202209091100. -Jun 04, 2026 03:41:14.425 [140443274078864] INFO - Running forward migration 20220911115800. -Jun 04, 2026 03:41:14.425 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.425 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.425 [140443274078864] INFO - Completed forward migration 20220911115800. -Jun 04, 2026 03:41:14.425 [140443274078864] INFO - Running forward migration 202209271322. -Jun 04, 2026 03:41:14.425 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.425 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.429 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.430 [140443274078864] INFO - Completed forward migration 202209271322. -Jun 04, 2026 03:41:14.430 [140443274078864] INFO - Running forward migration 202210260000. -Jun 04, 2026 03:41:14.430 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.430 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.431 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.431 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.431 [140443274078864] INFO - Completed forward migration 202210260000. -Jun 04, 2026 03:41:14.431 [140443274078864] INFO - Running forward migration 202210260100. -Jun 04, 2026 03:41:14.431 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.431 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.432 [140443274078864] INFO - Completed forward migration 202210260100. -Jun 04, 2026 03:41:14.432 [140443274078864] INFO - Running forward migration 202210260200. -Jun 04, 2026 03:41:14.432 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.432 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.433 [140443274078864] INFO - Completed forward migration 202210260200. -Jun 04, 2026 03:41:14.433 [140443274078864] INFO - Running forward migration 202212012200. -Jun 04, 2026 03:41:14.433 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.433 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.434 [140443274078864] INFO - Completed forward migration 202212012200. -Jun 04, 2026 03:41:14.434 [140443274078864] INFO - Running forward migration 202212012300. -Jun 04, 2026 03:41:14.434 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.434 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.435 [140443274078864] INFO - Completed forward migration 202212012300. -Jun 04, 2026 03:41:14.435 [140443274078864] INFO - Running forward migration 202212022100. -Jun 04, 2026 03:41:14.435 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.435 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.435 [140443274078864] INFO - Completed forward migration 202212022100. -Jun 04, 2026 03:41:14.435 [140443274078864] INFO - Running forward migration 202212022200. -Jun 04, 2026 03:41:14.435 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.435 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.436 [140443274078864] INFO - Completed forward migration 202212022200. -Jun 04, 2026 03:41:14.436 [140443274078864] INFO - Running forward migration 202212022300. -Jun 04, 2026 03:41:14.436 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.436 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.437 [140443274078864] INFO - Completed forward migration 202212022300. -Jun 04, 2026 03:41:14.437 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.437 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.437 [140443274078864] INFO - Analyzing database. -Jun 04, 2026 03:41:14.438 [140443274078864] INFO - Vacuuming database. -Jun 04, 2026 03:41:14.467 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.468 [140443274078864] INFO - Running forward migration 202301280000. -Jun 04, 2026 03:41:14.468 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.468 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.468 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.469 [140443274078864] INFO - Completed forward migration 202301280000. -Jun 04, 2026 03:41:14.469 [140443274078864] INFO - Running forward migration 20230118160000. -Jun 04, 2026 03:41:14.469 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.469 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.469 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Completed forward migration 20230118160000. -Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Running forward migration 20230830160000. -Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Completed forward migration 20230830160000. -Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Running forward migration 202309200901. -Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Completed forward migration 202309200901. -Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Running forward migration 202309200902. -Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Completed forward migration 202309200902. -Jun 04, 2026 03:41:14.470 [140443274078864] INFO - Running forward migration 202309200903. -Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.470 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200903. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200904. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200904. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200905. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200905. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200906. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200906. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200907. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200907. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200908. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200908. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200909. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200909. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200910. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Completed forward migration 202309200910. -Jun 04, 2026 03:41:14.471 [140443274078864] INFO - Running forward migration 202309200911. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.471 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200911. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200912. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200912. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200913. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200913. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200914. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200914. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200915. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200915. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200916. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200916. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200917. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200917. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200918. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Completed forward migration 202309200918. -Jun 04, 2026 03:41:14.472 [140443274078864] INFO - Running forward migration 202309200919. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.472 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.473 [140443274078864] INFO - Completed forward migration 202309200919. -Jun 04, 2026 03:41:14.473 [140443274078864] INFO - Running forward migration 202311120800. -Jun 04, 2026 03:41:14.473 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.473 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.473 [140443274078864] INFO - Completed forward migration 202311120800. -Jun 04, 2026 03:41:14.473 [140443274078864] INFO - Running forward migration 202311171400. -Jun 04, 2026 03:41:14.473 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.473 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.473 [140443274078864] INFO - Completed forward migration 202311171400. -Jun 04, 2026 03:41:14.473 [140443274078864] INFO - Running forward migration 20231120161500. -Jun 04, 2026 03:41:14.473 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.473 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.474 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 58: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.475 [140443274078864] INFO - Completed forward migration 20231120161500. -Jun 04, 2026 03:41:14.475 [140443274078864] INFO - Running forward migration 202312190800. -Jun 04, 2026 03:41:14.475 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.475 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.475 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.475 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.475 [140443274078864] INFO - Completed forward migration 202312190800. -Jun 04, 2026 03:41:14.475 [140443274078864] INFO - Running forward migration 202401290800. -Jun 04, 2026 03:41:14.475 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.475 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.476 [140443274078864] INFO - Completed forward migration 202401290800. -Jun 04, 2026 03:41:14.476 [140443274078864] INFO - Running forward migration 202401290801. -Jun 04, 2026 03:41:14.476 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.476 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.477 [140443274078864] INFO - Completed forward migration 202401290801. -Jun 04, 2026 03:41:14.477 [140443274078864] INFO - Running forward migration 202401290802. -Jun 04, 2026 03:41:14.477 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.477 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.478 [140443274078864] INFO - Completed forward migration 202401290802. -Jun 04, 2026 03:41:14.478 [140443274078864] INFO - Running forward migration 202401290803. -Jun 04, 2026 03:41:14.478 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.478 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.479 [140443274078864] INFO - Completed forward migration 202401290803. -Jun 04, 2026 03:41:14.479 [140443274078864] INFO - Running forward migration 202401290804. -Jun 04, 2026 03:41:14.479 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.479 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.480 [140443274078864] INFO - Completed forward migration 202401290804. -Jun 04, 2026 03:41:14.480 [140443274078864] INFO - Running forward migration 202401290805. -Jun 04, 2026 03:41:14.480 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.480 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.481 [140443274078864] INFO - Completed forward migration 202401290805. -Jun 04, 2026 03:41:14.481 [140443274078864] INFO - Running forward migration 202401290806. -Jun 04, 2026 03:41:14.481 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.481 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.482 [140443274078864] INFO - Completed forward migration 202401290806. -Jun 04, 2026 03:41:14.482 [140443274078864] INFO - Running forward migration 202401290807. -Jun 04, 2026 03:41:14.482 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.482 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.482 [140443274078864] INFO - Completed forward migration 202401290807. -Jun 04, 2026 03:41:14.482 [140443274078864] INFO - Running forward migration 202401290808. -Jun 04, 2026 03:41:14.482 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.482 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.484 [140443274078864] INFO - Completed forward migration 202401290808. -Jun 04, 2026 03:41:14.484 [140443274078864] INFO - Running forward migration 202402260801. -Jun 04, 2026 03:41:14.484 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.484 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.484 [140443274078864] INFO - Completed forward migration 202402260801. -Jun 04, 2026 03:41:14.484 [140443274078864] INFO - Running forward migration 202402260802. -Jun 04, 2026 03:41:14.484 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.484 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.485 [140443274078864] INFO - Completed forward migration 202402260802. -Jun 04, 2026 03:41:14.485 [140443274078864] INFO - Running forward migration 202402260803. -Jun 04, 2026 03:41:14.485 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.485 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.486 [140443274078864] INFO - Completed forward migration 202402260803. -Jun 04, 2026 03:41:14.486 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.486 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.486 [140443274078864] INFO - Analyzing database. -Jun 04, 2026 03:41:14.487 [140443274078864] INFO - Vacuuming database. -Jun 04, 2026 03:41:14.510 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.511 [140443274078864] INFO - Running forward migration 202403110800. -Jun 04, 2026 03:41:14.511 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.511 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.511 [140443274078864] INFO - Completed forward migration 202403110800. -Jun 04, 2026 03:41:14.511 [140443274078864] INFO - Running forward migration 202403120800. -Jun 04, 2026 03:41:14.511 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.511 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.512 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.513 [140443274078864] INFO - Completed forward migration 202403120800. -Jun 04, 2026 03:41:14.513 [140443274078864] INFO - Running forward migration 202404300800. -Jun 04, 2026 03:41:14.513 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.513 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.513 [140443274078864] INFO - Completed forward migration 202404300800. -Jun 04, 2026 03:41:14.513 [140443274078864] INFO - Running forward migration 202406050800. -Jun 04, 2026 03:41:14.513 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.513 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.513 [140443274078864] INFO - Completed forward migration 202406050800. -Jun 04, 2026 03:41:14.513 [140443274078864] INFO - Running forward migration 202406250800. -Jun 04, 2026 03:41:14.513 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.513 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.514 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.514 [140443274078864] INFO - Completed forward migration 202406250800. -Jun 04, 2026 03:41:14.514 [140443274078864] INFO - Running forward migration 202407231422. -Jun 04, 2026 03:41:14.514 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.514 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.515 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 59: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Completed forward migration 202407231422. -Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Running forward migration 20240718114400. -Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Completed forward migration 20240718114400. -Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Running forward migration 202407301359. -Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Completed forward migration 202407301359. -Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Running forward migration 202409201238. -Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Completed forward migration 202409201238. -Jun 04, 2026 03:41:14.516 [140443274078864] INFO - Running forward migration 202502171508. -Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.516 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.517 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.518 [140443274078864] INFO - Completed forward migration 202502171508. -Jun 04, 2026 03:41:14.518 [140443274078864] INFO - Running forward migration 202503041220. -Jun 04, 2026 03:41:14.518 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.518 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.518 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.519 [140443274078864] INFO - Completed forward migration 202503041220. -Jun 04, 2026 03:41:14.519 [140443274078864] INFO - Running forward migration 202503041514. -Jun 04, 2026 03:41:14.519 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.519 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.520 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.520 [140443274078864] INFO - Completed forward migration 202503041514. -Jun 04, 2026 03:41:14.520 [140443274078864] INFO - Running forward migration 202504160804. -Jun 04, 2026 03:41:14.520 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.520 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.521 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.521 [140443274078864] INFO - Completed forward migration 202504160804. -Jun 04, 2026 03:41:14.521 [140443274078864] INFO - Running forward migration 202504161541. -Jun 04, 2026 03:41:14.521 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.521 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.530 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.530 [140443274078864] INFO - Completed forward migration 202504161541. -Jun 04, 2026 03:41:14.530 [140443274078864] INFO - Running forward migration 202504211423. -Jun 04, 2026 03:41:14.530 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.530 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.531 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.531 [140443274078864] INFO - Completed forward migration 202504211423. -Jun 04, 2026 03:41:14.531 [140443274078864] INFO - Running forward migration 202504241552. -Jun 04, 2026 03:41:14.531 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.531 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.531 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.532 [140443274078864] INFO - Completed forward migration 202504241552. -Jun 04, 2026 03:41:14.532 [140443274078864] INFO - Running forward migration 202504301225. -Jun 04, 2026 03:41:14.532 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.532 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.533 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.533 [140443274078864] INFO - Completed forward migration 202504301225. -Jun 04, 2026 03:41:14.533 [140443274078864] INFO - Running forward migration 202507011200. -Jun 04, 2026 03:41:14.533 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.533 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.534 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 60: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.535 [140443274078864] INFO - Completed forward migration 202507011200. -Jun 04, 2026 03:41:14.535 [140443274078864] INFO - Running forward migration 202507311200. -Jun 04, 2026 03:41:14.535 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.535 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.537 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 61: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.538 [140443274078864] INFO - Completed forward migration 202507311200. -Jun 04, 2026 03:41:14.538 [140443274078864] INFO - Running forward migration 202510021115. -Jun 04, 2026 03:41:14.538 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.538 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.538 [140443274078864] INFO - SQLITE3:0x80000001, 17, statement aborts at 62: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:41:14.539 [140443274078864] INFO - Completed forward migration 202510021115. -Jun 04, 2026 03:41:14.539 [140443274078864] INFO - Running forward migration 202601121053. -Jun 04, 2026 03:41:14.539 [140443274078864] DEBUG - Captured session 0. -Jun 04, 2026 03:41:14.539 [140443274078864] DEBUG - Captured session 1. -Jun 04, 2026 03:41:14.539 [140443274078864] INFO - Completed forward migration 202601121053. -Jun 04, 2026 03:41:14.544 [140443251936056] DEBUG - Grabber: Cleaning up orphaned grabs. -Jun 04, 2026 03:41:14.544 [140443251936056] DEBUG - Grabber: Cleaned up 0 decrepit directories in 0.0 sec. -Jun 04, 2026 03:41:14.544 [140443274078864] DEBUG - Media Provider: Registering provider com.plexapp.plugins.library -Jun 04, 2026 03:41:14.544 [140443274078864] DEBUG - Auth: Refreshing tokens inside the token-based authentication filter. -Jun 04, 2026 03:41:14.544 [140443251936056] DEBUG - Auth: Refreshing tokens inside the token-based authentication filter. -Jun 04, 2026 03:41:14.544 [140443274078864] DEBUG - Opening 1 database sessions to library (), SQLite 3.39.4, threadsafe=1 -Jun 04, 2026 03:41:14.545 [140443249711928] DEBUG - File "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea" changed: -1 => 2026-05-19 18:20:18 (1779214818). -Jun 04, 2026 03:41:14.545 [140443249711928] WARN - Warning: ex: boost::filesystem::last_write_time: No such file or directory [system:2]: "/config/Library/Application Support/Plex Media Server/Plug-ins", couldn't check file: "/config/Library/Application Support/Plex Media Server/Plug-ins" -Jun 04, 2026 03:41:14.545 [140443249711928] DEBUG - Scanning for plug-ins in "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea" -Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - Scanning for plug-ins in "/config/Library/Application Support/Plex Media Server/Plug-ins" -Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - PluginRepository::setStartState: 1, startingSystem -Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/System.bundle. -Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - [com.plexapp.system] Setting plug-in to always running (daemon mode). -Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - Starting file watcher for com.plexapp.system -Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - Spawned plug-in com.plexapp.system with PID 293 -Jun 04, 2026 03:41:14.547 [140443249711928] DEBUG - [com.plexapp.system] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:14.948 [140443245435704] DEBUG - Request: [127.0.0.1:59932 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #1 GZIP Token () -Jun 04, 2026 03:41:14.948 [140443259251512] DEBUG - Completed: [127.0.0.1:59932] 503 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #1 GZIP 0ms 436 bytes -Jun 04, 2026 03:41:14.948 [140443245435704] DEBUG - Request: [127.0.0.1:59948 (Loopback)] GET / (3 live) #3 GZIP Token () -Jun 04, 2026 03:41:14.948 [140443261360952] DEBUG - Completed: [127.0.0.1:59948] 503 GET / (2 live) #3 GZIP 0ms 436 bytes -Jun 04, 2026 03:41:15.212 [140443245435704] DEBUG - Request: [127.0.0.1:59960 (Loopback)] GET /:/plugins/com.plexapp.agents.fanarttv (2 live) #4 GZIP Token () -Jun 04, 2026 03:41:15.212 [140443259251512] DEBUG - Completed: [127.0.0.1:59960] 503 GET /:/plugins/com.plexapp.agents.fanarttv (2 live) #4 GZIP 0ms 436 bytes -Jun 04, 2026 03:41:15.214 [140443245435704] DEBUG - Request: [127.0.0.1:59964 (Loopback)] GET /servers (2 live) #8 GZIP Token () -Jun 04, 2026 03:41:15.214 [140443261360952] DEBUG - Completed: [127.0.0.1:59964] 503 GET /servers (2 live) #8 GZIP 0ms 436 bytes -Jun 04, 2026 03:41:15.217 [140443245435704] DEBUG - Request: [127.0.0.1:59976 (Loopback)] GET /:/plugins/org.musicbrainz.agents.music (2 live) #a GZIP Token () -Jun 04, 2026 03:41:15.217 [140443259251512] DEBUG - Completed: [127.0.0.1:59976] 503 GET /:/plugins/org.musicbrainz.agents.music (2 live) #a GZIP 0ms 436 bytes -Jun 04, 2026 03:41:15.220 [140443245435704] DEBUG - Request: [127.0.0.1:59984 (Loopback)] GET /:/plugins/com.plexapp.agents.lyricfind (2 live) #c GZIP Token () -Jun 04, 2026 03:41:15.220 [140443259251512] DEBUG - Completed: [127.0.0.1:59984] 503 GET /:/plugins/com.plexapp.agents.lyricfind (2 live) #c GZIP 0ms 436 bytes -Jun 04, 2026 03:41:15.223 [140443245435704] DEBUG - Request: [127.0.0.1:59994 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #e GZIP Token () -Jun 04, 2026 03:41:15.223 [140443261360952] DEBUG - Completed: [127.0.0.1:59994] 503 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #e GZIP 0ms 436 bytes -Jun 04, 2026 03:41:15.225 [140443245435704] DEBUG - Request: [127.0.0.1:60010 (Loopback)] GET /:/plugins/com.plexapp.agents.themoviedb (2 live) #10 GZIP Token () -Jun 04, 2026 03:41:15.225 [140443261360952] DEBUG - Completed: [127.0.0.1:60010] 503 GET /:/plugins/com.plexapp.agents.themoviedb (2 live) #10 GZIP 0ms 436 bytes -Jun 04, 2026 03:41:15.228 [140443245435704] DEBUG - Request: [127.0.0.1:60018 (Loopback)] GET /:/plugins/com.plexapp.agents.localmedia (2 live) #12 GZIP Token () -Jun 04, 2026 03:41:15.228 [140443261360952] DEBUG - Completed: [127.0.0.1:60018] 503 GET /:/plugins/com.plexapp.agents.localmedia (2 live) #12 GZIP 0ms 436 bytes -Jun 04, 2026 03:41:15.230 [140443245435704] DEBUG - Request: [127.0.0.1:60034 (Loopback)] GET /:/plugins/com.plexapp.agents.none (2 live) #14 GZIP Token () -Jun 04, 2026 03:41:15.230 [140443261360952] DEBUG - Completed: [127.0.0.1:60034] 503 GET /:/plugins/com.plexapp.agents.none (2 live) #14 GZIP 0ms 436 bytes -Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - Reading 486 bytes in the body, code is 200 -Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - [com.plexapp.system] Plug-in running on port 33755. -Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - * Plug-in handles prefix: /system -Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - * Plug-in handles prefix: /player -Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - Read configuration for [com.plexapp.system], had 2 prefixes -Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - Updating [com.plexapp.system] in the database, it has changed. -Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - Done with 1 synchronous plug-in starts, starting the rest in parallel. -Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - PluginRepository::setStartState: 2, startingPlugins -Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - Updating the list of agents known by the system. -Jun 04, 2026 03:41:15.231 [140443249711928] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents -Jun 04, 2026 03:41:15.232 [140443249711928] DEBUG - [HCl#1] HTTP requesting GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:15.232 [140443274078864] DEBUG - Image transcode cache directory: "/config/Library/Application Support/Plex Media Server/Cache/PhotoTranscoder" -Jun 04, 2026 03:41:15.232 [140443245435704] DEBUG - Request: [127.0.0.1:60050 (Loopback)] GET /:/plugins/com.plexapp.agents.plexthememusic (2 live) #16 GZIP Token () -Jun 04, 2026 03:41:15.232 [140443261360952] DEBUG - Completed: [127.0.0.1:60050] 503 GET /:/plugins/com.plexapp.agents.plexthememusic (2 live) #16 GZIP 0ms 436 bytes -Jun 04, 2026 03:41:15.232 [140443274078864] DEBUG - Transcoder: Cleaning old transcode directories. -Jun 04, 2026 03:41:15.232 [140443274078864] DEBUG - MyPlex: stop public ip check and mapping - current mapped state: 'Unknown'. -Jun 04, 2026 03:41:15.232 [140443274078864] DEBUG - NetworkInterface: Starting watch thread. -Jun 04, 2026 03:41:15.232 [140443274078864] DEBUG - Network change. -Jun 04, 2026 03:41:15.232 [140443274078864] DEBUG - NetworkInterface: Notified of network changed (force=0) -Jun 04, 2026 03:41:15.233 [140443238914872] DEBUG - NetworkInterface: Watching for changes on the interfaces. -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - Detected primary interface: 172.22.0.2 -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - Network interfaces: -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - * 1 lo (127.0.0.1) (00-00-00-00-00-00) (loopback: 1) -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - * 2 eth0 (172.22.0.2) (86-A2-90-EC-DD-8A) (loopback: 0) -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - * 1 lo (::1) (00-00-00-00-00-00) (loopback: 1) -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - Creating NetworkServices singleton. -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkServices: Initializing... -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Creating new service. -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Got notification of changed network (first change: 1) -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Quick dispatch of network change. -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Creating new service. -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - Network change for advertiser. -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Got notification of changed network (first change: 1) -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Quick dispatch of network change. -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Creating new service. -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Setting up multicast listener on 0.0.0.0:32414 -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Got notification of changed network (first change: 1) -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Quick dispatch of network change. -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Creating new service. -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Got notification of changed network (first change: 1) -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Quick dispatch of network change. -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Creating new service. -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Got notification of changed network (first change: 1) -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Quick dispatch of network change. -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Creating new service. -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Got notification of changed network (first change: 1) -Jun 04, 2026 03:41:15.233 [140443274078864] DEBUG - NetworkService: Quick dispatch of network change. -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - Network change for advertiser. -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Setting up multicast listener on 0.0.0.0:32410 -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - Network change for advertiser. -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Setting up multicast listener on 0.0.0.0:32412 -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Network change for browser (polled=0), closing 0 browse sockets. -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Setting up multicast listener on 0.0.0.0:32413 -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Browsing on interface 127.0.0.1 on broadcast address 127.255.255.255 (index: 0) -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Browsing on interface 172.22.0.2 on broadcast address 172.22.255.255 (index: 1) -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Network change for browser (polled=1), closing 0 browse sockets. -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Browsing on interface 127.0.0.1 on broadcast address 127.255.255.255 (index: 0) -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Browsing on interface 172.22.0.2 on broadcast address 172.22.255.255 (index: 1) -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Network change for browser (polled=0), closing 0 browse sockets. -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Setting up multicast listener on 0.0.0.0:1901 -Jun 04, 2026 03:41:15.233 [140443236805432] DEBUG - NetworkService: Browsing on interface 172.22.0.2 on broadcast address 239.255.255.250 (index: 0) -Jun 04, 2026 03:41:15.234 [140443232586552] DEBUG - [ChildProcessMonitor] Plex Tuner Service starting. -Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups] Running fix-ups. -Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/31DatabaseFixupsCleanupRetroGames] Executing fixup -Jun 04, 2026 03:41:15.234 [140443232586552] DEBUG - [ChildProcessMonitor/JobRunner] Job running: "/usr/lib/plexmediaserver/Plex Tuner Service" /usr/lib/plexmediaserver/Resources/Tuner/Private /usr/lib/plexmediaserver/Resources/Tuner/Shared 1.43.2.10687-563d026ea 32600 -Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/31DatabaseFixupsCleanupRetroGames] Fixup completed -Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/39DatabaseFixupsEnsureLibrarySectionUuids] Executing fixup -Jun 04, 2026 03:41:15.234 [140443234695992] DEBUG - [HCl#2] HTTP requesting GET https://plex.tv/api/v2/release_channels?X-Plex-Token= -Jun 04, 2026 03:41:15.234 [140443232586552] DEBUG - [ChildProcessMonitor/JobRunner] Jobs: Starting child process with pid 341 -Jun 04, 2026 03:41:15.234 [140443274078864] DEBUG - Waiting for server condition to be signaled. -Jun 04, 2026 03:41:15.234 [140443230477112] DEBUG - [HCl#3] HTTP requesting GET https://plex.tv/api/v2/user/privacy?X-Plex-Token= -Jun 04, 2026 03:41:15.234 [140443224148792] DEBUG - [HCl#4] HTTP requesting GET https://plex.tv/api/v2/features?X-Plex-Token= -Jun 04, 2026 03:41:15.234 [140443219913528] DEBUG - DVR: Starting up. -Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/39DatabaseFixupsEnsureLibrarySectionUuids] Fixup completed -Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/38DatabaseFixupsEnsureMetadataItemHashes] Executing fixup -Jun 04, 2026 03:41:15.234 [140443217804088] DEBUG - MyPlex: Sending unclaimed device connections -Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/38DatabaseFixupsEnsureMetadataItemHashes] Fixup completed -Jun 04, 2026 03:41:15.234 [140443251936056] DEBUG - [DatabaseFixups/39DatabaseFixupsSetDefaultAccountLanguage] Executing fixup -Jun 04, 2026 03:41:15.234 [140443217804088] DEBUG - [HCl#5] HTTP requesting POST https://plex.tv/devices/b4e051156514c3673d6305f3df48b2bd645d6fd5/unclaimed?Connection[][uri]=http://172.22.0.2:32400 -Jun 04, 2026 03:41:15.235 [140443219913528] DEBUG - Activity: registered new activity 6b799016-6b14-47d1-9b4e-8a01dab8a338 - "Processing subscriptions" -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Request: [127.0.0.1:60060 (Loopback)] GET /:/plugins/com.plexapp.agents.htbackdrops (2 live) #18 GZIP Token () -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale af -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale ar -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale cs_CZ -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale da -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale de -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale en -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale es -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale et_EE -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale fi -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale fr -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale he -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale hr_HR -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale hu -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale hu_HU -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale it -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale ja_JP -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale ko -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale lt -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale nl -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale nl_BE -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale no -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale pl -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale pt -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale pt_BR -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale ro -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale ru -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale sk -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale sl -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale sr -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale sv -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale uk -Jun 04, 2026 03:41:15.235 [140443245435704] DEBUG - Translator: Found locale zh_CN -Jun 04, 2026 03:41:15.236 [140443251936056] DEBUG - [DatabaseFixups/39DatabaseFixupsSetDefaultAccountLanguage] MyPlex: Update my mapping state on myPlex -Jun 04, 2026 03:41:15.236 [140443251936056] DEBUG - [DatabaseFixups/39DatabaseFixupsSetDefaultAccountLanguage] Fixup completed -Jun 04, 2026 03:41:15.236 [140443251936056] DEBUG - [DatabaseFixups/52DatabaseFixupsCreateDefaultMediaProcessingTargetTags] Executing fixup -Jun 04, 2026 03:41:15.236 [140443207035704] DEBUG - MyPlex: mapping state set to 'Mapped - Not Published'. -Jun 04, 2026 03:41:15.237 [140443251936056] DEBUG - [DatabaseFixups/52DatabaseFixupsCreateDefaultMediaProcessingTargetTags] Fixup completed -Jun 04, 2026 03:41:15.237 [140443251936056] DEBUG - [DatabaseFixups/43DatabaseFixupsUpdateAutomaticLibraryFolders] Executing fixup -Jun 04, 2026 03:41:15.237 [140443251936056] DEBUG - [DatabaseFixups/43DatabaseFixupsUpdateAutomaticLibraryFolders] Fixup completed -Jun 04, 2026 03:41:15.238 [140443251936056] DEBUG - [DatabaseFixups/29DatabaseFixupsSyncCollections] Executing fixup -Jun 04, 2026 03:41:15.238 [140443251936056] DEBUG - [DatabaseFixups/29DatabaseFixupsSyncCollections] Fixup completed -Jun 04, 2026 03:41:15.238 [140443251936056] DEBUG - [DatabaseFixups/31DatabaseFixupsCleanupActivities] Executing fixup -Jun 04, 2026 03:41:15.238 [140443245435704] WARN - [Req#18] Request for plug-in [com.plexapp.agents.htbackdrops] but it doesn't exist. -Jun 04, 2026 03:41:15.239 [140443261360952] DEBUG - Completed: [127.0.0.1:60060] 404 GET /:/plugins/com.plexapp.agents.htbackdrops (2 live) #18 GZIP 3ms 350 bytes -Jun 04, 2026 03:41:15.239 [140443251936056] DEBUG - [DatabaseFixups/31DatabaseFixupsCleanupActivities] Fixup completed -Jun 04, 2026 03:41:15.239 [140443251936056] DEBUG - [DatabaseFixups/35DatabaseFixupsConsolidatePeopleTags] Executing fixup -Jun 04, 2026 03:41:15.240 [140443251936056] DEBUG - [DatabaseFixups/35DatabaseFixupsConsolidatePeopleTags] Fixup completed -Jun 04, 2026 03:41:15.240 [140443251936056] DEBUG - [DatabaseFixups/54DatabaseFixupsGarbageCollectTransientMetadataRelations] Executing fixup -Jun 04, 2026 03:41:15.240 [140443251936056] DEBUG - [DatabaseFixups/54DatabaseFixupsGarbageCollectTransientMetadataRelations] Fixup completed -Jun 04, 2026 03:41:15.240 [140443251936056] DEBUG - [DatabaseFixups/48DatabaseFixupsResetCorruptedMetadataItemClusters] Executing fixup -Jun 04, 2026 03:41:15.240 [140443251936056] DEBUG - [DatabaseFixups/48DatabaseFixupsResetCorruptedMetadataItemClusters] Fixup completed -Jun 04, 2026 03:41:15.240 [140443251936056] DEBUG - [DatabaseFixups] Running database fix-ups completed in 0.0 seconds. -Jun 04, 2026 03:41:15.242 [140443245435704] DEBUG - Request: [127.0.0.1:60070 (Loopback)] GET /:/plugins/com.plexapp.agents.movieposterdb (2 live) #1c GZIP Token () -Jun 04, 2026 03:41:15.242 [140443245435704] WARN - [Req#1c] Request for plug-in [com.plexapp.agents.movieposterdb] but it doesn't exist. -Jun 04, 2026 03:41:15.242 [140443261360952] DEBUG - Completed: [127.0.0.1:60070] 404 GET /:/plugins/com.plexapp.agents.movieposterdb (2 live) #1c GZIP 0ms 350 bytes -Jun 04, 2026 03:41:15.244 [140443245435704] DEBUG - Request: [127.0.0.1:60084 (Loopback)] GET /:/plugins/com.plexapp.agents.lastfm (2 live) #1e GZIP Token () -Jun 04, 2026 03:41:15.244 [140443245435704] WARN - [Req#1e] Request for plug-in [com.plexapp.agents.lastfm] but it doesn't exist. -Jun 04, 2026 03:41:15.244 [140443261360952] DEBUG - Completed: [127.0.0.1:60084] 404 GET /:/plugins/com.plexapp.agents.lastfm (2 live) #1e GZIP 0ms 350 bytes -Jun 04, 2026 03:41:15.246 [140443245435704] DEBUG - Request: [127.0.0.1:60096 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #20 GZIP Token () -Jun 04, 2026 03:41:15.246 [140443245435704] WARN - [Req#20] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. -Jun 04, 2026 03:41:15.246 [140443259251512] DEBUG - Completed: [127.0.0.1:60096] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #20 GZIP 0ms 350 bytes -Jun 04, 2026 03:41:15.248 [140443245435704] DEBUG - Request: [127.0.0.1:60110 (Loopback)] GET /:/plugins/com.plexapp.agents.imdb (2 live) #22 GZIP Token () -Jun 04, 2026 03:41:15.248 [140443245435704] WARN - [Req#22] Request for plug-in [com.plexapp.agents.imdb] but it doesn't exist. -Jun 04, 2026 03:41:15.248 [140443259251512] DEBUG - Completed: [127.0.0.1:60110] 404 GET /:/plugins/com.plexapp.agents.imdb (2 live) #22 GZIP 0ms 350 bytes -Jun 04, 2026 03:41:15.248 [140443245435704] DEBUG - Request: [127.0.0.1:60124 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #24 GZIP Token () -Jun 04, 2026 03:41:15.248 [140443245435704] WARN - [Req#24] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. -Jun 04, 2026 03:41:15.249 [140443261360952] DEBUG - Completed: [127.0.0.1:60124] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #24 GZIP 0ms 350 bytes -Jun 04, 2026 03:41:15.249 [140443245435704] DEBUG - Request: [127.0.0.1:60132 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #26 GZIP Token () -Jun 04, 2026 03:41:15.249 [140443245435704] WARN - [Req#26] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. -Jun 04, 2026 03:41:15.250 [140443261360952] DEBUG - Completed: [127.0.0.1:60132] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #26 GZIP 0ms 350 bytes -Jun 04, 2026 03:41:15.250 [140443243293496] DEBUG - [HttpClient/HCl#1] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:15.251 [140443249711928] DEBUG - [com.plexapp.system] HTTP reply status 200, with 130 bytes of content. -Jun 04, 2026 03:41:15.251 [140443249711928] DEBUG - The system knows about 0 agents. -Jun 04, 2026 03:41:15.251 [140443204926264] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Fanart-TV.bundle. -Jun 04, 2026 03:41:15.251 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Framework.bundle. -Jun 04, 2026 03:41:15.251 [140443200707384] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/HTbackdrops.bundle. -Jun 04, 2026 03:41:15.251 [140443249711928] DEBUG - Waiting for 16 plug-ins to finish starting. -Jun 04, 2026 03:41:15.252 [140443200707384] DEBUG - [com.plexapp.agents.htbackdrops] Agent not known by system, so we're starting for sure. -Jun 04, 2026 03:41:15.252 [140443200707384] DEBUG - Starting file watcher for com.plexapp.agents.htbackdrops -Jun 04, 2026 03:41:15.252 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:15.252 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:15.252 [140443204926264] DEBUG - [com.plexapp.agents.fanarttv] Agent not known by system, so we're starting for sure. -Jun 04, 2026 03:41:15.252 [140443204926264] DEBUG - Starting file watcher for com.plexapp.agents.fanarttv -Jun 04, 2026 03:41:15.252 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/LastFM.bundle. -Jun 04, 2026 03:41:15.253 [140443202816824] DEBUG - [com.plexapp.agents.lastfm] Agent not known by system, so we're starting for sure. -Jun 04, 2026 03:41:15.253 [140443202816824] DEBUG - Starting file watcher for com.plexapp.agents.lastfm -Jun 04, 2026 03:41:15.253 [140443200707384] DEBUG - Spawned plug-in com.plexapp.agents.htbackdrops with PID 370 -Jun 04, 2026 03:41:15.253 [140443200707384] DEBUG - [com.plexapp.agents.htbackdrops] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:15.253 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:15.253 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:15.253 [140443204926264] DEBUG - Spawned plug-in com.plexapp.agents.fanarttv with PID 373 -Jun 04, 2026 03:41:15.253 [140443204926264] DEBUG - [com.plexapp.agents.fanarttv] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:15.253 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:15.253 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:15.254 [140443202816824] DEBUG - Spawned plug-in com.plexapp.agents.lastfm with PID 374 -Jun 04, 2026 03:41:15.254 [140443202816824] DEBUG - [com.plexapp.agents.lastfm] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:15.382 [140443243293496] DEBUG - [HttpClient/HCl#5] HTTP/1.1 (0.1s) 200 response from POST https://plex.tv/devices/b4e051156514c3673d6305f3df48b2bd645d6fd5/unclaimed?Connection[][uri]=http://172.22.0.2:32400 -Jun 04, 2026 03:41:15.396 [140443243293496] DEBUG - [HttpClient/HCl#2] HTTP/1.1 (0.2s) 200 response from GET https://plex.tv/api/v2/release_channels?X-Plex-Token= -Jun 04, 2026 03:41:15.402 [140443243293496] DEBUG - [HttpClient/HCl#3] HTTP/1.1 (0.2s) 200 response from GET https://plex.tv/api/v2/user/privacy?X-Plex-Token= -Jun 04, 2026 03:41:15.409 [140443243293496] DEBUG - [HttpClient/HCl#4] HTTP/1.1 (0.2s) 200 response from GET https://plex.tv/api/v2/features?X-Plex-Token= -Jun 04, 2026 03:41:15.409 [140443224148792] DEBUG - [HCl#6] HTTP requesting GET https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 -Jun 04, 2026 03:41:15.467 [140443243293496] DEBUG - [HttpClient/HCl#6] HTTP/1.1 (0.1s) 401 response from GET https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 (reused) -Jun 04, 2026 03:41:15.467 [140443207035704] ERROR - MyPlex: Error 401 requesting JSON from: https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 -Jun 04, 2026 03:41:15.467 [140443224148792] WARN - FeatureManager: Couldn't get features. Trying again soon. -Jun 04, 2026 03:41:15.606 [140443226258232] DEBUG - [JobRunner] Job running: /usr/lib/plexmediaserver/CrashUploader "--directory=/config/Library/Application Support/Plex Media Server/Crash Reports/1.43.2.10687-563d026ea" --version=1.43.2.10687-563d026ea --platform=Linux --platformVersion=7.0.10-arch1-1 --serverUuid=b4e051156514c3673d6305f3df48b2bd645d6fd5 --userId=NOUSERID --sentryUrl=https://o17675.ingest.sentry.io/api/1233455/ --sentryKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --vendor=Docker --model=x86_64 "--device=Docker Container" -Jun 04, 2026 03:41:15.606 [140443226258232] DEBUG - [JobRunner] Jobs: Starting child process with pid 381 -Jun 04, 2026 03:41:15.610 [140443269335864] DEBUG - Jobs: '/usr/lib/plexmediaserver/CrashUploader' exit code for process 381 is 0 (success) -Jun 04, 2026 03:41:15.612 [140443245435704] DEBUG - Request: [127.0.0.1:60146 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.fanarttv (3 live) #28 GZIP Token () -Jun 04, 2026 03:41:15.612 [140443245435704] DEBUG - [Req#28] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.fanarttv -Jun 04, 2026 03:41:15.612 [140443245435704] DEBUG - [Req#28/HCl#7] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.fanarttv -Jun 04, 2026 03:41:15.612 [140443209292600] DEBUG - Request: [127.0.0.1:60156 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.lastfm (3 live) #2a GZIP Token () -Jun 04, 2026 03:41:15.612 [140443209292600] DEBUG - [Req#2a] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.lastfm -Jun 04, 2026 03:41:15.612 [140443209292600] DEBUG - [Req#2a/HCl#8] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.lastfm -Jun 04, 2026 03:41:15.616 [140443190213432] DEBUG - Request: [127.0.0.1:60172 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.htbackdrops (4 live) #2b GZIP Token () -Jun 04, 2026 03:41:15.616 [140443190213432] DEBUG - [Req#2b] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.htbackdrops -Jun 04, 2026 03:41:15.616 [140443190213432] DEBUG - [Req#2b/HCl#9] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.htbackdrops -Jun 04, 2026 03:41:15.624 [140443243293496] DEBUG - [HttpClient/HCl#8] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.lastfm -Jun 04, 2026 03:41:15.624 [140443209292600] DEBUG - [Req#2a] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:15.624 [140443259251512] DEBUG - Completed: [127.0.0.1:60156] 200 GET /system/messaging/clear_events/com.plexapp.agents.lastfm (4 live) #2a GZIP 11ms 280 bytes -Jun 04, 2026 03:41:15.624 [140443243293496] DEBUG - [HttpClient/HCl#7] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.fanarttv -Jun 04, 2026 03:41:15.624 [140443245435704] DEBUG - [Req#28] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:15.624 [140443259251512] DEBUG - Completed: [127.0.0.1:60146] 200 GET /system/messaging/clear_events/com.plexapp.agents.fanarttv (3 live) #28 GZIP 12ms 280 bytes -Jun 04, 2026 03:41:15.625 [140443243293496] DEBUG - [HttpClient/HCl#9] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.htbackdrops -Jun 04, 2026 03:41:15.625 [140443190213432] DEBUG - [Req#2b] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:15.625 [140443261360952] DEBUG - Completed: [127.0.0.1:60172] 200 GET /system/messaging/clear_events/com.plexapp.agents.htbackdrops (2 live) #2b GZIP 9ms 280 bytes -Jun 04, 2026 03:41:15.656 [140443209292600] DEBUG - Request: [127.0.0.1:60174 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #2c GZIP Token () -Jun 04, 2026 03:41:15.656 [140443209292600] DEBUG - [Req#2c] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:15.656 [140443209292600] DEBUG - [Req#2c/HCl#a] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:15.657 [140443245435704] DEBUG - Request: [127.0.0.1:60190 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (3 live) #30 GZIP Token () -Jun 04, 2026 03:41:15.657 [140443245435704] DEBUG - [Req#30] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:15.657 [140443245435704] DEBUG - [Req#30/HCl#b] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:15.660 [140443190213432] DEBUG - Request: [127.0.0.1:60192 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (4 live) #31 GZIP Token () -Jun 04, 2026 03:41:15.660 [140443190213432] DEBUG - [Req#31] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:15.660 [140443190213432] DEBUG - [Req#31/HCl#c] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:15.680 [140443243293496] DEBUG - [HttpClient/HCl#b] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:15.680 [140443245435704] DEBUG - [Req#30] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:15.680 [140443261360952] DEBUG - Completed: [127.0.0.1:60190] 404 GET /:/plugins/com.plexapp.system/resourceHashes (4 live) #30 GZIP 22ms 261 bytes -Jun 04, 2026 03:41:15.680 [140443243293496] DEBUG - [HttpClient/HCl#a] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:15.680 [140443209292600] DEBUG - [Req#2c] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:15.680 [140443261360952] DEBUG - Completed: [127.0.0.1:60174] 404 GET /:/plugins/com.plexapp.system/resourceHashes (3 live) #2c GZIP 23ms 261 bytes -Jun 04, 2026 03:41:15.681 [140443243293496] DEBUG - [HttpClient/HCl#c] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:15.681 [140443190213432] DEBUG - [Req#31] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:15.681 [140443261360952] DEBUG - Completed: [127.0.0.1:60192] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #31 GZIP 21ms 261 bytes -Jun 04, 2026 03:41:15.686 [140443245435704] DEBUG - Request: [127.0.0.1:60208 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #32 GZIP Token () -Jun 04, 2026 03:41:15.686 [140443245435704] DEBUG - [Req#32] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:15.686 [140443245435704] DEBUG - [Req#32/HCl#d] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:15.686 [140443209292600] DEBUG - Request: [127.0.0.1:60216 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (4 live) #36 GZIP Token () -Jun 04, 2026 03:41:15.686 [140443209292600] DEBUG - [Req#36] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:15.686 [140443190213432] DEBUG - Request: [127.0.0.1:60220 (Loopback)] GET / (4 live) #37 GZIP Token () -Jun 04, 2026 03:41:15.686 [140443209292600] DEBUG - [Req#36/HCl#e] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:15.687 [140443188103992] DEBUG - Request: [127.0.0.1:60226 (Loopback)] GET / (5 live) #38 GZIP Token () -Jun 04, 2026 03:41:15.687 [140443185994552] DEBUG - Request: [127.0.0.1:60236 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (6 live) #39 GZIP Token () -Jun 04, 2026 03:41:15.687 [140443185994552] DEBUG - [Req#39] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:15.687 [140443185994552] DEBUG - [Req#39/HCl#f] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:15.687 [140443261360952] DEBUG - Completed: [127.0.0.1:60220] 200 GET / (6 live) #37 GZIP 0ms 2666 bytes -Jun 04, 2026 03:41:15.687 [140443261360952] DEBUG - Completed: [127.0.0.1:60226] 200 GET / (5 live) #38 GZIP 0ms 2666 bytes -Jun 04, 2026 03:41:15.687 [140443190213432] DEBUG - Request: [127.0.0.1:60250 (Loopback)] GET / (5 live) #3a GZIP Token () -Jun 04, 2026 03:41:15.688 [140443261360952] DEBUG - Completed: [127.0.0.1:60250] 200 GET / (5 live) #3a GZIP 0ms 2666 bytes -Jun 04, 2026 03:41:15.689 [140443243293496] DEBUG - [HttpClient/HCl#d] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:15.689 [140443245435704] DEBUG - [Req#32] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:15.689 [140443261360952] DEBUG - Completed: [127.0.0.1:60208] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (4 live) #32 GZIP 3ms 746 bytes -Jun 04, 2026 03:41:15.690 [140443243293496] DEBUG - [HttpClient/HCl#e] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:15.690 [140443209292600] DEBUG - [Req#36] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:15.690 [140443261360952] DEBUG - Completed: [127.0.0.1:60216] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (3 live) #36 GZIP 3ms 746 bytes -Jun 04, 2026 03:41:15.691 [140443243293496] DEBUG - [HttpClient/HCl#f] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:15.691 [140443185994552] DEBUG - [Req#39] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:15.692 [140443261360952] DEBUG - Completed: [127.0.0.1:60236] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #39 GZIP 4ms 746 bytes -Jun 04, 2026 03:41:15.707 [140443188103992] DEBUG - Request: [127.0.0.1:60254 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK (2 live) #3d GZIP Token () -Jun 04, 2026 03:41:15.708 [140443188103992] DEBUG - [Req#3d] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK -Jun 04, 2026 03:41:15.708 [140443188103992] DEBUG - [Req#3d/HCl#10] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK -Jun 04, 2026 03:41:15.710 [140443243293496] DEBUG - [HttpClient/HCl#10] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK -Jun 04, 2026 03:41:15.710 [140443188103992] DEBUG - [Req#3d] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:15.710 [140443259251512] DEBUG - Completed: [127.0.0.1:60254] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMwCmNvbS5wbGV4YXBwLmFnZW50cy5odGJhY2tkcm9wc3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyCkhvbWUgVGhlYXRlciBCYWNrZHJvcHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtMTg3CnMyCmFiczIKYWFzMgphZnMyCmFrczIKc3FzMgphbXMyCmFyczIKYW5zMgpoeXMyCmFzczIKYXZzMgphZXMyCmF5czIKYXpzMgpibXMyCmJhczIKZXVzMgpiZXMyCmJuczIKYmhzMgpiaXMyCmJzczIKcGJzMgpicnMyCmJnczIKbXlzMgpjYXMyCmNoczIKY2VzMgpueXMyCnpoczIKY3VzMgpjdnMyCmt3czIKY29zMgpjcnMyCmhyczIKY3NzMgpkYXMyCmR2czIKbmxzMgpkenMyCmVuczIKZW9zMgpldHMyCmVlczIKZm9zMgpmanMyCmZpczIKZnJzMgpmeXMyCmZmczIKZ2RzMgpnbHMyCmxnczIKa2FzMgpkZXMyCmVsczIKZ25zMgpndXMyCmh0czIKaGFzMgpoZXMyCmh6czIKaGlzMgpob3MyCmh1czIKaXNzMgppb3MyCmlnczIKaWRzMgppYXMyCmllczIKaXVzMgppa3MyCmdhczIKaXRzMgpqYXMyCmp2czIKa2xzMgprbnMyCmtyczIKa3NzMgpra3MyCmttczIKa2lzMgpyd3MyCmt5czIKa3ZzMgprZ3MyCmtvczIKa2pzMgprdXMyCmxvczIKbGFzMgpsdnMyCmxpczIKbG5zMgpsdHMyCmx1czIKbGJzMgpta3MyCm1nczIKbXNzMgptbHMyCm10czIKZ3ZzMgptaXMyCm1yczIKbWhzMgptb3MyCm1uczIKbmFzMgpudnMyCm5nczIKbmVzMgp4bnMyCm5kczIKbm9zMgpuYnMyCm5uczIKb2NzMgpvanMyCm9yczIKb21zMgpvc3MyCnBpczIKcGFzMgpmYXMyCnBsczIKcHRzMgpwc3MyCnF1czIKcm1zMgpyb3MyCnJuczIKcnVzMgpzZXMyCnNtczIKc2dzMgpzYXMyCnNjczIKc3JzMgpzbnMyCmlpczIKc2RzMgpzaXMyCnNrczIKc2xzMgpzb3MyCnN0czIKbnJzMgplc3MyCnN1czIKc3dzMgpzc3MyCnN2czIKdGxzMgp0eXMyCnRnczIKdGFzMgp0dHMyCnRlczIKdGhzMgpib3MyCnRpczIKdG9zMgp0c3MyCnRuczIKdHJzMgp0a3MyCnR3czIKdWdzMgp1a3MyCnVyczIKdXpzMgp2ZXMyCnZpczIKdm9zMgp3YXMyCmN5czIKd29zMgp4aHMyCnlpczIKeW9zMgp6YXMyCnp1cjAK (2 live) #3d GZIP 2ms 415 bytes -Jun 04, 2026 03:41:15.712 [140443200707384] DEBUG - Reading 155 bytes in the body, code is 200 -Jun 04, 2026 03:41:15.712 [140443200707384] DEBUG - [com.plexapp.agents.htbackdrops] Plug-in running on port 38111. -Jun 04, 2026 03:41:15.712 [140443200707384] DEBUG - Read configuration for [com.plexapp.agents.htbackdrops], had 0 prefixes -Jun 04, 2026 03:41:15.713 [140443200707384] DEBUG - Updating [com.plexapp.agents.htbackdrops] in the database, it has changed. -Jun 04, 2026 03:41:15.713 [140443228367672] DEBUG - Updating the list of agents known by the system. -Jun 04, 2026 03:41:15.713 [140443200707384] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/LocalMedia.bundle. -Jun 04, 2026 03:41:15.713 [140443228367672] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents -Jun 04, 2026 03:41:15.713 [140443228367672] DEBUG - [HCl#11] HTTP requesting GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:15.715 [140443190213432] DEBUG - Request: [127.0.0.1:60270 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #42 GZIP Token () -Jun 04, 2026 03:41:15.715 [140443190213432] WARN - [Req#42] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. -Jun 04, 2026 03:41:15.715 [140443259251512] DEBUG - Completed: [127.0.0.1:60270] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #42 GZIP 0ms 350 bytes -Jun 04, 2026 03:41:15.716 [140443243293496] DEBUG - [HttpClient/HCl#11] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:15.716 [140443228367672] DEBUG - [com.plexapp.system] HTTP reply status 200, with 246 bytes of content. -Jun 04, 2026 03:41:15.716 [140443228367672] DEBUG - The system knows about 1 agents. -Jun 04, 2026 03:41:15.716 [140443200707384] DEBUG - [com.plexapp.agents.localmedia] Agent not known by system, so we're starting for sure. -Jun 04, 2026 03:41:15.716 [140443200707384] DEBUG - Starting file watcher for com.plexapp.agents.localmedia -Jun 04, 2026 03:41:15.716 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:15.716 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:15.717 [140443200707384] DEBUG - Spawned plug-in com.plexapp.agents.localmedia with PID 437 -Jun 04, 2026 03:41:15.717 [140443200707384] DEBUG - [com.plexapp.agents.localmedia] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:15.729 [140443245435704] DEBUG - Request: [127.0.0.1:60284 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (2 live) #44 GZIP Token () -Jun 04, 2026 03:41:15.729 [140443245435704] DEBUG - [Req#44] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -Jun 04, 2026 03:41:15.729 [140443245435704] DEBUG - [Req#44/HCl#12] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -Jun 04, 2026 03:41:15.731 [140443243293496] DEBUG - [HttpClient/HCl#12] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (reused) -Jun 04, 2026 03:41:15.731 [140443245435704] DEBUG - [Req#44] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:15.731 [140443259251512] DEBUG - Completed: [127.0.0.1:60284] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (2 live) #44 GZIP 2ms 415 bytes -Jun 04, 2026 03:41:15.732 [140443209292600] DEBUG - Request: [127.0.0.1:60298 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (2 live) #46 GZIP Token () -Jun 04, 2026 03:41:15.733 [140443209292600] DEBUG - [Req#46] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -Jun 04, 2026 03:41:15.733 [140443209292600] DEBUG - [Req#46/HCl#13] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -Jun 04, 2026 03:41:15.734 [140443243293496] DEBUG - [HttpClient/HCl#13] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -Jun 04, 2026 03:41:15.734 [140443209292600] DEBUG - [Req#46] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:15.735 [140443259251512] DEBUG - Completed: [127.0.0.1:60298] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI3CmNvbS5wbGV4YXBwLmFnZW50cy5mYW5hcnR0dnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI2CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (2 live) #46 GZIP 2ms 415 bytes -Jun 04, 2026 03:41:15.736 [140443185994552] DEBUG - Request: [127.0.0.1:60312 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK (2 live) #48 GZIP Token () -Jun 04, 2026 03:41:15.736 [140443185994552] DEBUG - [Req#48] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK -Jun 04, 2026 03:41:15.736 [140443185994552] DEBUG - [Req#48/HCl#14] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK -Jun 04, 2026 03:41:15.738 [140443243293496] DEBUG - [HttpClient/HCl#14] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK -Jun 04, 2026 03:41:15.738 [140443185994552] DEBUG - [Req#48] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:15.738 [140443259251512] DEBUG - Completed: [127.0.0.1:60312] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjcKY29tLnBsZXhhcHAuYWdlbnRzLmZhbmFydHR2czEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzMKcjIKcjYKcjEwCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK (2 live) #48 GZIP 2ms 415 bytes -Jun 04, 2026 03:41:15.740 [140443188103992] DEBUG - Request: [127.0.0.1:60314 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK (2 live) #4a GZIP Token () -Jun 04, 2026 03:41:15.740 [140443188103992] DEBUG - [Req#4a] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK -Jun 04, 2026 03:41:15.740 [140443188103992] DEBUG - [Req#4a/HCl#15] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK -Jun 04, 2026 03:41:15.742 [140443243293496] DEBUG - [HttpClient/HCl#15] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK -Jun 04, 2026 03:41:15.742 [140443188103992] DEBUG - [Req#4a] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:15.743 [140443261360952] DEBUG - Completed: [127.0.0.1:60314] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxOApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyNwpjb20ucGxleGFwcC5hZ2VudHMuZmFuYXJ0dHZzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczkKRmFuYXJ0LnR2czQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M5CkZhbmFydC50dnM0Cm5hbWUxCnM2CkFydGlzdDEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhuMTAKcjE1CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxNgpzMTQKY29udHJpYnV0ZXNfdG9yMTcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzOQpGYW5hcnQudHZzNApuYW1lMQpzNQpBbGJ1bTEKczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm0xCnMyCnhucjAK (2 live) #4a GZIP 2ms 415 bytes -Jun 04, 2026 03:41:15.745 [140443204926264] DEBUG - Reading 152 bytes in the body, code is 200 -Jun 04, 2026 03:41:15.745 [140443204926264] DEBUG - [com.plexapp.agents.fanarttv] Plug-in running on port 38641. -Jun 04, 2026 03:41:15.745 [140443204926264] DEBUG - Read configuration for [com.plexapp.agents.fanarttv], had 0 prefixes -Jun 04, 2026 03:41:15.745 [140443204926264] DEBUG - Updating [com.plexapp.agents.fanarttv] in the database, it has changed. -Jun 04, 2026 03:41:15.745 [140443251936056] DEBUG - Updating the list of agents known by the system. -Jun 04, 2026 03:41:15.745 [140443204926264] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/LyricFind.bundle. -Jun 04, 2026 03:41:15.745 [140443251936056] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents -Jun 04, 2026 03:41:15.745 [140443251936056] DEBUG - [HCl#16] HTTP requesting GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:15.747 [140443190213432] DEBUG - Request: [127.0.0.1:60326 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #4c GZIP Token () -Jun 04, 2026 03:41:15.747 [140443190213432] WARN - [Req#4c] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. -Jun 04, 2026 03:41:15.747 [140443261360952] DEBUG - Completed: [127.0.0.1:60326] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #4c GZIP 0ms 350 bytes -Jun 04, 2026 03:41:15.748 [140443243293496] DEBUG - [HttpClient/HCl#16] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:15.748 [140443251936056] DEBUG - [com.plexapp.system] HTTP reply status 200, with 342 bytes of content. -Jun 04, 2026 03:41:15.749 [140443251936056] DEBUG - The system knows about 2 agents. -Jun 04, 2026 03:41:15.749 [140443204926264] DEBUG - [com.plexapp.agents.lyricfind] Agent not known by system, so we're starting for sure. -Jun 04, 2026 03:41:15.749 [140443204926264] DEBUG - Starting file watcher for com.plexapp.agents.lyricfind -Jun 04, 2026 03:41:15.749 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:15.749 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:15.749 [140443204926264] DEBUG - Spawned plug-in com.plexapp.agents.lyricfind with PID 446 -Jun 04, 2026 03:41:15.749 [140443204926264] DEBUG - [com.plexapp.agents.lyricfind] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:15.779 [140443245435704] DEBUG - Request: [127.0.0.1:60330 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ (2 live) #4e GZIP Token () -Jun 04, 2026 03:41:15.780 [140443245435704] DEBUG - [Req#4e] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ -Jun 04, 2026 03:41:15.780 [140443245435704] DEBUG - [Req#4e/HCl#17] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ -Jun 04, 2026 03:41:15.781 [140443243293496] DEBUG - [HttpClient/HCl#17] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ (reused) -Jun 04, 2026 03:41:15.781 [140443245435704] DEBUG - [Req#4e] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:15.782 [140443261360952] DEBUG - Completed: [127.0.0.1:60330] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ (2 live) #4e GZIP 2ms 415 bytes -Jun 04, 2026 03:41:15.783 [140443209292600] DEBUG - Request: [127.0.0.1:60338 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ (2 live) #50 GZIP Token () -Jun 04, 2026 03:41:15.783 [140443209292600] DEBUG - [Req#50] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ -Jun 04, 2026 03:41:15.783 [140443209292600] DEBUG - [Req#50/HCl#18] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ -Jun 04, 2026 03:41:15.785 [140443243293496] DEBUG - [HttpClient/HCl#18] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ -Jun 04, 2026 03:41:15.785 [140443209292600] DEBUG - [Req#50] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:15.786 [140443261360952] DEBUG - Completed: [127.0.0.1:60338] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjUKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczcKTGFzdC5mbXM0Cm5hbWUxCnM2CkFydGlzdDEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3Ckxhc3QuZm1zNApuYW1lMQpzNQpBbGJ1bTEyCnMyCmVuczIKc3ZzMgpmcnMyCmVzczIKZGVzMgpwbHMyCml0czIKcHRzMgpqYXMyCnRyczIKcnVzMgp6aHIwCg__ (2 live) #50 GZIP 2ms 415 bytes -Jun 04, 2026 03:41:15.788 [140443202816824] DEBUG - Reading 150 bytes in the body, code is 200 -Jun 04, 2026 03:41:15.788 [140443202816824] DEBUG - [com.plexapp.agents.lastfm] Plug-in running on port 33769. -Jun 04, 2026 03:41:15.788 [140443202816824] DEBUG - Read configuration for [com.plexapp.agents.lastfm], had 0 prefixes -Jun 04, 2026 03:41:15.788 [140443202816824] DEBUG - Updating [com.plexapp.agents.lastfm] in the database, it has changed. -Jun 04, 2026 03:41:15.788 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Media-Flags.bundle. -Jun 04, 2026 03:41:15.788 [140443217804088] DEBUG - Updating the list of agents known by the system. -Jun 04, 2026 03:41:15.788 [140443217804088] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents -Jun 04, 2026 03:41:15.788 [140443217804088] DEBUG - [HCl#19] HTTP requesting GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:15.789 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/MoviePosterDB.bundle. -Jun 04, 2026 03:41:15.790 [140443185994552] DEBUG - Request: [127.0.0.1:60342 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #52 GZIP Token () -Jun 04, 2026 03:41:15.790 [140443185994552] WARN - [Req#52] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. -Jun 04, 2026 03:41:15.790 [140443261360952] DEBUG - Completed: [127.0.0.1:60342] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #52 GZIP 0ms 350 bytes -Jun 04, 2026 03:41:15.791 [140443243293496] DEBUG - [HttpClient/HCl#19] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:15.791 [140443217804088] DEBUG - [com.plexapp.system] HTTP reply status 200, with 1242 bytes of content. -Jun 04, 2026 03:41:15.791 [140443217804088] DEBUG - The system knows about 3 agents. -Jun 04, 2026 03:41:15.791 [140443202816824] DEBUG - [com.plexapp.agents.movieposterdb] Agent not known by system, so we're starting for sure. -Jun 04, 2026 03:41:15.791 [140443202816824] DEBUG - Starting file watcher for com.plexapp.agents.movieposterdb -Jun 04, 2026 03:41:15.791 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:15.791 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:15.792 [140443202816824] DEBUG - Spawned plug-in com.plexapp.agents.movieposterdb with PID 453 -Jun 04, 2026 03:41:15.792 [140443202816824] DEBUG - [com.plexapp.agents.movieposterdb] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:16.071 [140443188103992] DEBUG - Request: [127.0.0.1:60358 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.localmedia (2 live) #54 GZIP Token () -Jun 04, 2026 03:41:16.072 [140443188103992] DEBUG - [Req#54] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.localmedia -Jun 04, 2026 03:41:16.072 [140443188103992] DEBUG - [Req#54/HCl#1a] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.localmedia -Jun 04, 2026 03:41:16.073 [140443243293496] DEBUG - [HttpClient/HCl#1a] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.localmedia (reused) -Jun 04, 2026 03:41:16.073 [140443188103992] DEBUG - [Req#54] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:16.073 [140443261360952] DEBUG - Completed: [127.0.0.1:60358] 200 GET /system/messaging/clear_events/com.plexapp.agents.localmedia (2 live) #54 GZIP 1ms 280 bytes -Jun 04, 2026 03:41:16.112 [140443190213432] DEBUG - Request: [127.0.0.1:60360 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.lyricfind (2 live) #56 GZIP Token () -Jun 04, 2026 03:41:16.112 [140443190213432] DEBUG - [Req#56] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.lyricfind -Jun 04, 2026 03:41:16.112 [140443190213432] DEBUG - [Req#56/HCl#1b] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.lyricfind -Jun 04, 2026 03:41:16.113 [140443243293496] DEBUG - [HttpClient/HCl#1b] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.lyricfind -Jun 04, 2026 03:41:16.113 [140443190213432] DEBUG - [Req#56] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:16.113 [140443261360952] DEBUG - Completed: [127.0.0.1:60360] 200 GET /system/messaging/clear_events/com.plexapp.agents.lyricfind (2 live) #56 GZIP 1ms 280 bytes -Jun 04, 2026 03:41:16.117 [140443245435704] DEBUG - Request: [127.0.0.1:60364 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #58 GZIP Token () -Jun 04, 2026 03:41:16.117 [140443245435704] DEBUG - [Req#58] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.117 [140443245435704] DEBUG - [Req#58/HCl#1c] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.119 [140443243293496] DEBUG - [HttpClient/HCl#1c] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.119 [140443245435704] DEBUG - [Req#58] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:16.119 [140443261360952] DEBUG - Completed: [127.0.0.1:60364] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #58 GZIP 1ms 261 bytes -Jun 04, 2026 03:41:16.125 [140443209292600] DEBUG - Request: [127.0.0.1:60366 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #5a GZIP Token () -Jun 04, 2026 03:41:16.125 [140443209292600] DEBUG - [Req#5a] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.125 [140443209292600] DEBUG - [Req#5a/HCl#1d] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.125 [140443185994552] DEBUG - Request: [127.0.0.1:60372 (Loopback)] GET / (3 live) #5c GZIP Token () -Jun 04, 2026 03:41:16.125 [140443261360952] DEBUG - Completed: [127.0.0.1:60372] 200 GET / (3 live) #5c GZIP 0ms 2666 bytes -Jun 04, 2026 03:41:16.127 [140443243293496] DEBUG - [HttpClient/HCl#1d] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.127 [140443209292600] DEBUG - [Req#5a] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:16.127 [140443261360952] DEBUG - Completed: [127.0.0.1:60366] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #5a GZIP 1ms 746 bytes -Jun 04, 2026 03:41:16.153 [140443188103992] DEBUG - Request: [127.0.0.1:60382 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.movieposterdb (2 live) #5d GZIP Token () -Jun 04, 2026 03:41:16.153 [140443188103992] DEBUG - [Req#5d] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.movieposterdb -Jun 04, 2026 03:41:16.153 [140443188103992] DEBUG - [Req#5d/HCl#1e] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.movieposterdb -Jun 04, 2026 03:41:16.154 [140443243293496] DEBUG - [HttpClient/HCl#1e] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.movieposterdb -Jun 04, 2026 03:41:16.154 [140443188103992] DEBUG - [Req#5d] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:16.154 [140443261360952] DEBUG - Completed: [127.0.0.1:60382] 200 GET /system/messaging/clear_events/com.plexapp.agents.movieposterdb (2 live) #5d GZIP 1ms 280 bytes -Jun 04, 2026 03:41:16.160 [140443190213432] DEBUG - Request: [127.0.0.1:60388 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #60 GZIP Token () -Jun 04, 2026 03:41:16.160 [140443190213432] DEBUG - [Req#60] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.160 [140443190213432] DEBUG - [Req#60/HCl#1f] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.161 [140443243293496] DEBUG - [HttpClient/HCl#1f] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.161 [140443190213432] DEBUG - [Req#60] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:16.161 [140443259251512] DEBUG - Completed: [127.0.0.1:60388] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #60 GZIP 1ms 261 bytes -Jun 04, 2026 03:41:16.167 [140443245435704] DEBUG - Request: [127.0.0.1:60390 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #62 GZIP Token () -Jun 04, 2026 03:41:16.167 [140443245435704] DEBUG - [Req#62] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.167 [140443245435704] DEBUG - [Req#62/HCl#20] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.167 [140443185994552] DEBUG - Request: [127.0.0.1:60396 (Loopback)] GET / (3 live) #64 GZIP Token () -Jun 04, 2026 03:41:16.167 [140443261360952] DEBUG - Completed: [127.0.0.1:60396] 200 GET / (3 live) #64 GZIP 0ms 2666 bytes -Jun 04, 2026 03:41:16.168 [140443243293496] DEBUG - [HttpClient/HCl#20] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.168 [140443245435704] DEBUG - [Req#62] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:16.168 [140443261360952] DEBUG - Completed: [127.0.0.1:60390] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #62 GZIP 1ms 746 bytes -Jun 04, 2026 03:41:16.184 [140443209292600] DEBUG - Request: [127.0.0.1:60402 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ (2 live) #65 GZIP Token () -Jun 04, 2026 03:41:16.184 [140443209292600] DEBUG - [Req#65] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ -Jun 04, 2026 03:41:16.184 [140443209292600] DEBUG - [Req#65/HCl#21] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ -Jun 04, 2026 03:41:16.186 [140443243293496] DEBUG - [HttpClient/HCl#21] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ -Jun 04, 2026 03:41:16.186 [140443209292600] DEBUG - [Req#65] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.186 [140443261360952] DEBUG - Completed: [127.0.0.1:60402] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI4CmNvbS5wbGV4YXBwLmFnZW50cy5seXJpY2ZpbmRzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyNApzMTQKY29udHJpYnV0ZXNfdG9yNQpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3M5Ckx5cmljRmluZHM0Cm5hbWUxCnM1CkFsYnVtMwpzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bnIwCg__ (2 live) #65 GZIP 1ms 415 bytes -Jun 04, 2026 03:41:16.188 [140443204926264] DEBUG - Reading 153 bytes in the body, code is 200 -Jun 04, 2026 03:41:16.188 [140443204926264] DEBUG - [com.plexapp.agents.lyricfind] Plug-in running on port 35737. -Jun 04, 2026 03:41:16.188 [140443204926264] DEBUG - Read configuration for [com.plexapp.agents.lyricfind], had 0 prefixes -Jun 04, 2026 03:41:16.188 [140443204926264] DEBUG - Updating [com.plexapp.agents.lyricfind] in the database, it has changed. -Jun 04, 2026 03:41:16.188 [140443204926264] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Musicbrainz.bundle. -Jun 04, 2026 03:41:16.188 [140443230477112] DEBUG - Updating the list of agents known by the system. -Jun 04, 2026 03:41:16.188 [140443230477112] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents -Jun 04, 2026 03:41:16.189 [140443230477112] DEBUG - [HCl#22] HTTP requesting GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:16.194 [140443188103992] DEBUG - Request: [127.0.0.1:60416 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #68 GZIP Token () -Jun 04, 2026 03:41:16.194 [140443188103992] WARN - [Req#68] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. -Jun 04, 2026 03:41:16.194 [140443261360952] DEBUG - Completed: [127.0.0.1:60416] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #68 GZIP 0ms 350 bytes -Jun 04, 2026 03:41:16.195 [140443243293496] DEBUG - [HttpClient/HCl#22] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:16.195 [140443230477112] DEBUG - [com.plexapp.system] HTTP reply status 200, with 1339 bytes of content. -Jun 04, 2026 03:41:16.196 [140443230477112] DEBUG - The system knows about 4 agents. -Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - [org.musicbrainz.agents.music] Agent not known by system, so we're starting for sure. -Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - Starting file watcher for org.musicbrainz.agents.music -Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - Plug-in limit of 6 exceeded. -Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.fanarttv. -Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - Stopping [com.plexapp.agents.fanarttv]. -Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - [com.plexapp.agents.fanarttv] Killing. -Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - Spawned plug-in org.musicbrainz.agents.music with PID 505 -Jun 04, 2026 03:41:16.196 [140443204926264] DEBUG - [org.musicbrainz.agents.music] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:16.197 [140443269335864] WARN - JobManager: Could not find job for handle 373 -Jun 04, 2026 03:41:16.198 [140443190213432] DEBUG - Request: [127.0.0.1:60430 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #6a GZIP Token () -Jun 04, 2026 03:41:16.198 [140443190213432] DEBUG - [Req#6a] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.198 [140443190213432] DEBUG - [Req#6a/HCl#23] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.199 [140443243293496] DEBUG - [HttpClient/HCl#23] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes (reused) -Jun 04, 2026 03:41:16.199 [140443190213432] DEBUG - [Req#6a] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:16.199 [140443261360952] DEBUG - Completed: [127.0.0.1:60430] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #6a GZIP 1ms 261 bytes -Jun 04, 2026 03:41:16.204 [140443185994552] DEBUG - Request: [127.0.0.1:60446 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #6c GZIP Token () -Jun 04, 2026 03:41:16.204 [140443185994552] DEBUG - [Req#6c] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.204 [140443185994552] DEBUG - [Req#6c/HCl#24] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.205 [140443245435704] DEBUG - Request: [127.0.0.1:60456 (Loopback)] GET / (3 live) #6e GZIP Token () -Jun 04, 2026 03:41:16.205 [140443259251512] DEBUG - Completed: [127.0.0.1:60456] 200 GET / (3 live) #6e GZIP 0ms 2666 bytes -Jun 04, 2026 03:41:16.206 [140443243293496] DEBUG - [HttpClient/HCl#24] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.206 [140443185994552] DEBUG - [Req#6c] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:16.206 [140443259251512] DEBUG - Completed: [127.0.0.1:60446] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #6c GZIP 2ms 746 bytes -Jun 04, 2026 03:41:16.214 [140443209292600] DEBUG - Request: [127.0.0.1:60468 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ (2 live) #6f GZIP Token () -Jun 04, 2026 03:41:16.215 [140443209292600] DEBUG - [Req#6f] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.215 [140443209292600] DEBUG - [Req#6f/HCl#25] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.216 [140443243293496] DEBUG - [HttpClient/HCl#25] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.216 [140443209292600] DEBUG - [Req#6f] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.216 [140443259251512] DEBUG - Completed: [127.0.0.1:60468] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMyCmNvbS5wbGV4YXBwLmFnZW50cy5tb3ZpZXBvc3RlcmRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTIKQ2luZU1hdGVyaWFsczQKbmFtZTEKczUKTW92aWUxCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYjEKczIKeG5yMAo_ (2 live) #6f GZIP 1ms 415 bytes -Jun 04, 2026 03:41:16.218 [140443202816824] DEBUG - Reading 157 bytes in the body, code is 200 -Jun 04, 2026 03:41:16.218 [140443202816824] DEBUG - [com.plexapp.agents.movieposterdb] Plug-in running on port 43189. -Jun 04, 2026 03:41:16.218 [140443202816824] DEBUG - Read configuration for [com.plexapp.agents.movieposterdb], had 0 prefixes -Jun 04, 2026 03:41:16.218 [140443202816824] DEBUG - Updating [com.plexapp.agents.movieposterdb] in the database, it has changed. -Jun 04, 2026 03:41:16.218 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/PersonalMedia.bundle. -Jun 04, 2026 03:41:16.218 [140443226258232] DEBUG - Updating the list of agents known by the system. -Jun 04, 2026 03:41:16.218 [140443226258232] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents -Jun 04, 2026 03:41:16.218 [140443226258232] DEBUG - [HCl#26] HTTP requesting GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:16.220 [140443188103992] DEBUG - Request: [127.0.0.1:60482 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #72 GZIP Token () -Jun 04, 2026 03:41:16.220 [140443188103992] WARN - [Req#72] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. -Jun 04, 2026 03:41:16.220 [140443259251512] DEBUG - Completed: [127.0.0.1:60482] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #72 GZIP 0ms 350 bytes -Jun 04, 2026 03:41:16.221 [140443243293496] DEBUG - [HttpClient/HCl#26] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:16.221 [140443226258232] DEBUG - [com.plexapp.system] HTTP reply status 200, with 1440 bytes of content. -Jun 04, 2026 03:41:16.222 [140443226258232] DEBUG - The system knows about 5 agents. -Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - [com.plexapp.agents.none] Agent not known by system, so we're starting for sure. -Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - Starting file watcher for com.plexapp.agents.none -Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - Plug-in limit of 6 exceeded. -Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.htbackdrops. -Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - Stopping [com.plexapp.agents.htbackdrops]. -Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - [com.plexapp.agents.htbackdrops] Killing. -Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - Spawned plug-in com.plexapp.agents.none with PID 516 -Jun 04, 2026 03:41:16.222 [140443202816824] DEBUG - [com.plexapp.agents.none] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:16.223 [140443269335864] WARN - JobManager: Could not find job for handle 370 -Jun 04, 2026 03:41:16.390 [140443190213432] DEBUG - Request: [127.0.0.1:60498 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #74 GZIP Token () -Jun 04, 2026 03:41:16.390 [140443190213432] DEBUG - [Req#74] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.390 [140443190213432] DEBUG - [Req#74/HCl#27] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.392 [140443243293496] DEBUG - [HttpClient/HCl#27] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (reused) -Jun 04, 2026 03:41:16.392 [140443190213432] DEBUG - [Req#74] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.392 [140443259251512] DEBUG - Completed: [127.0.0.1:60498] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #74 GZIP 1ms 415 bytes -Jun 04, 2026 03:41:16.393 [140443245435704] DEBUG - Request: [127.0.0.1:60500 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #76 GZIP Token () -Jun 04, 2026 03:41:16.394 [140443245435704] DEBUG - [Req#76] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.394 [140443245435704] DEBUG - [Req#76/HCl#28] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.396 [140443243293496] DEBUG - [HttpClient/HCl#28] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.396 [140443245435704] DEBUG - [Req#76] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.396 [140443259251512] DEBUG - Completed: [127.0.0.1:60500] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #76 GZIP 2ms 415 bytes -Jun 04, 2026 03:41:16.398 [140443185994552] DEBUG - Request: [127.0.0.1:60504 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK (2 live) #78 GZIP Token () -Jun 04, 2026 03:41:16.398 [140443185994552] DEBUG - [Req#78] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -Jun 04, 2026 03:41:16.398 [140443185994552] DEBUG - [Req#78/HCl#29] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -Jun 04, 2026 03:41:16.400 [140443243293496] DEBUG - [HttpClient/HCl#29] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -Jun 04, 2026 03:41:16.400 [140443185994552] DEBUG - [Req#78] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.400 [140443259251512] DEBUG - Completed: [127.0.0.1:60504] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK (2 live) #78 GZIP 2ms 415 bytes -Jun 04, 2026 03:41:16.402 [140443209292600] DEBUG - Request: [127.0.0.1:60514 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK (2 live) #7a GZIP Token () -Jun 04, 2026 03:41:16.403 [140443209292600] DEBUG - [Req#7a] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -Jun 04, 2026 03:41:16.403 [140443209292600] DEBUG - [Req#7a/HCl#2a] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -Jun 04, 2026 03:41:16.405 [140443243293496] DEBUG - [HttpClient/HCl#2a] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -Jun 04, 2026 03:41:16.405 [140443209292600] DEBUG - [Req#7a] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.405 [140443259251512] DEBUG - Completed: [127.0.0.1:60514] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK (2 live) #7a GZIP 2ms 415 bytes -Jun 04, 2026 03:41:16.407 [140443188103992] DEBUG - Request: [127.0.0.1:60522 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ (2 live) #7c GZIP Token () -Jun 04, 2026 03:41:16.407 [140443188103992] DEBUG - [Req#7c] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.407 [140443188103992] DEBUG - [Req#7c/HCl#2b] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.410 [140443243293496] DEBUG - [HttpClient/HCl#2b] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.410 [140443188103992] DEBUG - [Req#7c] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.410 [140443259251512] DEBUG - Completed: [127.0.0.1:60522] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ (2 live) #7c GZIP 2ms 415 bytes -Jun 04, 2026 03:41:16.411 [140443200707384] DEBUG - Reading 154 bytes in the body, code is 200 -Jun 04, 2026 03:41:16.411 [140443200707384] DEBUG - [com.plexapp.agents.localmedia] Plug-in running on port 40699. -Jun 04, 2026 03:41:16.411 [140443200707384] DEBUG - Read configuration for [com.plexapp.agents.localmedia], had 0 prefixes -Jun 04, 2026 03:41:16.412 [140443200707384] DEBUG - Updating [com.plexapp.agents.localmedia] in the database, it has changed. -Jun 04, 2026 03:41:16.412 [140443228367672] DEBUG - Updating the list of agents known by the system. -Jun 04, 2026 03:41:16.412 [140443200707384] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/PlexMovie.bundle. -Jun 04, 2026 03:41:16.412 [140443228367672] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents -Jun 04, 2026 03:41:16.412 [140443228367672] DEBUG - [HCl#2c] HTTP requesting GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:16.414 [140443190213432] DEBUG - Request: [127.0.0.1:60536 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #7e GZIP Token () -Jun 04, 2026 03:41:16.414 [140443190213432] WARN - [Req#7e] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. -Jun 04, 2026 03:41:16.414 [140443259251512] DEBUG - Completed: [127.0.0.1:60536] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #7e GZIP 0ms 350 bytes -Jun 04, 2026 03:41:16.415 [140443243293496] DEBUG - [HttpClient/HCl#2c] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:16.415 [140443228367672] DEBUG - [com.plexapp.system] HTTP reply status 200, with 1538 bytes of content. -Jun 04, 2026 03:41:16.415 [140443228367672] DEBUG - The system knows about 6 agents. -Jun 04, 2026 03:41:16.415 [140443200707384] DEBUG - [com.plexapp.agents.imdb] Agent not known by system, so we're starting for sure. -Jun 04, 2026 03:41:16.415 [140443200707384] DEBUG - Starting file watcher for com.plexapp.agents.imdb -Jun 04, 2026 03:41:16.415 [140443200707384] DEBUG - Plug-in limit of 6 exceeded. -Jun 04, 2026 03:41:16.415 [140443200707384] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.lastfm. -Jun 04, 2026 03:41:16.415 [140443200707384] DEBUG - Stopping [com.plexapp.agents.lastfm]. -Jun 04, 2026 03:41:16.415 [140443200707384] DEBUG - [com.plexapp.agents.lastfm] Killing. -Jun 04, 2026 03:41:16.416 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:16.416 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:16.416 [140443200707384] DEBUG - Spawned plug-in com.plexapp.agents.imdb with PID 526 -Jun 04, 2026 03:41:16.416 [140443200707384] DEBUG - [com.plexapp.agents.imdb] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:16.418 [140443269335864] WARN - JobManager: Could not find job for handle 374 -Jun 04, 2026 03:41:16.554 [140443245435704] DEBUG - Request: [127.0.0.1:60548 (Loopback)] GET /system/messaging/clear_events/org.musicbrainz.agents.music (2 live) #80 GZIP Token () -Jun 04, 2026 03:41:16.554 [140443245435704] DEBUG - [Req#80] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/org.musicbrainz.agents.music -Jun 04, 2026 03:41:16.554 [140443245435704] DEBUG - [Req#80/HCl#2d] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/org.musicbrainz.agents.music -Jun 04, 2026 03:41:16.555 [140443243293496] DEBUG - [HttpClient/HCl#2d] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/org.musicbrainz.agents.music (reused) -Jun 04, 2026 03:41:16.555 [140443245435704] DEBUG - [Req#80] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:16.555 [140443261360952] DEBUG - Completed: [127.0.0.1:60548] 200 GET /system/messaging/clear_events/org.musicbrainz.agents.music (2 live) #80 GZIP 1ms 280 bytes -Jun 04, 2026 03:41:16.580 [140443185994552] DEBUG - Request: [127.0.0.1:60564 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.none (2 live) #82 GZIP Token () -Jun 04, 2026 03:41:16.580 [140443185994552] DEBUG - [Req#82] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.none -Jun 04, 2026 03:41:16.580 [140443185994552] DEBUG - [Req#82/HCl#2e] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.none -Jun 04, 2026 03:41:16.582 [140443243293496] DEBUG - [HttpClient/HCl#2e] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.none -Jun 04, 2026 03:41:16.582 [140443185994552] DEBUG - [Req#82] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:16.582 [140443261360952] DEBUG - Completed: [127.0.0.1:60564] 200 GET /system/messaging/clear_events/com.plexapp.agents.none (2 live) #82 GZIP 1ms 280 bytes -Jun 04, 2026 03:41:16.598 [140443209292600] DEBUG - Request: [127.0.0.1:60572 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #84 GZIP Token () -Jun 04, 2026 03:41:16.598 [140443209292600] DEBUG - [Req#84] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.598 [140443209292600] DEBUG - [Req#84/HCl#2f] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.599 [140443243293496] DEBUG - [HttpClient/HCl#2f] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.599 [140443209292600] DEBUG - [Req#84] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:16.599 [140443259251512] DEBUG - Completed: [127.0.0.1:60572] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #84 GZIP 1ms 261 bytes -Jun 04, 2026 03:41:16.605 [140443188103992] DEBUG - Request: [127.0.0.1:60584 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (3 live) #86 GZIP Token () -Jun 04, 2026 03:41:16.605 [140443190213432] DEBUG - Request: [127.0.0.1:60596 (Loopback)] GET / (3 live) #88 GZIP Token () -Jun 04, 2026 03:41:16.605 [140443188103992] DEBUG - [Req#86] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.605 [140443188103992] DEBUG - [Req#86/HCl#30] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.606 [140443259251512] DEBUG - Completed: [127.0.0.1:60596] 200 GET / (3 live) #88 GZIP 0ms 2666 bytes -Jun 04, 2026 03:41:16.607 [140443243293496] DEBUG - [HttpClient/HCl#30] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.607 [140443188103992] DEBUG - [Req#86] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:16.607 [140443259251512] DEBUG - Completed: [127.0.0.1:60584] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #86 GZIP 1ms 746 bytes -Jun 04, 2026 03:41:16.615 [140443245435704] DEBUG - Request: [127.0.0.1:60606 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK (2 live) #89 GZIP Token () -Jun 04, 2026 03:41:16.615 [140443245435704] DEBUG - [Req#89] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK -Jun 04, 2026 03:41:16.615 [140443245435704] DEBUG - [Req#89/HCl#31] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK -Jun 04, 2026 03:41:16.617 [140443243293496] DEBUG - [HttpClient/HCl#31] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK -Jun 04, 2026 03:41:16.617 [140443245435704] DEBUG - [Req#89] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.617 [140443259251512] DEBUG - Completed: [127.0.0.1:60606] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczExCk11c2ljYnJhaW56czQKbmFtZTEKczYKQXJ0aXN0MzAKczIKZW5zMgphcnMyCmJnczIKemhzMgpocnMyCmNzczIKZGFzMgpubHMyCmZpczIKZnJzMgpkZXMyCmVsczIKaHVzMgppZHMyCml0czIKamFzMgprb3MyCm5uczIKcGxzMgpwdHMyCnJvczIKcnVzMgpzcnMyCnNrczIKZXNzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnh4cjAK (2 live) #89 GZIP 2ms 415 bytes -Jun 04, 2026 03:41:16.619 [140443185994552] DEBUG - Request: [127.0.0.1:60614 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK (2 live) #8c GZIP Token () -Jun 04, 2026 03:41:16.619 [140443185994552] DEBUG - [Req#8c] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK -Jun 04, 2026 03:41:16.619 [140443185994552] DEBUG - [Req#8c/HCl#32] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK -Jun 04, 2026 03:41:16.620 [140443243293496] DEBUG - [HttpClient/HCl#32] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK -Jun 04, 2026 03:41:16.620 [140443185994552] DEBUG - [Req#8c] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.621 [140443259251512] DEBUG - Completed: [127.0.0.1:60614] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKMgpzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM2CkFydGlzdDMwCnMyCmVuczIKYXJzMgpiZ3MyCnpoczIKaHJzMgpjc3MyCmRhczIKbmxzMgpmaXMyCmZyczIKZGVzMgplbHMyCmh1czIKaWRzMgppdHMyCmphczIKa29zMgpubnMyCnBsczIKcHRzMgpyb3MyCnJ1czIKc3JzMgpza3MyCmVzczIKc3ZzMgp0aHMyCnRyczIKdmlzMgp4eDEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MxMQpNdXNpY2JyYWluenM0Cm5hbWUxCnM1CkFsYnVtcjAK (2 live) #8c GZIP 2ms 415 bytes -Jun 04, 2026 03:41:16.623 [140443204926264] DEBUG - Reading 153 bytes in the body, code is 200 -Jun 04, 2026 03:41:16.623 [140443204926264] DEBUG - [org.musicbrainz.agents.music] Plug-in running on port 46041. -Jun 04, 2026 03:41:16.623 [140443204926264] DEBUG - Read configuration for [org.musicbrainz.agents.music], had 0 prefixes -Jun 04, 2026 03:41:16.623 [140443204926264] DEBUG - Updating [org.musicbrainz.agents.music] in the database, it has changed. -Jun 04, 2026 03:41:16.623 [140443204926264] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/PlexThemeMusic.bundle. -Jun 04, 2026 03:41:16.623 [140443251936056] DEBUG - Updating the list of agents known by the system. -Jun 04, 2026 03:41:16.623 [140443251936056] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents -Jun 04, 2026 03:41:16.623 [140443251936056] DEBUG - [HCl#33] HTTP requesting GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:16.625 [140443209292600] DEBUG - Request: [127.0.0.1:60630 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #8e GZIP Token () -Jun 04, 2026 03:41:16.625 [140443209292600] WARN - [Req#8e] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. -Jun 04, 2026 03:41:16.625 [140443259251512] DEBUG - Completed: [127.0.0.1:60630] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #8e GZIP 0ms 350 bytes -Jun 04, 2026 03:41:16.626 [140443190213432] DEBUG - Request: [127.0.0.1:60632 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #90 GZIP Token () -Jun 04, 2026 03:41:16.626 [140443190213432] DEBUG - [Req#90] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.626 [140443190213432] DEBUG - [Req#90/HCl#34] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.628 [140443243293496] DEBUG - [HttpClient/HCl#33] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:16.628 [140443251936056] DEBUG - [com.plexapp.system] HTTP reply status 200, with 3457 bytes of content. -Jun 04, 2026 03:41:16.629 [140443251936056] DEBUG - The system knows about 7 agents. -Jun 04, 2026 03:41:16.629 [140443204926264] DEBUG - [com.plexapp.agents.plexthememusic] Agent not known by system, so we're starting for sure. -Jun 04, 2026 03:41:16.629 [140443204926264] DEBUG - Starting file watcher for com.plexapp.agents.plexthememusic -Jun 04, 2026 03:41:16.629 [140443204926264] DEBUG - Plug-in limit of 6 exceeded. -Jun 04, 2026 03:41:16.629 [140443204926264] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.imdb. -Jun 04, 2026 03:41:16.629 [140443243293496] DEBUG - [HttpClient/HCl#34] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.629 [140443190213432] DEBUG - [Req#90] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:16.629 [140443259251512] DEBUG - Completed: [127.0.0.1:60632] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #90 GZIP 3ms 261 bytes -Jun 04, 2026 03:41:16.635 [140443188103992] DEBUG - Request: [127.0.0.1:60640 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #92 GZIP Token () -Jun 04, 2026 03:41:16.635 [140443188103992] DEBUG - [Req#92] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.635 [140443188103992] DEBUG - [Req#92/HCl#35] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.635 [140443245435704] DEBUG - Request: [127.0.0.1:60648 (Loopback)] GET / (3 live) #94 GZIP Token () -Jun 04, 2026 03:41:16.635 [140443259251512] DEBUG - Completed: [127.0.0.1:60648] 200 GET / (3 live) #94 GZIP 0ms 2666 bytes -Jun 04, 2026 03:41:16.636 [140443243293496] DEBUG - [HttpClient/HCl#35] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (reused) -Jun 04, 2026 03:41:16.636 [140443188103992] DEBUG - [Req#92] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:16.636 [140443259251512] DEBUG - Completed: [127.0.0.1:60640] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #92 GZIP 1ms 746 bytes -Jun 04, 2026 03:41:16.651 [140443185994552] DEBUG - Request: [127.0.0.1:60652 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ (2 live) #95 GZIP Token () -Jun 04, 2026 03:41:16.651 [140443185994552] DEBUG - [Req#95] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ -Jun 04, 2026 03:41:16.651 [140443185994552] DEBUG - [Req#95/HCl#36] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ -Jun 04, 2026 03:41:16.653 [140443243293496] DEBUG - [HttpClient/HCl#36] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ -Jun 04, 2026 03:41:16.653 [140443185994552] DEBUG - [Req#95] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.653 [140443259251512] DEBUG - Completed: [127.0.0.1:60652] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bnIwCg__ (2 live) #95 GZIP 1ms 415 bytes -Jun 04, 2026 03:41:16.654 [140443209292600] DEBUG - Request: [127.0.0.1:60668 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK (2 live) #98 GZIP Token () -Jun 04, 2026 03:41:16.654 [140443209292600] DEBUG - [Req#98] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK -Jun 04, 2026 03:41:16.654 [140443209292600] DEBUG - [Req#98/HCl#37] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK -Jun 04, 2026 03:41:16.656 [140443243293496] DEBUG - [HttpClient/HCl#37] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK -Jun 04, 2026 03:41:16.656 [140443209292600] DEBUG - [Req#98] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.656 [140443259251512] DEBUG - Completed: [127.0.0.1:60668] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo4CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8yCnIyCnI1CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhucjAK (2 live) #98 GZIP 2ms 415 bytes -Jun 04, 2026 03:41:16.658 [140443190213432] DEBUG - Request: [127.0.0.1:60682 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ (2 live) #9a GZIP Token () -Jun 04, 2026 03:41:16.658 [140443190213432] DEBUG - [Req#9a] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.658 [140443190213432] DEBUG - [Req#9a/HCl#38] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.660 [140443243293496] DEBUG - [HttpClient/HCl#38] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ -Jun 04, 2026 03:41:16.660 [140443190213432] DEBUG - [Req#9a] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.660 [140443259251512] DEBUG - Completed: [127.0.0.1:60682] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNQpyOAoxMApyMwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjQKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMTQKUGVyc29uYWwgTWVkaWFzNApuYW1lMQpzNQpNb3ZpZTEKczIKeG4xMApyNgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjcKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjAKUGVyc29uYWwgTWVkaWEgU2hvd3NzNApuYW1lMQpzNwpUVl9TaG93MQpzMgp4bjEwCnI5CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTAKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjIKUGVyc29uYWwgTWVkaWEgQXJ0aXN0c3M0Cm5hbWUxCnM2CkFydGlzdDEKczIKeG5yMAo_ (2 live) #9a GZIP 2ms 415 bytes -Jun 04, 2026 03:41:16.661 [140443245435704] DEBUG - Request: [127.0.0.1:60690 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK (2 live) #9c GZIP Token () -Jun 04, 2026 03:41:16.661 [140443245435704] DEBUG - [Req#9c] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK -Jun 04, 2026 03:41:16.661 [140443245435704] DEBUG - [Req#9c/HCl#39] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK -Jun 04, 2026 03:41:16.663 [140443243293496] DEBUG - [HttpClient/HCl#39] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK -Jun 04, 2026 03:41:16.663 [140443245435704] DEBUG - [Req#9c] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.663 [140443259251512] DEBUG - Completed: [127.0.0.1:60690] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNQpyOApyMTEKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I0CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE0ClBlcnNvbmFsIE1lZGlhczQKbmFtZTEKczUKTW92aWUxCnMyCnhuMTAKcjYKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3I3CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIwClBlcnNvbmFsIE1lZGlhIFNob3dzczQKbmFtZTEKczcKVFZfU2hvdzEKczIKeG4xMApyOQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEwCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIyClBlcnNvbmFsIE1lZGlhIEFydGlzdHNzNApuYW1lMQpzNgpBcnRpc3QxCnMyCnhuMTAKcjEyCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIwczUKcHJlZnNzMjEKUGVyc29uYWwgTWVkaWEgQWxidW1zczQKbmFtZTEKczUKQWxidW0xCnMyCnhucjAK (2 live) #9c GZIP 2ms 415 bytes -Jun 04, 2026 03:41:16.665 [140443188103992] DEBUG - Request: [127.0.0.1:60706 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK (2 live) #9e GZIP Token () -Jun 04, 2026 03:41:16.666 [140443188103992] DEBUG - [Req#9e] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK -Jun 04, 2026 03:41:16.666 [140443188103992] DEBUG - [Req#9e/HCl#3a] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK -Jun 04, 2026 03:41:16.668 [140443243293496] DEBUG - [HttpClient/HCl#3a] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK -Jun 04, 2026 03:41:16.668 [140443188103992] DEBUG - [Req#9e] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:16.668 [140443259251512] DEBUG - Completed: [127.0.0.1:60706] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNQpyMgpyNQpyOApyMTEKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MxNApQZXJzb25hbCBNZWRpYXM0Cm5hbWUxCnM1Ck1vdmllMQpzMgp4bjEwCnI2CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNwpzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMApQZXJzb25hbCBNZWRpYSBTaG93c3M0Cm5hbWUxCnM3ClRWX1Nob3cxCnMyCnhuMTAKcjkKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50bnMxNApjb250cmlidXRlc190b3IxMApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjBzNQpwcmVmc3MyMgpQZXJzb25hbCBNZWRpYSBBcnRpc3RzczQKbmFtZTEKczYKQXJ0aXN0MQpzMgp4bjEwCnIxMgpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczIxClBlcnNvbmFsIE1lZGlhIEFsYnVtc3M0Cm5hbWUxCnM1CkFsYnVtMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjE2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczYKUGhvdG9zczQKbmFtZTEKczUKUGhvdG80NApzMgplbnMyCmFyczIKYmdzMgpjYXMyCmNzczIKY3lzMgpkYXMyCmRlczIKZWxzMgplc3MyCmV0czIKZmFzMgpmaXMyCmZyczIKaGVzMgpoaXMyCmhyczIKaHRzMgpodXMyCmlkczIKaXRzMgpqYXMyCmtvczIKbHRzMgpsdnMyCm1zczIKbXRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJvczIKcnVzMgpza3MyCnN2czIKc2xzMgpzcnMyCnRoczIKdHJzMgp1a3MyCnVyczIKdmlzMgp6aHMyCnhucjAK (2 live) #9e GZIP 2ms 415 bytes -Jun 04, 2026 03:41:16.670 [140443202816824] DEBUG - Reading 148 bytes in the body, code is 200 -Jun 04, 2026 03:41:16.670 [140443202816824] DEBUG - [com.plexapp.agents.none] Plug-in running on port 46761. -Jun 04, 2026 03:41:16.670 [140443202816824] DEBUG - Read configuration for [com.plexapp.agents.none], had 0 prefixes -Jun 04, 2026 03:41:16.670 [140443202816824] DEBUG - Updating [com.plexapp.agents.none] in the database, it has changed. -Jun 04, 2026 03:41:16.670 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/Scanners.bundle. -Jun 04, 2026 03:41:16.670 [140443217804088] DEBUG - Updating the list of agents known by the system. -Jun 04, 2026 03:41:16.670 [140443217804088] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents -Jun 04, 2026 03:41:16.670 [140443217804088] DEBUG - [HCl#3b] HTTP requesting GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:16.671 [140443202816824] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/TheMovieDB.bundle. -Jun 04, 2026 03:41:16.672 [140443185994552] DEBUG - Request: [127.0.0.1:60708 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #a0 GZIP Token () -Jun 04, 2026 03:41:16.672 [140443185994552] WARN - [Req#a0] Request for plug-in [com.plexapp.agents.thetvdb] but it doesn't exist. -Jun 04, 2026 03:41:16.672 [140443261360952] DEBUG - Completed: [127.0.0.1:60708] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #a0 GZIP 0ms 350 bytes -Jun 04, 2026 03:41:16.674 [140443243293496] DEBUG - [HttpClient/HCl#3b] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:16.674 [140443217804088] DEBUG - [com.plexapp.system] HTTP reply status 200, with 5262 bytes of content. -Jun 04, 2026 03:41:16.675 [140443217804088] DEBUG - The system knows about 8 agents. -Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - [com.plexapp.agents.themoviedb] Agent not known by system, so we're starting for sure. -Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - Starting file watcher for com.plexapp.agents.themoviedb -Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - Plug-in limit of 6 exceeded. -Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.localmedia. -Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - Stopping [com.plexapp.agents.localmedia]. -Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - [com.plexapp.agents.localmedia] Killing. -Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - Spawned plug-in com.plexapp.agents.themoviedb with PID 576 -Jun 04, 2026 03:41:16.675 [140443202816824] DEBUG - [com.plexapp.agents.themoviedb] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:16.678 [140443269335864] WARN - JobManager: Could not find job for handle 437 -Jun 04, 2026 03:41:16.764 [140443209292600] DEBUG - Request: [127.0.0.1:60712 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.imdb (2 live) #a2 GZIP Token () -Jun 04, 2026 03:41:16.764 [140443209292600] DEBUG - [Req#a2] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.imdb -Jun 04, 2026 03:41:16.764 [140443209292600] DEBUG - [Req#a2/HCl#3c] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.imdb -Jun 04, 2026 03:41:16.765 [140443243293496] DEBUG - [HttpClient/HCl#3c] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.imdb (reused) -Jun 04, 2026 03:41:16.765 [140443209292600] DEBUG - [Req#a2] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:16.765 [140443261360952] DEBUG - Completed: [127.0.0.1:60712] 200 GET /system/messaging/clear_events/com.plexapp.agents.imdb (2 live) #a2 GZIP 1ms 280 bytes -Jun 04, 2026 03:41:16.807 [140443190213432] DEBUG - Request: [127.0.0.1:60714 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #a4 GZIP Token () -Jun 04, 2026 03:41:16.807 [140443190213432] DEBUG - [Req#a4] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.807 [140443190213432] DEBUG - [Req#a4/HCl#3d] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.809 [140443243293496] DEBUG - [HttpClient/HCl#3d] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:16.809 [140443190213432] DEBUG - [Req#a4] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:16.809 [140443259251512] DEBUG - Completed: [127.0.0.1:60714] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #a4 GZIP 1ms 261 bytes -Jun 04, 2026 03:41:16.814 [140443245435704] DEBUG - Request: [127.0.0.1:60724 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #a6 GZIP Token () -Jun 04, 2026 03:41:16.814 [140443245435704] DEBUG - [Req#a6] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.814 [140443245435704] DEBUG - [Req#a6/HCl#3e] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.814 [140443188103992] DEBUG - Request: [127.0.0.1:60740 (Loopback)] GET / (3 live) #a8 GZIP Token () -Jun 04, 2026 03:41:16.815 [140443261360952] DEBUG - Completed: [127.0.0.1:60740] 200 GET / (3 live) #a8 GZIP 0ms 2666 bytes -Jun 04, 2026 03:41:16.816 [140443243293496] DEBUG - [HttpClient/HCl#3e] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:16.816 [140443245435704] DEBUG - [Req#a6] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:16.816 [140443261360952] DEBUG - Completed: [127.0.0.1:60724] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #a6 GZIP 2ms 746 bytes -Jun 04, 2026 03:41:17.034 [140443185994552] DEBUG - Request: [127.0.0.1:60754 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.themoviedb (2 live) #a9 GZIP Token () -Jun 04, 2026 03:41:17.034 [140443185994552] DEBUG - [Req#a9] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.themoviedb -Jun 04, 2026 03:41:17.034 [140443185994552] DEBUG - [Req#a9/HCl#3f] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.themoviedb -Jun 04, 2026 03:41:17.036 [140443243293496] DEBUG - [HttpClient/HCl#3f] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.themoviedb -Jun 04, 2026 03:41:17.036 [140443185994552] DEBUG - [Req#a9] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:17.036 [140443261360952] DEBUG - Completed: [127.0.0.1:60754] 200 GET /system/messaging/clear_events/com.plexapp.agents.themoviedb (2 live) #a9 GZIP 1ms 280 bytes -Jun 04, 2026 03:41:17.041 [140443209292600] DEBUG - Request: [127.0.0.1:60760 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ (2 live) #ac GZIP Token () -Jun 04, 2026 03:41:17.041 [140443209292600] DEBUG - [Req#ac] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ -Jun 04, 2026 03:41:17.041 [140443209292600] DEBUG - [Req#ac/HCl#40] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ -Jun 04, 2026 03:41:17.043 [140443243293496] DEBUG - [HttpClient/HCl#40] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ -Jun 04, 2026 03:41:17.043 [140443209292600] DEBUG - [Req#ac] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:17.043 [140443259251512] DEBUG - Completed: [127.0.0.1:60760] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ (2 live) #ac GZIP 2ms 415 bytes -Jun 04, 2026 03:41:17.045 [140443200707384] DEBUG - Reading 148 bytes in the body, code is 200 -Jun 04, 2026 03:41:17.045 [140443200707384] DEBUG - [com.plexapp.agents.imdb] Plug-in running on port 39585. -Jun 04, 2026 03:41:17.045 [140443200707384] DEBUG - Read configuration for [com.plexapp.agents.imdb], had 0 prefixes -Jun 04, 2026 03:41:17.045 [140443200707384] DEBUG - Updating [com.plexapp.agents.imdb] in the database, it has changed. -Jun 04, 2026 03:41:17.046 [140443204926264] DEBUG - Stopping [com.plexapp.agents.imdb]. -Jun 04, 2026 03:41:17.046 [140443230477112] DEBUG - Updating the list of agents known by the system. -Jun 04, 2026 03:41:17.046 [140443200707384] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/TheTVDB.bundle. -Jun 04, 2026 03:41:17.046 [140443204926264] DEBUG - [com.plexapp.agents.imdb] Killing. -Jun 04, 2026 03:41:17.046 [140443230477112] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents -Jun 04, 2026 03:41:17.046 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:17.046 [140443204926264] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:17.046 [140443230477112] DEBUG - [HCl#41] HTTP requesting GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:17.046 [140443204926264] DEBUG - Spawned plug-in com.plexapp.agents.plexthememusic with PID 608 -Jun 04, 2026 03:41:17.046 [140443204926264] DEBUG - [com.plexapp.agents.plexthememusic] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:17.048 [140443190213432] DEBUG - Request: [127.0.0.1:60772 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #ae GZIP Token () -Jun 04, 2026 03:41:17.048 [140443269335864] WARN - JobManager: Could not find job for handle 526 -Jun 04, 2026 03:41:17.078 [140443188103992] DEBUG - Request: [127.0.0.1:60780 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (3 live) #b0 GZIP Token () -Jun 04, 2026 03:41:17.078 [140443188103992] DEBUG - [Req#b0] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:17.079 [140443188103992] DEBUG - [Req#b0/HCl#42] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:17.080 [140443243293496] DEBUG - [HttpClient/HCl#42] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:17.080 [140443188103992] DEBUG - [Req#b0] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:17.080 [140443259251512] DEBUG - Completed: [127.0.0.1:60780] 404 GET /:/plugins/com.plexapp.system/resourceHashes (3 live) #b0 GZIP 1ms 261 bytes -Jun 04, 2026 03:41:17.085 [140443245435704] DEBUG - Request: [127.0.0.1:60788 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (3 live) #b1 GZIP Token () -Jun 04, 2026 03:41:17.085 [140443245435704] DEBUG - [Req#b1] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:17.086 [140443245435704] DEBUG - [Req#b1/HCl#43] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:17.086 [140443185994552] DEBUG - Request: [127.0.0.1:60794 (Loopback)] GET / (4 live) #b3 GZIP Token () -Jun 04, 2026 03:41:17.086 [140443259251512] DEBUG - Completed: [127.0.0.1:60794] 200 GET / (4 live) #b3 GZIP 0ms 2666 bytes -Jun 04, 2026 03:41:17.088 [140443243293496] DEBUG - [HttpClient/HCl#43] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:17.088 [140443245435704] DEBUG - [Req#b1] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:17.088 [140443259251512] DEBUG - Completed: [127.0.0.1:60788] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (3 live) #b1 GZIP 2ms 746 bytes -Jun 04, 2026 03:41:17.207 [140443209292600] DEBUG - Request: [127.0.0.1:60808 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ (3 live) #b4 GZIP Token () -Jun 04, 2026 03:41:17.207 [140443209292600] DEBUG - [Req#b4] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ -Jun 04, 2026 03:41:17.207 [140443209292600] DEBUG - [Req#b4/HCl#44] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ -Jun 04, 2026 03:41:17.396 [140443188103992] DEBUG - Request: [127.0.0.1:60810 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.plexthememusic (4 live) #b7 GZIP Token () -Jun 04, 2026 03:41:17.396 [140443188103992] DEBUG - [Req#b7] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.plexthememusic -Jun 04, 2026 03:41:17.396 [140443188103992] DEBUG - [Req#b7/HCl#45] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.plexthememusic -Jun 04, 2026 03:41:17.397 [140443243293496] DEBUG - [HttpClient/HCl#45] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.plexthememusic -Jun 04, 2026 03:41:17.397 [140443188103992] DEBUG - [Req#b7] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:17.397 [140443261360952] DEBUG - Completed: [127.0.0.1:60810] 200 GET /system/messaging/clear_events/com.plexapp.agents.plexthememusic (4 live) #b7 GZIP 1ms 280 bytes -Jun 04, 2026 03:41:17.439 [140443185994552] DEBUG - Request: [127.0.0.1:60826 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (4 live) #b8 GZIP Token () -Jun 04, 2026 03:41:17.439 [140443185994552] DEBUG - [Req#b8] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:17.440 [140443185994552] DEBUG - [Req#b8/HCl#46] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:17.441 [140443243293496] DEBUG - [HttpClient/HCl#46] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:17.441 [140443185994552] DEBUG - [Req#b8] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:17.441 [140443261360952] DEBUG - Completed: [127.0.0.1:60826] 404 GET /:/plugins/com.plexapp.system/resourceHashes (4 live) #b8 GZIP 1ms 261 bytes -Jun 04, 2026 03:41:17.447 [140443245435704] DEBUG - Request: [127.0.0.1:60830 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (5 live) #ba GZIP Token () -Jun 04, 2026 03:41:17.448 [140443188103992] DEBUG - Request: [127.0.0.1:60844 (Loopback)] GET / (5 live) #bc GZIP Token () -Jun 04, 2026 03:41:17.448 [140443245435704] DEBUG - [Req#ba] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:17.448 [140443245435704] DEBUG - [Req#ba/HCl#47] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:17.448 [140443261360952] DEBUG - Completed: [127.0.0.1:60844] 200 GET / (5 live) #bc GZIP 0ms 2666 bytes -Jun 04, 2026 03:41:17.450 [140443243293496] DEBUG - [HttpClient/HCl#47] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:17.450 [140443245435704] DEBUG - [Req#ba] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:17.450 [140443261360952] DEBUG - Completed: [127.0.0.1:60830] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (4 live) #ba GZIP 2ms 746 bytes -Jun 04, 2026 03:41:17.457 [140443185994552] DEBUG - Request: [127.0.0.1:60848 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (4 live) #bd GZIP Token () -Jun 04, 2026 03:41:17.457 [140443185994552] DEBUG - [Req#bd] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -Jun 04, 2026 03:41:17.457 [140443185994552] DEBUG - [Req#bd/HCl#48] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -Jun 04, 2026 03:41:18.235 [140443222039352] DEBUG - [MediaProviderManager] Refreshing media providers -Jun 04, 2026 03:41:18.355 [140443188103992] DEBUG - Request: [[::1]:38892 (Loopback)] GET /identity (5 live) #c0 -Jun 04, 2026 03:41:18.355 [140443261360952] DEBUG - Completed: [[::1]:38892] 200 GET /identity (5 live) #c0 0ms 447 bytes (pipelined: 1) -Jun 04, 2026 03:41:18.402 [140443222039352] DEBUG - [MediaProviderManager] we had 0 cloud providers online, we now have 1 -Jun 04, 2026 03:41:18.402 [140443222039352] DEBUG - [MediaProviderManager] cloud provider (Metadata) is online and available -Jun 04, 2026 03:41:18.402 [140443222039352] DEBUG - [MediaProviderManager/MetadataAgentManager] Found media provider for agent provider 'tv.plex.agents.movie' with source URI 'provider://tv.plex.provider.metadata' -Jun 04, 2026 03:41:18.402 [140443222039352] DEBUG - [MediaProviderManager/MetadataAgentManager] Found media provider for agent provider 'tv.plex.agents.series' with source URI 'provider://tv.plex.provider.metadata' -Jun 04, 2026 03:41:18.403 [140443222039352] DEBUG - [MediaProviderManager/MetadataAgentManager] Found media provider for agent provider 'tv.plex.agents.music' with source URI 'provider://tv.plex.provider.metadata' -Jun 04, 2026 03:41:18.403 [140443222039352] DEBUG - [MediaProviderManager/MetadataAgentManager] Found media provider for agent provider 'org.musicbrainz.agents.music' with source URI 'provider://tv.plex.provider.metadata' -Jun 04, 2026 03:41:18.403 [140443222039352] DEBUG - [MediaProviderManager] Media provider refresh complete -Jun 04, 2026 03:41:20.233 [140443236805432] DEBUG - [NSB] NetworkServiceBrowser: SERVER arrived: 127.0.0.1 (b6f2a1226b70) -Jun 04, 2026 03:41:20.233 [140443236805432] DEBUG - [NSB] Notifying the system bundle an update to server /system/notify/serverUpdated?host=127.0.0.1 -Jun 04, 2026 03:41:20.233 [140443236805432] DEBUG - [NSB] [com.plexapp.system] Sending command over HTTP (GET): /system/notify/serverUpdated?host=127.0.0.1 -Jun 04, 2026 03:41:20.233 [140443236805432] DEBUG - [NSB/HCl#4f] HTTP requesting GET http://127.0.0.1:33755/system/notify/serverUpdated?host=127.0.0.1 -Jun 04, 2026 03:41:20.235 [140443188103992] DEBUG - Request: [127.0.0.1:60854 (Loopback)] GET /servers (5 live) #c1 GZIP Token () -Jun 04, 2026 03:41:20.235 [140443259251512] DEBUG - Completed: [127.0.0.1:60854] 200 GET /servers (5 live) #c1 GZIP 0ms 490 bytes -Jun 04, 2026 03:41:20.237 [140443243293496] DEBUG - [HttpClient/HCl#4f] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/notify/serverUpdated?host=127.0.0.1 -Jun 04, 2026 03:41:20.237 [140443236805432] DEBUG - [NSB] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:21.285 [140443245435704] DEBUG - Request: [172.22.0.1:48422 (Subnet)] GET /identity (5 live) #c6 -Jun 04, 2026 03:41:21.285 [140443259251512] DEBUG - Completed: [172.22.0.1:48422] 200 GET /identity (5 live) #c6 0ms 447 bytes (pipelined: 1) -Jun 04, 2026 03:41:24.253 [140443198597944] DEBUG - Stopping file watcher for com.plexapp.agents.htbackdrops -Jun 04, 2026 03:41:24.253 [140443196488504] DEBUG - Stopping file watcher for com.plexapp.agents.fanarttv -Jun 04, 2026 03:41:24.253 [140443194379064] DEBUG - Stopping file watcher for com.plexapp.agents.lastfm -Jun 04, 2026 03:41:24.545 [140443251936056] DEBUG - DVR:Device: Discovering and refreshing all devices. -Jun 04, 2026 03:41:24.545 [140443251936056] DEBUG - Grabber: HDHomerun discovered 0 compatible devices. -Jun 04, 2026 03:41:24.545 [140443251936056] DEBUG - [HCl#50] HTTP requesting POST http://127.0.0.1:32600/devices/discover -Jun 04, 2026 03:41:24.717 [140443183885112] DEBUG - Stopping file watcher for com.plexapp.agents.localmedia -Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Grabber: Cleaning up orphaned grabs. -Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Grabber: Cleaned up 0 decrepit directories in 0.0 sec. -Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Activity: registered new activity 7073d5c2-c0c4-4eb7-92c5-f2aa0d5e153e - "Processing subscriptions" -Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Subscription: Scheduling subscriptions. -Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Subscription: Initialized 0 schedulers. -Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Subscription: Starting with 0 grabs, scheduled 0 active ones preemptively. -Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Subscription: Scheduled all subscriptions in 0 ms. -Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Activity: Ended activity 7073d5c2-c0c4-4eb7-92c5-f2aa0d5e153e. -Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Subscription: There are 0 active grabs at the end. -Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Activity: Ended activity 6b799016-6b14-47d1-9b4e-8a01dab8a338. -Jun 04, 2026 03:41:25.236 [140443234695992] DEBUG - Subscription: Refreshed all content in 0 ms. -Jun 04, 2026 03:41:25.416 [140443173337912] DEBUG - Stopping file watcher for com.plexapp.agents.imdb -Jun 04, 2026 03:41:26.968 [140443243293496] DEBUG - [HttpClient/HCl#50] HTTP/1.1 (2.4s) 200 response from POST http://127.0.0.1:32600/devices/discover -Jun 04, 2026 03:41:28.380 [140443188103992] DEBUG - Request: [[::1]:59386 (Loopback)] GET /identity (5 live) #c8 -Jun 04, 2026 03:41:28.380 [140443259251512] DEBUG - Completed: [[::1]:59386] 200 GET /identity (5 live) #c8 0ms 447 bytes (pipelined: 1) -Jun 04, 2026 03:41:31.197 [140443245435704] DEBUG - Request: [172.22.0.1:44934 (Subnet)] GET /identity (5 live) #cb -Jun 04, 2026 03:41:31.197 [140443259251512] DEBUG - Completed: [172.22.0.1:44934] 200 GET /identity (5 live) #cb 0ms 447 bytes (pipelined: 1) -Jun 04, 2026 03:41:37.053 [140443243293496] DEBUG - [HttpClient/HCl#44] HTTP/1.1 (19.8s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ -Jun 04, 2026 03:41:37.053 [140443209292600] DEBUG - [Req#b4] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:37.053 [140443259251512] DEBUG - Completed: [127.0.0.1:60808] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa29yMAo_ (4 live) #b4 GZIP 19846ms 415 bytes -Jun 04, 2026 03:41:37.056 [140443245435704] DEBUG - Request: [127.0.0.1:34974 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK (4 live) #ce GZIP Token () -Jun 04, 2026 03:41:37.056 [140443245435704] DEBUG - [Req#ce] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK -Jun 04, 2026 03:41:37.056 [140443245435704] DEBUG - [Req#ce/HCl#51] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK -Jun 04, 2026 03:41:37.056 [140443243293496] DEBUG - [HttpClient/HCl#48] HTTP/1.1 (19.6s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ -Jun 04, 2026 03:41:37.056 [140443185994552] DEBUG - [Req#bd] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:37.056 [140443261360952] DEBUG - Completed: [127.0.0.1:60848] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczMzCmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4dGhlbWVtdXNpY3MxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMHM1CnByZWZzczE2ClBsZXggVGhlbWUgTXVzaWNzNApuYW1lMQpzNwpUVl9TaG93MwpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMzQKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJkdmRvcmRlcnMyOQpjb20ucGxleGFwcC5hZ2VudHMudGhlbW92aWVkYjEKczIKeG5yMAo_ (4 live) #bd GZIP 19599ms 415 bytes -Jun 04, 2026 03:41:37.058 [140443243293496] DEBUG - [HttpClient/HCl#41] HTTP/1.1 (20.0s) 200 response from GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:37.058 [140443230477112] DEBUG - [com.plexapp.system] HTTP reply status 200, with 7374 bytes of content. -Jun 04, 2026 03:41:37.058 [140443204926264] DEBUG - Reading 158 bytes in the body, code is 200 -Jun 04, 2026 03:41:37.058 [140443204926264] DEBUG - [com.plexapp.agents.plexthememusic] Plug-in running on port 39625. -Jun 04, 2026 03:41:37.059 [140443204926264] DEBUG - Read configuration for [com.plexapp.agents.plexthememusic], had 0 prefixes -Jun 04, 2026 03:41:37.059 [140443204926264] DEBUG - Updating [com.plexapp.agents.plexthememusic] in the database, it has changed. -Jun 04, 2026 03:41:37.061 [140443243293496] DEBUG - [HttpClient/HCl#51] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK (reused) -Jun 04, 2026 03:41:37.061 [140443245435704] DEBUG - [Req#ce] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:37.062 [140443261360952] DEBUG - Completed: [127.0.0.1:34974] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy50aGVtb3ZpZWRiczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzcjQKczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRuczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjFzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjFzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMTgKVGhlIE1vdmllIERhdGFiYXNlczQKbmFtZTEKczUKTW92aWUxCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYTI2CnMyCmVuczIKY3NzMgpkYXMyCmRlczIKZWxzMgplc3MyCmZpczIKZnJzMgpoZXMyCmhyczIKaHVzMgppdHMyCmx2czIKbHRzMgpubHMyCm5vczIKcGxzMgpwdHMyCnJ1czIKc2tzMgpzdnMyCnRoczIKdHJzMgp2aXMyCnpoczIKa28xMApyNwpzMTEKbWVkaWFfdHlwZXNyOApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI5CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE4ClRoZSBNb3ZpZSBEYXRhYmFzZXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYjEKczI2CmNvbS5wbGV4YXBwLmFnZW50cy50aGV0dmRicjAK (3 live) #ce GZIP 5ms 415 bytes -Jun 04, 2026 03:41:37.062 [140443230477112] DEBUG - The system knows about 10 agents. -Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - [com.plexapp.agents.thetvdb] Agent not known by system, so we're starting for sure. -Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - Starting file watcher for com.plexapp.agents.thetvdb -Jun 04, 2026 03:41:37.062 [140443204926264] DEBUG - Starting plug-in /usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea/WebClient.bundle. -Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - Plug-in limit of 6 exceeded. -Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.lyricfind. -Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - Stopping [com.plexapp.agents.lyricfind]. -Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - [com.plexapp.agents.lyricfind] Killing. -Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - Spawned plug-in com.plexapp.agents.thetvdb with PID 660 -Jun 04, 2026 03:41:37.062 [140443200707384] DEBUG - [com.plexapp.agents.thetvdb] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:37.064 [140443202816824] DEBUG - Reading 154 bytes in the body, code is 200 -Jun 04, 2026 03:41:37.064 [140443202816824] DEBUG - [com.plexapp.agents.themoviedb] Plug-in running on port 46579. -Jun 04, 2026 03:41:37.064 [140443202816824] DEBUG - Read configuration for [com.plexapp.agents.themoviedb], had 0 prefixes -Jun 04, 2026 03:41:37.064 [140443202816824] DEBUG - Updating [com.plexapp.agents.themoviedb] in the database, it has changed. -Jun 04, 2026 03:41:37.064 [140443269335864] WARN - JobManager: Could not find job for handle 446 -Jun 04, 2026 03:41:37.064 [140443251936056] DEBUG - Updating the list of agents known by the system. -Jun 04, 2026 03:41:37.064 [140443251936056] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents -Jun 04, 2026 03:41:37.064 [140443251936056] DEBUG - [HCl#52] HTTP requesting GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:37.066 [140443188103992] DEBUG - Request: [127.0.0.1:34982 (Loopback)] GET /:/plugins/com.plexapp.agents.thetvdb (3 live) #d2 GZIP Token () -Jun 04, 2026 03:41:37.428 [140443209292600] DEBUG - Request: [127.0.0.1:34990 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.thetvdb (4 live) #d5 GZIP Token () -Jun 04, 2026 03:41:37.429 [140443209292600] DEBUG - [Req#d5] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.thetvdb -Jun 04, 2026 03:41:37.429 [140443209292600] DEBUG - [Req#d5/HCl#53] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.thetvdb -Jun 04, 2026 03:41:37.430 [140443243293496] DEBUG - [HttpClient/HCl#53] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.thetvdb -Jun 04, 2026 03:41:37.430 [140443209292600] DEBUG - [Req#d5] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:37.430 [140443261360952] DEBUG - Completed: [127.0.0.1:34990] 200 GET /system/messaging/clear_events/com.plexapp.agents.thetvdb (4 live) #d5 GZIP 1ms 280 bytes -Jun 04, 2026 03:41:37.475 [140443185994552] DEBUG - Request: [127.0.0.1:35002 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (4 live) #d6 GZIP Token () -Jun 04, 2026 03:41:37.475 [140443185994552] DEBUG - [Req#d6] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:37.475 [140443185994552] DEBUG - [Req#d6/HCl#54] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:37.477 [140443243293496] DEBUG - [HttpClient/HCl#54] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:37.477 [140443185994552] DEBUG - [Req#d6] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:37.477 [140443261360952] DEBUG - Completed: [127.0.0.1:35002] 404 GET /:/plugins/com.plexapp.system/resourceHashes (4 live) #d6 GZIP 1ms 261 bytes -Jun 04, 2026 03:41:37.483 [140443245435704] DEBUG - Request: [127.0.0.1:35014 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (5 live) #d8 GZIP Token () -Jun 04, 2026 03:41:37.483 [140443209292600] DEBUG - Request: [127.0.0.1:35024 (Loopback)] GET / (5 live) #da GZIP Token () -Jun 04, 2026 03:41:37.483 [140443245435704] DEBUG - [Req#d8] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:37.483 [140443245435704] DEBUG - [Req#d8/HCl#55] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:37.483 [140443261360952] DEBUG - Completed: [127.0.0.1:35024] 200 GET / (5 live) #da GZIP 0ms 2666 bytes -Jun 04, 2026 03:41:37.484 [140443243293496] DEBUG - [HttpClient/HCl#55] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:37.484 [140443245435704] DEBUG - [Req#d8] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:37.484 [140443261360952] DEBUG - Completed: [127.0.0.1:35014] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (4 live) #d8 GZIP 1ms 746 bytes -Jun 04, 2026 03:41:37.623 [140443185994552] DEBUG - Request: [127.0.0.1:35028 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ (4 live) #db GZIP Token () -Jun 04, 2026 03:41:37.623 [140443185994552] DEBUG - [Req#db] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ -Jun 04, 2026 03:41:37.623 [140443185994552] DEBUG - [Req#db/HCl#56] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ -Jun 04, 2026 03:41:38.405 [140443209292600] DEBUG - Request: [[::1]:37272 (Loopback)] GET /identity (5 live) #de -Jun 04, 2026 03:41:38.406 [140443261360952] DEBUG - Completed: [[::1]:37272] 200 GET /identity (5 live) #de 0ms 447 bytes (pipelined: 1) -Jun 04, 2026 03:41:44.750 [140443181775672] DEBUG - Stopping file watcher for com.plexapp.agents.lyricfind -Jun 04, 2026 03:41:48.431 [140443245435704] DEBUG - Request: [[::1]:34064 (Loopback)] GET /identity (5 live) #df -Jun 04, 2026 03:41:48.431 [140443259251512] DEBUG - Completed: [[::1]:34064] 200 GET /identity (5 live) #df 0ms 447 bytes (pipelined: 1) -Jun 04, 2026 03:41:57.121 [140443243293496] DEBUG - [HttpClient/HCl#56] HTTP/1.1 (19.5s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ -Jun 04, 2026 03:41:57.121 [140443185994552] DEBUG - [Req#db] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:57.121 [140443261360952] DEBUG - Completed: [127.0.0.1:35028] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo1CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdAoyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm8xCnIyCjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudG5zMTQKY29udHJpYnV0ZXNfdG9yNApzOQpsYW5ndWFnZXNiMXMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMXMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3M3ClRoZVRWREJzNApuYW1lMQpzNwpUVl9TaG93MjMKczIKZW5zMgpmcnMyCnpoczIKc3ZzMgpub3MyCmRhczIKZmlzMgpubHMyCmRlczIKaXRzMgplc3MyCnBsczIKaHVzMgplbHMyCnRyczIKcnVzMgpoZXMyCmphczIKcHRzMgpjc3MyCmtvczIKc2xzMgpocnIwCg__ (4 live) #db GZIP 19498ms 415 bytes -Jun 04, 2026 03:41:57.123 [140443200707384] DEBUG - Reading 151 bytes in the body, code is 200 -Jun 04, 2026 03:41:57.123 [140443200707384] DEBUG - [com.plexapp.agents.thetvdb] Plug-in running on port 46809. -Jun 04, 2026 03:41:57.123 [140443200707384] DEBUG - Read configuration for [com.plexapp.agents.thetvdb], had 0 prefixes -Jun 04, 2026 03:41:57.123 [140443200707384] DEBUG - Updating [com.plexapp.agents.thetvdb] in the database, it has changed. -Jun 04, 2026 03:41:57.124 [140443243293496] DEBUG - [HttpClient/HCl#52] HTTP/1.1 (20.1s) 200 response from GET http://127.0.0.1:33755/system/agents (reused) -Jun 04, 2026 03:41:57.124 [140443251936056] DEBUG - [com.plexapp.system] HTTP reply status 200, with 8986 bytes of content. -Jun 04, 2026 03:41:57.125 [140443251936056] DEBUG - The system knows about 12 agents. -Jun 04, 2026 03:41:57.125 [140443188103992] DEBUG - [Req#d2] [com.plexapp.agents.thetvdb] Sending command over HTTP (GET): /:/plugins/com.plexapp.agents.thetvdb -Jun 04, 2026 03:41:57.125 [140443190213432] DEBUG - [Req#ae] [com.plexapp.agents.thetvdb] Sending command over HTTP (GET): /:/plugins/com.plexapp.agents.thetvdb -Jun 04, 2026 03:41:57.125 [140443188103992] DEBUG - [Req#d2/HCl#57] HTTP requesting GET http://127.0.0.1:46809/:/plugins/com.plexapp.agents.thetvdb -Jun 04, 2026 03:41:57.125 [140443190213432] DEBUG - [Req#ae/HCl#58] HTTP requesting GET http://127.0.0.1:46809/:/plugins/com.plexapp.agents.thetvdb -Jun 04, 2026 03:41:57.125 [140443249711928] DEBUG - Starting scheduled updates, every 3600 seconds -Jun 04, 2026 03:41:57.125 [140443249711928] INFO - LibraryUpdateManager path watching is disabled -Jun 04, 2026 03:41:57.125 [140443249711928] DEBUG - Done waiting for all plug-ins to start. -Jun 04, 2026 03:41:57.125 [140443249711928] DEBUG - Starting file watcher for com.plexapp.agents.localmedia -Jun 04, 2026 03:41:57.125 [140443222039352] DEBUG - Downloading document http://127.0.0.1:32400/:/plugins/com.plexapp.agents.imdb/prefs -Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - Plug-in limit of 6 exceeded. -Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.movieposterdb. -Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - Stopping [com.plexapp.agents.movieposterdb]. -Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - [com.plexapp.agents.movieposterdb] Killing. -Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:57.126 [140443222039352] DEBUG - [Req#e6] Starting file watcher for com.plexapp.agents.imdb -Jun 04, 2026 03:41:57.126 [140443222039352] DEBUG - [Req#e6] Plug-in limit of 6 exceeded. -Jun 04, 2026 03:41:57.126 [140443222039352] DEBUG - [Req#e6] * Bringing down the older plug-in: com.plexapp.agents.localmedia. -Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - Spawned plug-in com.plexapp.agents.localmedia with PID 701 -Jun 04, 2026 03:41:57.126 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:57.127 [140443269335864] WARN - JobManager: Could not find job for handle 453 -Jun 04, 2026 03:41:57.132 [140443243293496] DEBUG - [HttpClient/HCl#57] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:46809/:/plugins/com.plexapp.agents.thetvdb -Jun 04, 2026 03:41:57.132 [140443188103992] DEBUG - [Req#d2] [com.plexapp.agents.thetvdb] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:57.133 [140443261360952] DEBUG - Completed: [127.0.0.1:34982] 404 GET /:/plugins/com.plexapp.agents.thetvdb (3 live) #d2 GZIP 20067ms 269 bytes -Jun 04, 2026 03:41:57.134 [140443243293496] DEBUG - [HttpClient/HCl#58] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:46809/:/plugins/com.plexapp.agents.thetvdb -Jun 04, 2026 03:41:57.134 [140443190213432] DEBUG - [Req#ae] [com.plexapp.agents.thetvdb] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:57.134 [140443261360952] DEBUG - Completed: [127.0.0.1:60772] 404 GET /:/plugins/com.plexapp.agents.thetvdb (2 live) #ae GZIP 40086ms 269 bytes -Jun 04, 2026 03:41:57.490 [140443185994552] DEBUG - Request: [127.0.0.1:46144 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.localmedia (2 live) #e2 GZIP Token () -Jun 04, 2026 03:41:57.490 [140443185994552] DEBUG - [Req#e2] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.localmedia -Jun 04, 2026 03:41:57.490 [140443185994552] DEBUG - [Req#e2/HCl#59] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.localmedia -Jun 04, 2026 03:41:57.493 [140443243293496] DEBUG - [HttpClient/HCl#59] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.localmedia (reused) -Jun 04, 2026 03:41:57.493 [140443185994552] DEBUG - [Req#e2] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:57.493 [140443261360952] DEBUG - Completed: [127.0.0.1:46144] 200 GET /system/messaging/clear_events/com.plexapp.agents.localmedia (2 live) #e2 GZIP 2ms 280 bytes -Jun 04, 2026 03:41:57.534 [140443188103992] DEBUG - Request: [127.0.0.1:46146 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #e9 GZIP Token () -Jun 04, 2026 03:41:57.534 [140443188103992] DEBUG - [Req#e9] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:57.534 [140443188103992] DEBUG - [Req#e9/HCl#5a] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:57.536 [140443243293496] DEBUG - [HttpClient/HCl#5a] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:57.536 [140443188103992] DEBUG - [Req#e9] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:57.536 [140443261360952] DEBUG - Completed: [127.0.0.1:46146] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #e9 GZIP 2ms 261 bytes -Jun 04, 2026 03:41:57.542 [140443190213432] DEBUG - Request: [127.0.0.1:46154 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #eb GZIP Token () -Jun 04, 2026 03:41:57.542 [140443190213432] DEBUG - [Req#eb] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:57.542 [140443190213432] DEBUG - [Req#eb/HCl#5b] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:57.542 [140443245435704] DEBUG - Request: [127.0.0.1:46160 (Loopback)] GET / (3 live) #ed GZIP Token () -Jun 04, 2026 03:41:57.542 [140443259251512] DEBUG - Completed: [127.0.0.1:46160] 200 GET / (3 live) #ed GZIP 0ms 2671 bytes -Jun 04, 2026 03:41:57.544 [140443243293496] DEBUG - [HttpClient/HCl#5b] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:57.544 [140443190213432] DEBUG - [Req#eb] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:57.544 [140443259251512] DEBUG - Completed: [127.0.0.1:46154] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #eb GZIP 2ms 746 bytes -Jun 04, 2026 03:41:57.808 [140443185994552] DEBUG - Request: [127.0.0.1:46168 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #ee GZIP Token () -Jun 04, 2026 03:41:57.808 [140443185994552] DEBUG - [Req#ee] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:41:57.809 [140443185994552] DEBUG - [Req#ee/HCl#5c] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:41:57.811 [140443243293496] DEBUG - [HttpClient/HCl#5c] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:41:57.811 [140443185994552] DEBUG - [Req#ee] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:57.811 [140443259251512] DEBUG - Completed: [127.0.0.1:46168] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #ee GZIP 2ms 415 bytes -Jun 04, 2026 03:41:57.812 [140443188103992] DEBUG - Request: [127.0.0.1:46180 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #f1 GZIP Token () -Jun 04, 2026 03:41:57.813 [140443188103992] DEBUG - [Req#f1] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:41:57.813 [140443188103992] DEBUG - [Req#f1/HCl#5d] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:41:57.815 [140443243293496] DEBUG - [HttpClient/HCl#5d] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:41:57.815 [140443188103992] DEBUG - [Req#f1] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:57.815 [140443259251512] DEBUG - Completed: [127.0.0.1:46180] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #f1 GZIP 2ms 415 bytes -Jun 04, 2026 03:41:57.817 [140443245435704] DEBUG - Request: [127.0.0.1:46194 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK (2 live) #f3 GZIP Token () -Jun 04, 2026 03:41:57.817 [140443245435704] DEBUG - [Req#f3] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -Jun 04, 2026 03:41:57.817 [140443245435704] DEBUG - [Req#f3/HCl#5e] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -Jun 04, 2026 03:41:57.819 [140443243293496] DEBUG - [HttpClient/HCl#5e] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -Jun 04, 2026 03:41:57.819 [140443245435704] DEBUG - [Req#f3] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:57.820 [140443261360952] DEBUG - Completed: [127.0.0.1:46194] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK (2 live) #f3 GZIP 2ms 415 bytes -Jun 04, 2026 03:41:57.821 [140443190213432] DEBUG - Request: [127.0.0.1:46202 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK (2 live) #f5 GZIP Token () -Jun 04, 2026 03:41:57.821 [140443190213432] DEBUG - [Req#f5] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -Jun 04, 2026 03:41:57.821 [140443190213432] DEBUG - [Req#f5/HCl#5f] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -Jun 04, 2026 03:41:57.824 [140443243293496] DEBUG - [HttpClient/HCl#5f] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -Jun 04, 2026 03:41:57.824 [140443190213432] DEBUG - [Req#f5] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:57.824 [140443261360952] DEBUG - Completed: [127.0.0.1:46202] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK (2 live) #f5 GZIP 3ms 415 bytes -Jun 04, 2026 03:41:57.826 [140443185994552] DEBUG - Request: [127.0.0.1:46206 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ (2 live) #f7 GZIP Token () -Jun 04, 2026 03:41:57.826 [140443185994552] DEBUG - [Req#f7] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -Jun 04, 2026 03:41:57.826 [140443185994552] DEBUG - [Req#f7/HCl#60] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -Jun 04, 2026 03:41:57.828 [140443243293496] DEBUG - [HttpClient/HCl#60] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -Jun 04, 2026 03:41:57.828 [140443185994552] DEBUG - [Req#f7] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:57.829 [140443261360952] DEBUG - Completed: [127.0.0.1:46206] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ (2 live) #f7 GZIP 3ms 415 bytes -Jun 04, 2026 03:41:57.831 [140443249711928] DEBUG - Reading 154 bytes in the body, code is 200 -Jun 04, 2026 03:41:57.831 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] Plug-in running on port 34913. -Jun 04, 2026 03:41:57.831 [140443249711928] DEBUG - Read configuration for [com.plexapp.agents.localmedia], had 0 prefixes -Jun 04, 2026 03:41:57.831 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] Sending command over HTTP (GET): /:/plugins/com.plexapp.agents.localmedia/prefs -Jun 04, 2026 03:41:57.831 [140443222039352] DEBUG - [Req#e6] Stopping [com.plexapp.agents.localmedia]. -Jun 04, 2026 03:41:57.831 [140443249711928] DEBUG - [HCl#61] HTTP requesting GET http://127.0.0.1:34913/:/plugins/com.plexapp.agents.localmedia/prefs -Jun 04, 2026 03:41:57.831 [140443222039352] DEBUG - [Req#e6] [com.plexapp.agents.localmedia] Killing. -Jun 04, 2026 03:41:57.831 [140443222039352] DEBUG - [Req#e6] Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:57.831 [140443222039352] DEBUG - [Req#e6] Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:57.831 [140443222039352] DEBUG - [Req#e6] Spawned plug-in com.plexapp.agents.imdb with PID 726 -Jun 04, 2026 03:41:57.831 [140443222039352] DEBUG - [Req#e6] [com.plexapp.agents.imdb] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:57.834 [140443243293496] WARN - [HttpClient/HCl#61] HTTP error requesting GET http://127.0.0.1:34913/:/plugins/com.plexapp.agents.localmedia/prefs (56, Failure when receiving data from the peer) (Recv failure: Connection reset by peer) -Jun 04, 2026 03:41:57.834 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] HTTP reply status -56, with 0 bytes of content. -Jun 04, 2026 03:41:57.834 [140443269335864] WARN - JobManager: Could not find job for handle 701 -Jun 04, 2026 03:41:57.834 [140443249711928] DEBUG - PluginRepository::setStartState: 3, complete -Jun 04, 2026 03:41:58.190 [140443188103992] DEBUG - Request: [127.0.0.1:46220 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.imdb (2 live) #f9 GZIP Token () -Jun 04, 2026 03:41:58.190 [140443188103992] DEBUG - [Req#f9] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.imdb -Jun 04, 2026 03:41:58.190 [140443188103992] DEBUG - [Req#f9/HCl#62] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.imdb -Jun 04, 2026 03:41:58.192 [140443243293496] DEBUG - [HttpClient/HCl#62] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.imdb -Jun 04, 2026 03:41:58.192 [140443188103992] DEBUG - [Req#f9] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:41:58.192 [140443261360952] DEBUG - Completed: [127.0.0.1:46220] 200 GET /system/messaging/clear_events/com.plexapp.agents.imdb (2 live) #f9 GZIP 1ms 280 bytes -Jun 04, 2026 03:41:58.237 [140443245435704] DEBUG - Request: [127.0.0.1:46230 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #fb GZIP Token () -Jun 04, 2026 03:41:58.237 [140443245435704] DEBUG - [Req#fb] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:58.237 [140443245435704] DEBUG - [Req#fb/HCl#63] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:58.239 [140443243293496] DEBUG - [HttpClient/HCl#63] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:41:58.239 [140443245435704] DEBUG - [Req#fb] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:41:58.239 [140443261360952] DEBUG - Completed: [127.0.0.1:46230] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #fb GZIP 1ms 261 bytes -Jun 04, 2026 03:41:58.244 [140443190213432] DEBUG - Request: [127.0.0.1:46238 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #fd GZIP Token () -Jun 04, 2026 03:41:58.244 [140443190213432] DEBUG - [Req#fd] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:58.244 [140443190213432] DEBUG - [Req#fd/HCl#64] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:58.245 [140443185994552] DEBUG - Request: [127.0.0.1:46252 (Loopback)] GET / (3 live) #ff GZIP Token () -Jun 04, 2026 03:41:58.245 [140443259251512] DEBUG - Completed: [127.0.0.1:46252] 200 GET / (3 live) #ff GZIP 0ms 2654 bytes -Jun 04, 2026 03:41:58.246 [140443243293496] DEBUG - [HttpClient/HCl#64] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:41:58.246 [140443190213432] DEBUG - [Req#fd] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:41:58.246 [140443259251512] DEBUG - Completed: [127.0.0.1:46238] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #fd GZIP 2ms 746 bytes -Jun 04, 2026 03:41:58.455 [140443188103992] DEBUG - Request: [[::1]:41466 (Loopback)] GET /identity (2 live) #100 -Jun 04, 2026 03:41:58.456 [140443259251512] DEBUG - Completed: [[::1]:41466] 200 GET /identity (2 live) #100 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:41:58.469 [140443245435704] DEBUG - Request: [127.0.0.1:46260 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ (2 live) #103 GZIP Token () -Jun 04, 2026 03:41:58.469 [140443245435704] DEBUG - [Req#103] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ -Jun 04, 2026 03:41:58.469 [140443245435704] DEBUG - [Req#103/HCl#65] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ -Jun 04, 2026 03:41:58.471 [140443243293496] DEBUG - [HttpClient/HCl#65] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ -Jun 04, 2026 03:41:58.471 [140443245435704] DEBUG - [Req#103] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:41:58.471 [140443261360952] DEBUG - Completed: [127.0.0.1:46260] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo3CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0Cmxpc3QKMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMQpyMgoxMApyMwpzMTEKbWVkaWFfdHlwZXNyNApzMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI1CnMxNApjb250cmlidXRlc190b3I2CnM5Cmxhbmd1YWdlc2IxczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIxczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczE5ClBsZXggTW92aWUgKExlZ2FjeSlzNApuYW1lMQpzNQpNb3ZpZTEKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhMQpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLnRoZW1vdmllZGIzMwpzMgplbnMyCnN2czIKZnJzMgplc3MyCm5sczIKZGVzMgppdHMyCmRhczIKYXJzMgpjYXMyCnpoczIKY3NzMgpldHMyCmZpczIKZWxzMgpoZXMyCmhpczIKaHVzMgppZHMyCmphczIKa29zMgpsdnMyCm5vczIKZmFzMgpwbHMyCnB0czIKcm9zMgpydXMyCnNrczIKdGhzMgp0cnMyCnVrczIKdmlyMAo_ (2 live) #103 GZIP 2ms 415 bytes -Jun 04, 2026 03:41:58.473 [140443222039352] DEBUG - [Req#e6] Reading 148 bytes in the body, code is 200 -Jun 04, 2026 03:41:58.473 [140443222039352] DEBUG - [Req#e6] [com.plexapp.agents.imdb] Plug-in running on port 40185. -Jun 04, 2026 03:41:58.473 [140443222039352] DEBUG - [Req#e6] Read configuration for [com.plexapp.agents.imdb], had 0 prefixes -Jun 04, 2026 03:41:58.473 [140443222039352] DEBUG - [Req#e6] [com.plexapp.agents.imdb] Sending command over HTTP (GET): /:/plugins/com.plexapp.agents.imdb/prefs -Jun 04, 2026 03:41:58.474 [140443222039352] DEBUG - [Req#e6/HCl#66] HTTP requesting GET http://127.0.0.1:40185/:/plugins/com.plexapp.agents.imdb/prefs -Jun 04, 2026 03:41:58.480 [140443243293496] DEBUG - [HttpClient/HCl#66] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:40185/:/plugins/com.plexapp.agents.imdb/prefs -Jun 04, 2026 03:41:58.480 [140443222039352] DEBUG - [Req#e6] [com.plexapp.agents.imdb] HTTP reply status 200, with 2224 bytes of content. -Jun 04, 2026 03:41:58.480 [140443222039352] DEBUG - Caching document http://127.0.0.1:32400/:/plugins/com.plexapp.agents.imdb/prefs as 584183bdb017f226470e9202aed4e772801b19b0 -Jun 04, 2026 03:41:58.480 [140443222039352] DEBUG - IVA: Downloading trailer lists. -Jun 04, 2026 03:41:58.666 [140443230477112] ERROR - downloadContainer: expected MediaContainer element, found Error -Jun 04, 2026 03:41:58.666 [140443222039352] ERROR - IVA: Error downloading trailers for source 1. -Jun 04, 2026 03:41:58.801 [140443230477112] ERROR - downloadContainer: expected MediaContainer element, found Error -Jun 04, 2026 03:41:58.801 [140443222039352] ERROR - IVA: Error downloading trailers for source 2. -Jun 04, 2026 03:41:58.834 [140443249711928] DEBUG - File "/config/Library/Application Support/Plex Media Server/Plug-ins" changed: 2026-05-19 18:20:18 (1779214818) => 2026-06-04 03:41:15 (1780544475). -Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - Scanning for plug-ins in "/usr/lib/plexmediaserver/Resources/Plug-ins-563d026ea" -Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - Scanning for plug-ins in "/config/Library/Application Support/Plex Media Server/Plug-ins" -Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - PluginRepository::setStartState: 1, startingSystem -Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - PluginRepository::setStartState: 2, startingPlugins -Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - Updating the list of agents known by the system. -Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - [com.plexapp.system] Sending command over HTTP (GET): /system/agents -Jun 04, 2026 03:41:59.834 [140443249711928] DEBUG - [HCl#6b] HTTP requesting GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:59.839 [140443243293496] DEBUG - [HttpClient/HCl#6b] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/agents -Jun 04, 2026 03:41:59.839 [140443249711928] DEBUG - [com.plexapp.system] HTTP reply status 200, with 8986 bytes of content. -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - The system knows about 12 agents. -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Waiting for 0 plug-ins to finish starting. -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Starting scheduled updates, every 3600 seconds -Jun 04, 2026 03:41:59.840 [140443249711928] INFO - LibraryUpdateManager path watching is disabled -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Done waiting for all plug-ins to start. -Jun 04, 2026 03:41:59.840 [140443234695992] DEBUG - Downloading document http://127.0.0.1:32400/:/plugins/com.plexapp.agents.imdb/prefs -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Starting file watcher for com.plexapp.agents.localmedia -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Plug-in limit of 6 exceeded. -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - * Bringing down the older plug-in: com.plexapp.agents.none. -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Stopping [com.plexapp.agents.none]. -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - [com.plexapp.agents.none] Killing. -Jun 04, 2026 03:41:59.840 [140443234695992] DEBUG - Cache hit for document http://127.0.0.1:32400/:/plugins/com.plexapp.agents.imdb/prefs -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Plugin: setting environment variable: 'PYTHONHOME=/usr/lib/plexmediaserver/Resources/Python' -Jun 04, 2026 03:41:59.840 [140443234695992] DEBUG - IVA: Downloading trailer lists. -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Plugin: setting environment variable: 'PYTHONPATH=/usr/lib/plexmediaserver/Resources/Python/python27.zip:/usr/lib/plexmediaserver/Resources/Python/lib/python2.7/site-packages' -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - Spawned plug-in com.plexapp.agents.localmedia with PID 755 -Jun 04, 2026 03:41:59.840 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] Sending command: GET /:/prefixes -Jun 04, 2026 03:41:59.842 [140443269335864] WARN - JobManager: Could not find job for handle 516 -Jun 04, 2026 03:41:59.994 [140443230477112] ERROR - downloadContainer: expected MediaContainer element, found Error -Jun 04, 2026 03:41:59.994 [140443234695992] ERROR - IVA: Error downloading trailers for source 1. -Jun 04, 2026 03:42:00.132 [140443230477112] ERROR - downloadContainer: expected MediaContainer element, found Error -Jun 04, 2026 03:42:00.132 [140443234695992] ERROR - IVA: Error downloading trailers for source 2. -Jun 04, 2026 03:42:00.200 [140443185994552] DEBUG - Request: [127.0.0.1:46272 (Loopback)] GET /system/messaging/clear_events/com.plexapp.agents.localmedia (2 live) #106 GZIP Token () -Jun 04, 2026 03:42:00.200 [140443185994552] DEBUG - [Req#106] [com.plexapp.system] Sending command over HTTP (GET): /system/messaging/clear_events/com.plexapp.agents.localmedia -Jun 04, 2026 03:42:00.200 [140443185994552] DEBUG - [Req#106/HCl#70] HTTP requesting GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.localmedia -Jun 04, 2026 03:42:00.201 [140443243293496] DEBUG - [HttpClient/HCl#70] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/system/messaging/clear_events/com.plexapp.agents.localmedia (reused) -Jun 04, 2026 03:42:00.201 [140443185994552] DEBUG - [Req#106] [com.plexapp.system] HTTP reply status 200, with 0 bytes of content. -Jun 04, 2026 03:42:00.201 [140443261360952] DEBUG - Completed: [127.0.0.1:46272] 200 GET /system/messaging/clear_events/com.plexapp.agents.localmedia (2 live) #106 GZIP 1ms 280 bytes -Jun 04, 2026 03:42:00.244 [140443190213432] DEBUG - Request: [127.0.0.1:46280 (Loopback)] GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #109 GZIP Token () -Jun 04, 2026 03:42:00.244 [140443190213432] DEBUG - [Req#109] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:42:00.244 [140443190213432] DEBUG - [Req#109/HCl#71] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:42:00.246 [140443243293496] DEBUG - [HttpClient/HCl#71] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/resourceHashes -Jun 04, 2026 03:42:00.246 [140443190213432] DEBUG - [Req#109] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:42:00.246 [140443261360952] DEBUG - Completed: [127.0.0.1:46280] 404 GET /:/plugins/com.plexapp.system/resourceHashes (2 live) #109 GZIP 1ms 261 bytes -Jun 04, 2026 03:42:00.251 [140443188103992] DEBUG - Request: [127.0.0.1:46282 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #10b GZIP Token () -Jun 04, 2026 03:42:00.251 [140443188103992] DEBUG - [Req#10b] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:42:00.251 [140443188103992] DEBUG - [Req#10b/HCl#72] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:42:00.252 [140443245435704] DEBUG - Request: [127.0.0.1:46286 (Loopback)] GET / (3 live) #10d GZIP Token () -Jun 04, 2026 03:42:00.252 [140443259251512] DEBUG - Completed: [127.0.0.1:46286] 200 GET / (3 live) #10d GZIP 0ms 2671 bytes -Jun 04, 2026 03:42:00.253 [140443243293496] DEBUG - [HttpClient/HCl#72] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ -Jun 04, 2026 03:42:00.253 [140443188103992] DEBUG - [Req#10b] [com.plexapp.system] HTTP reply status 200, with 516 bytes of content. -Jun 04, 2026 03:42:00.253 [140443259251512] DEBUG - Completed: [127.0.0.1:46282] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0J1bmRsZVNlcnZpY2U6QWxsU2VydmljZXM_/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxCmRpY3QKMApyMAo_ (2 live) #10b GZIP 1ms 746 bytes -Jun 04, 2026 03:42:00.506 [140443185994552] DEBUG - Request: [127.0.0.1:46288 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #10e GZIP Token () -Jun 04, 2026 03:42:00.506 [140443185994552] DEBUG - [Req#10e] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:42:00.506 [140443185994552] DEBUG - [Req#10e/HCl#73] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:42:00.508 [140443243293496] DEBUG - [HttpClient/HCl#73] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:42:00.508 [140443185994552] DEBUG - [Req#10e] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:42:00.508 [140443259251512] DEBUG - Completed: [127.0.0.1:46288] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQo2CmRpY3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzEKcjIKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #10e GZIP 1ms 415 bytes -Jun 04, 2026 03:42:00.509 [140443190213432] DEBUG - Request: [127.0.0.1:46294 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #111 GZIP Token () -Jun 04, 2026 03:42:00.509 [140443190213432] DEBUG - [Req#111] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:42:00.509 [140443190213432] DEBUG - [Req#111/HCl#74] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:42:00.511 [140443243293496] DEBUG - [HttpClient/HCl#74] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ -Jun 04, 2026 03:42:00.511 [140443190213432] DEBUG - [Req#111] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:42:00.511 [140443259251512] DEBUG - Completed: [127.0.0.1:46294] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxMApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CjIKczI5CmNvbS5wbGV4YXBwLmFnZW50cy5sb2NhbG1lZGlhczEwCmlkZW50aWZpZXJyMQpzMTAKYWdlbnRfaW5mbzIKcjIKcjYKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG5yMAo_ (2 live) #111 GZIP 2ms 415 bytes -Jun 04, 2026 03:42:00.512 [140443245435704] DEBUG - Request: [127.0.0.1:46300 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK (2 live) #113 GZIP Token () -Jun 04, 2026 03:42:00.512 [140443245435704] DEBUG - [Req#113] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -Jun 04, 2026 03:42:00.512 [140443245435704] DEBUG - [Req#113/HCl#75] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -Jun 04, 2026 03:42:00.514 [140443243293496] DEBUG - [HttpClient/HCl#75] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK -Jun 04, 2026 03:42:00.514 [140443245435704] DEBUG - [Req#113] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:42:00.514 [140443259251512] DEBUG - Completed: [127.0.0.1:46300] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNApkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvMwpyMgpyNgpyMTAKMTAKcjMKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjQKczE0CmNvbnRyaWJ1dGVzX3RvcjUKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChNb3ZpZXMpczQKbmFtZTEKczUKTW92aWUyCnMyMwpjb20ucGxleGFwcC5hZ2VudHMuaW1kYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyNwpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyOApzMTQKY29udHJpYnV0ZXNfdG9yOQpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyMwpMb2NhbCBNZWRpYSBBc3NldHMgKFRWKXM0Cm5hbWUxCnM3ClRWX1Nob3cyCnMyNgpjb20ucGxleGFwcC5hZ2VudHMudGhldHZkYnMyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZTEKczIKeG4xMApyMTEKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjEyCnMxNApjb250cmlidXRlc190b3IxMwpzOQpsYW5ndWFnZXNiMHMyMApwZXJzaXN0X3N0b3JlZF9maWxlc2kwCnM3CnZlcnNpb25iMHMxNgpwcmltYXJ5X3Byb3ZpZGVyYjFzNQpwcmVmc3MyOApMb2NhbCBNZWRpYSBBc3NldHMgKEFydGlzdHMpczQKbmFtZTEKczYKQXJ0aXN0NgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLmRpc2NvZ3NzMjUKY29tLnBsZXhhcHAuYWdlbnRzLmxhc3RmbXMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljczIzCmNvbS5wbGV4YXBwLmFnZW50cy5ub25lczIwCnR2LnBsZXguYWdlbnRzLm11c2ljczI4Cm9yZy5tdXNpY2JyYWluei5hZ2VudHMubXVzaWMxCnMyCnhucjAK (2 live) #113 GZIP 2ms 415 bytes -Jun 04, 2026 03:42:00.516 [140443188103992] DEBUG - Request: [127.0.0.1:46310 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK (2 live) #115 GZIP Token () -Jun 04, 2026 03:42:00.516 [140443188103992] DEBUG - [Req#115] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -Jun 04, 2026 03:42:00.516 [140443188103992] DEBUG - [Req#115/HCl#76] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -Jun 04, 2026 03:42:00.519 [140443243293496] DEBUG - [HttpClient/HCl#76] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK -Jun 04, 2026 03:42:00.519 [140443188103992] DEBUG - [Req#115] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:42:00.519 [140443259251512] DEBUG - Completed: [127.0.0.1:46310] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoxNwpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKMgpzMjkKY29tLnBsZXhhcHAuYWdlbnRzLmxvY2FsbWVkaWFzMTAKaWRlbnRpZmllcnIxCnMxMAphZ2VudF9pbmZvNApyMgpyNgpyMTAKcjE0CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljcjAK (2 live) #115 GZIP 2ms 415 bytes -Jun 04, 2026 03:42:00.520 [140443185994552] DEBUG - Request: [127.0.0.1:46318 (Loopback)] GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ (2 live) #117 GZIP Token () -Jun 04, 2026 03:42:00.520 [140443185994552] DEBUG - [Req#117] [com.plexapp.system] Sending command over HTTP (GET): /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -Jun 04, 2026 03:42:00.520 [140443185994552] DEBUG - [Req#117/HCl#77] HTTP requesting GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -Jun 04, 2026 03:42:00.522 [140443243293496] DEBUG - [HttpClient/HCl#77] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:33755/:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ -Jun 04, 2026 03:42:00.522 [140443185994552] DEBUG - [Req#117] [com.plexapp.system] HTTP reply status 200, with 16 bytes of content. -Jun 04, 2026 03:42:00.523 [140443259251512] DEBUG - Completed: [127.0.0.1:46318] 200 GET /:/plugins/com.plexapp.system/messaging/function/X0FnZW50U2VydmljZTpVcGRhdGVJbmZv/Y2VyZWFsMQoxCmxpc3QKMApyMAo_/Y2VyZWFsMQoyMQpkaWN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdApkaWN0Cmxpc3QKbGlzdApsaXN0CmRpY3QKbGlzdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKZGljdApsaXN0Cmxpc3QKbGlzdAoyCnMyOQpjb20ucGxleGFwcC5hZ2VudHMubG9jYWxtZWRpYXMxMAppZGVudGlmaWVycjEKczEwCmFnZW50X2luZm81CnIyCnI2CnIxMApyMTQKcjE3CjEwCnIzCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHI0CnMxNApjb250cmlidXRlc190b3I1CnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTAKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI3CkxvY2FsIE1lZGlhIEFzc2V0cyAoTW92aWVzKXM0Cm5hbWUxCnM1Ck1vdmllMgpzMjMKY29tLnBsZXhhcHAuYWdlbnRzLmltZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjcKczExCm1lZGlhX3R5cGVzbnMxMgphY2NlcHRzX2Zyb21uczE0CmZhbGxiYWNrX2FnZW50cjgKczE0CmNvbnRyaWJ1dGVzX3RvcjkKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjMKTG9jYWwgTWVkaWEgQXNzZXRzIChUVilzNApuYW1lMQpzNwpUVl9TaG93MgpzMjYKY29tLnBsZXhhcHAuYWdlbnRzLnRoZXR2ZGJzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmUxCnMyCnhuMTAKcjExCnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxMgpzMTQKY29udHJpYnV0ZXNfdG9yMTMKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjgKTG9jYWwgTWVkaWEgQXNzZXRzIChBcnRpc3RzKXM0Cm5hbWUxCnM2CkFydGlzdDYKczI2CmNvbS5wbGV4YXBwLmFnZW50cy5kaXNjb2dzczI1CmNvbS5wbGV4YXBwLmFnZW50cy5sYXN0Zm1zMjgKY29tLnBsZXhhcHAuYWdlbnRzLnBsZXhtdXNpY3MyMwpjb20ucGxleGFwcC5hZ2VudHMubm9uZXMyMAp0di5wbGV4LmFnZW50cy5tdXNpY3MyOApvcmcubXVzaWNicmFpbnouYWdlbnRzLm11c2ljMQpzMgp4bjEwCnIxNQpzMTEKbWVkaWFfdHlwZXNuczEyCmFjY2VwdHNfZnJvbW5zMTQKZmFsbGJhY2tfYWdlbnRyMTYKczE0CmNvbnRyaWJ1dGVzX3RvcjEzCnM5Cmxhbmd1YWdlc2IwczIwCnBlcnNpc3Rfc3RvcmVkX2ZpbGVzaTIKczcKdmVyc2lvbmIwczE2CnByaW1hcnlfcHJvdmlkZXJiMXM1CnByZWZzczI4CkxvY2FsIE1lZGlhIEFzc2V0cyAoQXJ0aXN0cylzNApuYW1lMQpzNgpBcnRpc3QxCnMyOApjb20ucGxleGFwcC5hZ2VudHMucGxleG11c2ljMTAKcjE4CnMxMQptZWRpYV90eXBlc25zMTIKYWNjZXB0c19mcm9tbnMxNApmYWxsYmFja19hZ2VudHIxOQpzMTQKY29udHJpYnV0ZXNfdG9yMjAKczkKbGFuZ3VhZ2VzYjBzMjAKcGVyc2lzdF9zdG9yZWRfZmlsZXNpMApzNwp2ZXJzaW9uYjBzMTYKcHJpbWFyeV9wcm92aWRlcmIxczUKcHJlZnNzMjcKTG9jYWwgTWVkaWEgQXNzZXRzIChBbGJ1bXMpczQKbmFtZTEKczUKQWxidW02CnMyNgpjb20ucGxleGFwcC5hZ2VudHMuZGlzY29nc3MyNQpjb20ucGxleGFwcC5hZ2VudHMubGFzdGZtczI4CmNvbS5wbGV4YXBwLmFnZW50cy5wbGV4bXVzaWNzMjMKY29tLnBsZXhhcHAuYWdlbnRzLm5vbmVzMjAKdHYucGxleC5hZ2VudHMubXVzaWNzMjgKb3JnLm11c2ljYnJhaW56LmFnZW50cy5tdXNpYzEKczIKeG5yMAo_ (2 live) #117 GZIP 2ms 415 bytes -Jun 04, 2026 03:42:00.524 [140443249711928] DEBUG - Reading 154 bytes in the body, code is 200 -Jun 04, 2026 03:42:00.525 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] Plug-in running on port 35691. -Jun 04, 2026 03:42:00.525 [140443249711928] DEBUG - Read configuration for [com.plexapp.agents.localmedia], had 0 prefixes -Jun 04, 2026 03:42:00.525 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] Sending command over HTTP (GET): /:/plugins/com.plexapp.agents.localmedia/prefs -Jun 04, 2026 03:42:00.525 [140443249711928] DEBUG - [HCl#78] HTTP requesting GET http://127.0.0.1:35691/:/plugins/com.plexapp.agents.localmedia/prefs -Jun 04, 2026 03:42:00.530 [140443243293496] DEBUG - [HttpClient/HCl#78] HTTP/1.1 (0.0s) 200 response from GET http://127.0.0.1:35691/:/plugins/com.plexapp.agents.localmedia/prefs -Jun 04, 2026 03:42:00.530 [140443249711928] DEBUG - [com.plexapp.agents.localmedia] HTTP reply status 200, with 281 bytes of content. -Jun 04, 2026 03:42:00.530 [140443249711928] DEBUG - PluginRepository::setStartState: 3, complete -Jun 04, 2026 03:42:02.161 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET / (2 live) #119 GZIP -Jun 04, 2026 03:42:02.162 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET / (2 live) #119 GZIP 0ms 2683 bytes (pipelined: 1) -Jun 04, 2026 03:42:02.368 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /identity (2 live) #11c GZIP -Jun 04, 2026 03:42:02.368 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /identity (2 live) #11c GZIP 0ms 487 bytes (pipelined: 2) -Jun 04, 2026 03:42:02.569 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library (2 live) #11d GZIP -Jun 04, 2026 03:42:02.570 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /library (2 live) #11d GZIP 0ms 597 bytes (pipelined: 3) -Jun 04, 2026 03:42:02.771 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library/sections (2 live) #11e GZIP -Jun 04, 2026 03:42:02.771 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /library/sections (2 live) #11e GZIP 0ms 432 bytes (pipelined: 4) -Jun 04, 2026 03:42:02.973 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library/sections/1/all (2 live) #11f GZIP -Jun 04, 2026 03:42:02.973 [140443188103992] WARN - [Req#11f] Invalid library section ID 1 passed. -Jun 04, 2026 03:42:02.973 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /library/sections/1/all (2 live) #11f GZIP 0ms 379 bytes (pipelined: 5) -Jun 04, 2026 03:42:03.174 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library/sections/1/onDeck (2 live) #120 GZIP -Jun 04, 2026 03:42:03.174 [140443185994552] WARN - [Req#120] Invalid library section ID 1 passed. -Jun 04, 2026 03:42:03.174 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 404 GET /library/sections/1/onDeck (2 live) #120 GZIP 0ms 379 bytes (pipelined: 6) -Jun 04, 2026 03:42:03.376 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library/sections/1/recentlyAdded (2 live) #121 GZIP -Jun 04, 2026 03:42:03.376 [140443190213432] WARN - [Req#121] Invalid library section ID 1 passed. -Jun 04, 2026 03:42:03.376 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /library/sections/1/recentlyAdded (2 live) #121 GZIP 0ms 379 bytes (pipelined: 7) -Jun 04, 2026 03:42:03.577 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library/metadata/1 (2 live) #122 GZIP -Jun 04, 2026 03:42:03.578 [140443245435704] WARN - [Req#122] Invalid library metadata ID 1 passed. -Jun 04, 2026 03:42:03.578 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 404 GET /library/metadata/1 (2 live) #122 GZIP 0ms 379 bytes (pipelined: 8) -Jun 04, 2026 03:42:03.779 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /library/metadata/1/children (2 live) #123 GZIP -Jun 04, 2026 03:42:03.780 [140443188103992] WARN - [Req#123] Invalid library metadata ID 1 passed. -Jun 04, 2026 03:42:03.780 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /library/metadata/1/children (2 live) #123 GZIP 0ms 379 bytes (pipelined: 9) -Jun 04, 2026 03:42:03.981 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /status/sessions (2 live) #124 GZIP -Jun 04, 2026 03:42:03.981 [140443185994552] DEBUG - [Req#124] [Now] Adding 0 sessions. -Jun 04, 2026 03:42:03.981 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /status/sessions (2 live) #124 GZIP 0ms 397 bytes (pipelined: 10) -Jun 04, 2026 03:42:04.182 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /status/sessions/history/all (2 live) #125 GZIP -Jun 04, 2026 03:42:04.183 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /status/sessions/history/all (2 live) #125 GZIP 0ms 397 bytes (pipelined: 11) -Jun 04, 2026 03:42:04.384 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /accounts (2 live) #126 GZIP -Jun 04, 2026 03:42:04.385 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /accounts (2 live) #126 GZIP 0ms 521 bytes (pipelined: 12) -Jun 04, 2026 03:42:04.586 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /devices (2 live) #127 GZIP -Jun 04, 2026 03:42:04.586 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /devices (2 live) #127 GZIP 0ms 483 bytes (pipelined: 13) -Jun 04, 2026 03:42:04.786 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /clients (2 live) #128 GZIP -Jun 04, 2026 03:42:04.787 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /clients (2 live) #128 GZIP 0ms 397 bytes (pipelined: 14) -Jun 04, 2026 03:42:04.793 [140443179666232] DEBUG - Stopping file watcher for com.plexapp.agents.movieposterdb -Jun 04, 2026 03:42:04.988 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /servers (2 live) #129 GZIP -Jun 04, 2026 03:42:04.988 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /servers (2 live) #129 GZIP 0ms 519 bytes (pipelined: 15) -Jun 04, 2026 03:42:05.189 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /hubs/search (2 live) #12a GZIP -Jun 04, 2026 03:42:05.190 [140443245435704] ERROR - [Req#12a] Missing required query parameter query -Jun 04, 2026 03:42:05.190 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 400 GET /hubs/search (2 live) #12a GZIP 0ms 384 bytes (pipelined: 16) -Jun 04, 2026 03:42:05.224 [140443175447352] DEBUG - Stopping file watcher for com.plexapp.agents.none -Jun 04, 2026 03:42:05.391 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /playlists (2 live) #12b GZIP -Jun 04, 2026 03:42:05.392 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /playlists (2 live) #12b GZIP 1ms 397 bytes (pipelined: 17) -Jun 04, 2026 03:42:05.593 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /butler (2 live) #12c GZIP -Jun 04, 2026 03:42:05.594 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /butler (2 live) #12c GZIP 0ms 799 bytes (pipelined: 18) -Jun 04, 2026 03:42:05.795 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /activities (2 live) #12d GZIP -Jun 04, 2026 03:42:05.796 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /activities (2 live) #12d GZIP 0ms 397 bytes (pipelined: 19) -Jun 04, 2026 03:42:05.997 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /updater/status (2 live) #12e GZIP -Jun 04, 2026 03:42:05.997 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /updater/status (2 live) #12e GZIP 0ms 433 bytes (pipelined: 20) -Jun 04, 2026 03:42:06.199 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /system/agents (2 live) #12f GZIP -Jun 04, 2026 03:42:06.200 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /system/agents (2 live) #12f GZIP 1ms 1917 bytes (pipelined: 21) -Jun 04, 2026 03:42:06.401 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /system/settings (2 live) #130 GZIP -Jun 04, 2026 03:42:06.402 [140443185994552] DEBUG - [Req#130] [com.plexapp.system] Sending command over HTTP (GET): /system/settings -Jun 04, 2026 03:42:06.402 [140443185994552] DEBUG - [Req#130/HCl#79] HTTP requesting GET http://127.0.0.1:33755/system/settings -Jun 04, 2026 03:42:06.404 [140443243293496] DEBUG - [HttpClient/HCl#79] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/system/settings -Jun 04, 2026 03:42:06.404 [140443185994552] DEBUG - [Req#130] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:42:06.404 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /system/settings (2 live) #130 GZIP 2ms 177 bytes (pipelined: 22) -Jun 04, 2026 03:42:06.605 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /system/updates (2 live) #131 GZIP -Jun 04, 2026 03:42:06.605 [140443190213432] DEBUG - [Req#131] [com.plexapp.system] Sending command over HTTP (GET): /system/updates -Jun 04, 2026 03:42:06.605 [140443190213432] DEBUG - [Req#131/HCl#7a] HTTP requesting GET http://127.0.0.1:33755/system/updates -Jun 04, 2026 03:42:06.607 [140443243293496] DEBUG - [HttpClient/HCl#7a] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/system/updates (reused) -Jun 04, 2026 03:42:06.607 [140443190213432] DEBUG - [Req#131] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:42:06.607 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 404 GET /system/updates (2 live) #131 GZIP 2ms 177 bytes (pipelined: 23) -Jun 04, 2026 03:42:06.809 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /statistics/bandwidth (2 live) #132 GZIP -Jun 04, 2026 03:42:06.809 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /statistics/bandwidth (2 live) #132 GZIP 0ms 379 bytes (pipelined: 24) -Jun 04, 2026 03:42:07.010 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /statistics/resources (2 live) #133 GZIP -Jun 04, 2026 03:42:07.010 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 404 GET /statistics/resources (2 live) #133 GZIP 0ms 379 bytes (pipelined: 25) -Jun 04, 2026 03:42:07.211 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /diagnostics (2 live) #134 GZIP -Jun 04, 2026 03:42:07.211 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /diagnostics (2 live) #134 GZIP 0ms 416 bytes (pipelined: 26) -Jun 04, 2026 03:42:07.412 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /sync (2 live) #135 GZIP -Jun 04, 2026 03:42:07.412 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /sync (2 live) #135 GZIP 0ms 416 bytes (pipelined: 27) -Jun 04, 2026 03:42:07.613 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /sync/items (2 live) #136 GZIP -Jun 04, 2026 03:42:07.613 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /sync/items (2 live) #136 GZIP 0ms 379 bytes (pipelined: 28) -Jun 04, 2026 03:42:07.814 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /sync/queue (2 live) #137 GZIP -Jun 04, 2026 03:42:07.814 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 404 GET /sync/queue (2 live) #137 GZIP 0ms 379 bytes (pipelined: 29) -Jun 04, 2026 03:42:08.015 [140443185994552] INFO - Request: [172.22.0.1:49246 (Subnet)] GET /services/browse (2 live) #138 GZIP -Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: overlay Path: / Name: overlay -Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: cgroup2 Path: /sys/fs/cgroup Name: cgroup -Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: mqueue Path: /dev/mqueue Name: mqueue -Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: btrfs Path: /config Name: /dev/mapper/root -Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: btrfs Path: /transcode Name: /dev/mapper/root -Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: btrfs Path: /data/media Name: /dev/mapper/root -Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: btrfs Path: /etc/resolv.conf Name: /dev/mapper/root -Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: btrfs Path: /etc/hostname Name: /dev/mapper/root -Jun 04, 2026 03:42:08.015 [140443185994552] DEBUG - [Req#138] Filesystem Type: btrfs Path: /etc/hosts Name: /dev/mapper/root -Jun 04, 2026 03:42:08.015 [140443261360952] INFO - Completed: [172.22.0.1:49246] 200 GET /services/browse (2 live) #138 GZIP 0ms 615 bytes (pipelined: 30) -Jun 04, 2026 03:42:08.216 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /media/grabbers (2 live) #139 GZIP -Jun 04, 2026 03:42:08.217 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /media/grabbers (2 live) #139 GZIP 0ms 516 bytes (pipelined: 31) -Jun 04, 2026 03:42:08.417 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /livetv/dvrs (2 live) #13a GZIP -Jun 04, 2026 03:42:08.417 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /livetv/dvrs (2 live) #13a GZIP 0ms 397 bytes (pipelined: 32) -Jun 04, 2026 03:42:08.481 [140443188103992] DEBUG - Request: [[::1]:39164 (Loopback)] GET /identity (3 live) #11b -Jun 04, 2026 03:42:08.481 [140443261360952] DEBUG - Completed: [[::1]:39164] 200 GET /identity (3 live) #11b 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:42:08.618 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /livetv/epg (2 live) #13b GZIP -Jun 04, 2026 03:42:08.619 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 404 GET /livetv/epg (2 live) #13b GZIP 0ms 379 bytes (pipelined: 33) -Jun 04, 2026 03:42:08.819 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /channels (2 live) #13f GZIP -Jun 04, 2026 03:42:08.819 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 200 GET /channels (2 live) #13f GZIP 0ms 454 bytes (pipelined: 34) -Jun 04, 2026 03:42:09.020 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /player/timeline/poll (2 live) #140 GZIP -Jun 04, 2026 03:42:09.020 [140443245435704] ERROR - [Req#140/CompanionProxy] Missing required query parameter commandID -Jun 04, 2026 03:42:09.021 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 400 GET /player/timeline/poll (2 live) #140 GZIP 0ms 384 bytes (pipelined: 35) -Jun 04, 2026 03:42:09.221 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /player/playback/playMedia (2 live) #141 GZIP -Jun 04, 2026 03:42:09.222 [140443188103992] ERROR - [Req#141/CompanionProxy] Missing required path parameter X-Plex-Target-Client-Identifier -Jun 04, 2026 03:42:09.222 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 400 GET /player/playback/playMedia (2 live) #141 GZIP 0ms 384 bytes (pipelined: 36) -Jun 04, 2026 03:42:09.421 [140443185994552] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /transcode/sessions (2 live) #142 GZIP -Jun 04, 2026 03:42:09.422 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 200 GET /transcode/sessions (2 live) #142 GZIP 0ms 397 bytes (pipelined: 37) -Jun 04, 2026 03:42:09.623 [140443190213432] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /security/resources (2 live) #143 GZIP -Jun 04, 2026 03:42:09.623 [140443190213432] ERROR - [Req#143] Missing required query parameter source -Jun 04, 2026 03:42:09.623 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 400 GET /security/resources (2 live) #143 GZIP 0ms 384 bytes (pipelined: 38) -Jun 04, 2026 03:42:09.824 [140443245435704] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /security/token (2 live) #144 GZIP -Jun 04, 2026 03:42:09.824 [140443245435704] ERROR - [Req#144] Missing required query parameter type -Jun 04, 2026 03:42:09.825 [140443261360952] DEBUG - Completed: [172.22.0.1:49246] 400 GET /security/token (2 live) #144 GZIP 0ms 384 bytes (pipelined: 39) -Jun 04, 2026 03:42:10.025 [140443188103992] DEBUG - Request: [172.22.0.1:49246 (Subnet)] GET /downloadQueue (2 live) #145 GZIP -Jun 04, 2026 03:42:10.025 [140443259251512] DEBUG - Completed: [172.22.0.1:49246] 404 GET /downloadQueue (2 live) #145 GZIP 0ms 379 bytes (pipelined: 40) -Jun 04, 2026 03:42:18.506 [140443190213432] DEBUG - Request: [[::1]:59980 (Loopback)] GET /identity (2 live) #13c -Jun 04, 2026 03:42:18.506 [140443259251512] DEBUG - Completed: [[::1]:59980] 200 GET /identity (2 live) #13c 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:42:26.351 [140443190213432] DEBUG - Request: [172.22.0.1:58328 (Subnet)] GET / (2 live) #148 -Jun 04, 2026 03:42:26.351 [140443261360952] DEBUG - Completed: [172.22.0.1:58328] 200 GET / (2 live) #148 0ms 5131 bytes (pipelined: 1) -Jun 04, 2026 03:42:28.533 [140443190213432] DEBUG - Request: [[::1]:38916 (Loopback)] GET /identity (2 live) #14b -Jun 04, 2026 03:42:28.533 [140443261360952] DEBUG - Completed: [[::1]:38916] 200 GET /identity (2 live) #14b 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:42:38.559 [140443190213432] DEBUG - Request: [[::1]:34410 (Loopback)] GET /identity (2 live) #14e -Jun 04, 2026 03:42:38.559 [140443261360952] DEBUG - Completed: [[::1]:34410] 200 GET /identity (2 live) #14e 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:42:48.584 [140443190213432] DEBUG - Request: [[::1]:39882 (Loopback)] GET /identity (2 live) #151 -Jun 04, 2026 03:42:48.585 [140443259251512] DEBUG - Completed: [[::1]:39882] 200 GET /identity (2 live) #151 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.619 [140443190213432] DEBUG - Request: [172.22.0.1:35550 (Subnet)] GET / (2 live) #154 -Jun 04, 2026 03:42:54.619 [140443259251512] DEBUG - Completed: [172.22.0.1:35550] 200 GET / (2 live) #154 0ms 5131 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.623 [140443190213432] DEBUG - Request: [172.22.0.1:35560 (Subnet)] GET /identity (2 live) #157 -Jun 04, 2026 03:42:54.623 [140443261360952] DEBUG - Completed: [172.22.0.1:35560] 200 GET /identity (2 live) #157 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.626 [140443190213432] DEBUG - Request: [172.22.0.1:35572 (Subnet)] GET /library (2 live) #15a -Jun 04, 2026 03:42:54.626 [140443261360952] DEBUG - Completed: [172.22.0.1:35572] 200 GET /library (2 live) #15a 0ms 670 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.630 [140443190213432] DEBUG - Request: [172.22.0.1:35574 (Subnet)] GET /library/sections (2 live) #15d -Jun 04, 2026 03:42:54.630 [140443261360952] DEBUG - Completed: [172.22.0.1:35574] 200 GET /library/sections (2 live) #15d 0ms 329 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.633 [140443190213432] DEBUG - Request: [172.22.0.1:35578 (Subnet)] GET /status/sessions (2 live) #160 -Jun 04, 2026 03:42:54.633 [140443190213432] DEBUG - [Req#160] [Now] Adding 0 sessions. -Jun 04, 2026 03:42:54.633 [140443261360952] DEBUG - Completed: [172.22.0.1:35578] 200 GET /status/sessions (2 live) #160 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.636 [140443190213432] DEBUG - Request: [172.22.0.1:35580 (Subnet)] GET /accounts (2 live) #163 -Jun 04, 2026 03:42:54.636 [140443261360952] DEBUG - Completed: [172.22.0.1:35580] 200 GET /accounts (2 live) #163 0ms 493 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.642 [140443190213432] DEBUG - Request: [172.22.0.1:35592 (Subnet)] GET /devices (2 live) #166 -Jun 04, 2026 03:42:54.642 [140443261360952] DEBUG - Completed: [172.22.0.1:35592] 200 GET /devices (2 live) #166 0ms 414 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.646 [140443190213432] DEBUG - Request: [172.22.0.1:35608 (Subnet)] GET /clients (2 live) #169 -Jun 04, 2026 03:42:54.646 [140443259251512] DEBUG - Completed: [172.22.0.1:35608] 200 GET /clients (2 live) #169 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.649 [140443190213432] DEBUG - Request: [172.22.0.1:35620 (Subnet)] GET /servers (2 live) #16c -Jun 04, 2026 03:42:54.650 [140443261360952] DEBUG - Completed: [172.22.0.1:35620] 200 GET /servers (2 live) #16c 0ms 470 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.653 [140443190213432] DEBUG - Request: [172.22.0.1:35626 (Subnet)] GET /playlists (2 live) #16f -Jun 04, 2026 03:42:54.653 [140443261360952] DEBUG - Completed: [172.22.0.1:35626] 200 GET /playlists (2 live) #16f 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.657 [140443190213432] DEBUG - Request: [172.22.0.1:35640 (Subnet)] GET /butler (2 live) #172 -Jun 04, 2026 03:42:54.657 [140443261360952] DEBUG - Completed: [172.22.0.1:35640] 200 GET /butler (2 live) #172 0ms 2509 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.660 [140443190213432] DEBUG - Request: [172.22.0.1:35654 (Subnet)] GET /activities (2 live) #175 -Jun 04, 2026 03:42:54.660 [140443259251512] DEBUG - Completed: [172.22.0.1:35654] 200 GET /activities (2 live) #175 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.663 [140443190213432] DEBUG - Request: [172.22.0.1:35664 (Subnet)] GET /updater/status (2 live) #178 -Jun 04, 2026 03:42:54.664 [140443259251512] DEBUG - Completed: [172.22.0.1:35664] 200 GET /updater/status (2 live) #178 0ms 334 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.667 [140443190213432] DEBUG - Request: [172.22.0.1:35670 (Subnet)] GET /system/agents (2 live) #17b -Jun 04, 2026 03:42:54.667 [140443261360952] DEBUG - Completed: [172.22.0.1:35670] 200 GET /system/agents (2 live) #17b 0ms 17417 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.671 [140443190213432] DEBUG - Request: [172.22.0.1:35682 (Subnet)] GET /system/settings (2 live) #17e -Jun 04, 2026 03:42:54.671 [140443190213432] DEBUG - [Req#17e] [com.plexapp.system] Sending command over HTTP (GET): /system/settings -Jun 04, 2026 03:42:54.671 [140443190213432] DEBUG - [Req#17e/HCl#7b] HTTP requesting GET http://127.0.0.1:33755/system/settings -Jun 04, 2026 03:42:54.672 [140443243293496] DEBUG - [HttpClient/HCl#7b] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/system/settings (reused) -Jun 04, 2026 03:42:54.672 [140443190213432] DEBUG - [Req#17e] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:42:54.672 [140443259251512] DEBUG - Completed: [172.22.0.1:35682] 404 GET /system/settings (2 live) #17e 1ms 177 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.675 [140443190213432] DEBUG - Request: [172.22.0.1:35696 (Subnet)] GET /system/updates (2 live) #181 -Jun 04, 2026 03:42:54.675 [140443190213432] DEBUG - [Req#181] [com.plexapp.system] Sending command over HTTP (GET): /system/updates -Jun 04, 2026 03:42:54.675 [140443190213432] DEBUG - [Req#181/HCl#7c] HTTP requesting GET http://127.0.0.1:33755/system/updates -Jun 04, 2026 03:42:54.676 [140443243293496] DEBUG - [HttpClient/HCl#7c] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/system/updates (reused) -Jun 04, 2026 03:42:54.676 [140443190213432] DEBUG - [Req#181] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:42:54.676 [140443261360952] DEBUG - Completed: [172.22.0.1:35696] 404 GET /system/updates (2 live) #181 0ms 177 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.680 [140443190213432] DEBUG - Request: [172.22.0.1:35700 (Subnet)] GET /statistics/bandwidth (2 live) #184 -Jun 04, 2026 03:42:54.680 [140443259251512] DEBUG - Completed: [172.22.0.1:35700] 404 GET /statistics/bandwidth (2 live) #184 0ms 288 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.684 [140443190213432] DEBUG - Request: [172.22.0.1:35712 (Subnet)] GET /statistics/resources (2 live) #187 -Jun 04, 2026 03:42:54.684 [140443259251512] DEBUG - Completed: [172.22.0.1:35712] 404 GET /statistics/resources (2 live) #187 0ms 288 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.688 [140443190213432] DEBUG - Request: [172.22.0.1:35714 (Subnet)] GET /sync (2 live) #18a -Jun 04, 2026 03:42:54.688 [140443261360952] DEBUG - Completed: [172.22.0.1:35714] 200 GET /sync (2 live) #18a 0ms 311 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.691 [140443190213432] DEBUG - Request: [172.22.0.1:35718 (Subnet)] GET /channels (2 live) #18d -Jun 04, 2026 03:42:54.691 [140443259251512] DEBUG - Completed: [172.22.0.1:35718] 200 GET /channels (2 live) #18d 0ms 388 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.695 [140443190213432] DEBUG - Request: [172.22.0.1:35730 (Subnet)] GET /transcode/sessions (2 live) #190 -Jun 04, 2026 03:42:54.695 [140443259251512] DEBUG - Completed: [172.22.0.1:35730] 200 GET /transcode/sessions (2 live) #190 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:42:54.698 [140443190213432] DEBUG - Request: [172.22.0.1:35732 (Subnet)] GET /hubs/search (2 live) #193 -Jun 04, 2026 03:42:54.698 [140443190213432] ERROR - [Req#193] Missing required query parameter query -Jun 04, 2026 03:42:54.698 [140443259251512] DEBUG - Completed: [172.22.0.1:35732] 400 GET /hubs/search (2 live) #193 0ms 294 bytes (pipelined: 1) -Jun 04, 2026 03:42:58.609 [140443190213432] DEBUG - Request: [[::1]:44466 (Loopback)] GET /identity (2 live) #196 -Jun 04, 2026 03:42:58.609 [140443261360952] DEBUG - Completed: [[::1]:44466] 200 GET /identity (2 live) #196 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:43:07.033 [140443190213432] DEBUG - Request: [172.22.0.1:43570 (Subnet)] GET /butler (2 live) #199 -Jun 04, 2026 03:43:07.034 [140443261360952] DEBUG - Completed: [172.22.0.1:43570] 200 GET /butler (2 live) #199 0ms 2509 bytes (pipelined: 1) -Jun 04, 2026 03:43:07.051 [140443190213432] DEBUG - Request: [172.22.0.1:43574 (Subnet)] GET /accounts (2 live) #19c -Jun 04, 2026 03:43:07.052 [140443259251512] DEBUG - Completed: [172.22.0.1:43574] 200 GET /accounts (2 live) #19c 0ms 493 bytes (pipelined: 1) -Jun 04, 2026 03:43:07.073 [140443190213432] DEBUG - Request: [172.22.0.1:43582 (Subnet)] GET /devices (2 live) #19f -Jun 04, 2026 03:43:07.073 [140443259251512] DEBUG - Completed: [172.22.0.1:43582] 200 GET /devices (2 live) #19f 0ms 414 bytes (pipelined: 1) -Jun 04, 2026 03:43:07.092 [140443190213432] DEBUG - Request: [172.22.0.1:43584 (Subnet)] GET /clients (2 live) #1a2 -Jun 04, 2026 03:43:07.092 [140443259251512] DEBUG - Completed: [172.22.0.1:43584] 200 GET /clients (2 live) #1a2 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:43:08.635 [140443190213432] DEBUG - Request: [[::1]:57554 (Loopback)] GET /identity (2 live) #1a5 -Jun 04, 2026 03:43:08.635 [140443261360952] DEBUG - Completed: [[::1]:57554] 200 GET /identity (2 live) #1a5 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:43:13.606 [140443245435704] DEBUG - BPQ: [Starting] -> [Processing] -Jun 04, 2026 03:43:13.607 [140443245435704] DEBUG - BPQ: generating queue items from 0 generator(s) -Jun 04, 2026 03:43:13.607 [140443245435704] DEBUG - BPQ: generated 0 item(s) for queue -Jun 04, 2026 03:43:13.607 [140443245435704] DEBUG - BPQ: [Processing] -> [Idle] -Jun 04, 2026 03:43:15.214 [140443190213432] DEBUG - Request: [127.0.0.1:54380 (Loopback)] GET /servers (2 live) #1a8 GZIP Token () -Jun 04, 2026 03:43:15.215 [140443259251512] DEBUG - Completed: [127.0.0.1:54380] 200 GET /servers (2 live) #1a8 GZIP 0ms 490 bytes -Jun 04, 2026 03:43:15.216 [140443190213432] DEBUG - Request: [127.0.0.1:54384 (Loopback)] GET / (2 live) #1ab GZIP Token () -Jun 04, 2026 03:43:15.217 [140443259251512] DEBUG - Completed: [127.0.0.1:54384] 200 GET / (2 live) #1ab GZIP 0ms 2654 bytes -Jun 04, 2026 03:43:15.218 [140443190213432] DEBUG - Request: [127.0.0.1:54390 (Loopback)] GET /library/sections (2 live) #1ad GZIP Token () -Jun 04, 2026 03:43:15.218 [140443259251512] DEBUG - Completed: [127.0.0.1:54390] 200 GET /library/sections (2 live) #1ad GZIP 0ms 403 bytes -Jun 04, 2026 03:43:15.219 [140443190213432] DEBUG - Request: [127.0.0.1:54392 (Loopback)] GET /channels/all (2 live) #1af GZIP Token () -Jun 04, 2026 03:43:15.219 [140443259251512] DEBUG - Completed: [127.0.0.1:54392] 200 GET /channels/all (2 live) #1af GZIP 0ms 387 bytes -Jun 04, 2026 03:43:15.220 [140443190213432] DEBUG - Request: [127.0.0.1:54406 (Loopback)] GET /library/sections (2 live) #1b1 GZIP Token () -Jun 04, 2026 03:43:15.221 [140443259251512] DEBUG - Completed: [127.0.0.1:54406] 200 GET /library/sections (2 live) #1b1 GZIP 0ms 403 bytes -Jun 04, 2026 03:43:15.221 [140443190213432] DEBUG - Request: [127.0.0.1:54414 (Loopback)] GET /channels/all (2 live) #1b3 GZIP Token () -Jun 04, 2026 03:43:15.221 [140443259251512] DEBUG - Completed: [127.0.0.1:54414] 200 GET /channels/all (2 live) #1b3 GZIP 0ms 387 bytes -Jun 04, 2026 03:43:18.660 [140443190213432] DEBUG - Request: [[::1]:37864 (Loopback)] GET /identity (2 live) #1b5 -Jun 04, 2026 03:43:18.660 [140443259251512] DEBUG - Completed: [[::1]:37864] 200 GET /identity (2 live) #1b5 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:43:28.684 [140443190213432] DEBUG - Request: [[::1]:40456 (Loopback)] GET /identity (2 live) #1b7 -Jun 04, 2026 03:43:28.684 [140443261360952] DEBUG - Completed: [[::1]:40456] 200 GET /identity (2 live) #1b7 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:43:29.323 [140443190213432] DEBUG - Request: [172.22.0.1:41462 (Subnet)] GET /activities (2 live) #1ba -Jun 04, 2026 03:43:29.323 [140443259251512] DEBUG - Completed: [172.22.0.1:41462] 200 GET /activities (2 live) #1ba 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:43:29.341 [140443190213432] DEBUG - Request: [172.22.0.1:41466 (Subnet)] GET /library (2 live) #1bd -Jun 04, 2026 03:43:29.341 [140443261360952] DEBUG - Completed: [172.22.0.1:41466] 200 GET /library (2 live) #1bd 0ms 670 bytes (pipelined: 1) -Jun 04, 2026 03:43:29.363 [140443190213432] DEBUG - Request: [172.22.0.1:41468 (Subnet)] GET /library/sections (2 live) #1c0 -Jun 04, 2026 03:43:29.363 [140443259251512] DEBUG - Completed: [172.22.0.1:41468] 200 GET /library/sections (2 live) #1c0 0ms 329 bytes (pipelined: 1) -Jun 04, 2026 03:43:29.384 [140443190213432] DEBUG - Request: [172.22.0.1:41474 (Subnet)] GET /updater/status (2 live) #1c3 -Jun 04, 2026 03:43:29.384 [140443261360952] DEBUG - Completed: [172.22.0.1:41474] 200 GET /updater/status (2 live) #1c3 0ms 334 bytes (pipelined: 1) -Jun 04, 2026 03:43:38.593 [140443190213432] DEBUG - Request: [172.22.0.1:60026 (Subnet)] GET /system/agents (2 live) #1c6 -Jun 04, 2026 03:43:38.594 [140443259251512] DEBUG - Completed: [172.22.0.1:60026] 200 GET /system/agents (2 live) #1c6 0ms 17417 bytes (pipelined: 1) -Jun 04, 2026 03:43:38.613 [140443190213432] DEBUG - Request: [172.22.0.1:60030 (Subnet)] GET /transcode/sessions (2 live) #1c9 -Jun 04, 2026 03:43:38.614 [140443259251512] DEBUG - Completed: [172.22.0.1:60030] 200 GET /transcode/sessions (2 live) #1c9 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:43:38.635 [140443190213432] DEBUG - Request: [172.22.0.1:60040 (Subnet)] GET /sync (2 live) #1cc -Jun 04, 2026 03:43:38.635 [140443261360952] DEBUG - Completed: [172.22.0.1:60040] 200 GET /sync (2 live) #1cc 0ms 311 bytes (pipelined: 1) -Jun 04, 2026 03:43:38.655 [140443190213432] DEBUG - Request: [172.22.0.1:60052 (Subnet)] GET /channels (2 live) #1cf -Jun 04, 2026 03:43:38.655 [140443259251512] DEBUG - Completed: [172.22.0.1:60052] 200 GET /channels (2 live) #1cf 0ms 388 bytes (pipelined: 1) -Jun 04, 2026 03:43:38.709 [140443190213432] DEBUG - Request: [[::1]:56630 (Loopback)] GET /identity (2 live) #1d2 -Jun 04, 2026 03:43:38.709 [140443259251512] DEBUG - Completed: [[::1]:56630] 200 GET /identity (2 live) #1d2 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:43:48.734 [140443190213432] DEBUG - Request: [[::1]:35684 (Loopback)] GET /identity (2 live) #1d5 -Jun 04, 2026 03:43:48.734 [140443261360952] DEBUG - Completed: [[::1]:35684] 200 GET /identity (2 live) #1d5 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:43:58.758 [140443190213432] DEBUG - Request: [[::1]:47054 (Loopback)] GET /identity (2 live) #1d8 -Jun 04, 2026 03:43:58.759 [140443259251512] DEBUG - Completed: [[::1]:47054] 200 GET /identity (2 live) #1d8 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:44:08.785 [140443190213432] DEBUG - Request: [[::1]:50588 (Loopback)] GET /identity (2 live) #1db -Jun 04, 2026 03:44:08.786 [140443261360952] DEBUG - Completed: [[::1]:50588] 200 GET /identity (2 live) #1db 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:44:18.814 [140443190213432] DEBUG - Request: [[::1]:53316 (Loopback)] GET /identity (2 live) #1de -Jun 04, 2026 03:44:18.814 [140443259251512] DEBUG - Completed: [[::1]:53316] 200 GET /identity (2 live) #1de 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:44:28.838 [140443190213432] DEBUG - Request: [[::1]:51820 (Loopback)] GET /identity (2 live) #1e1 -Jun 04, 2026 03:44:28.838 [140443259251512] DEBUG - Completed: [[::1]:51820] 200 GET /identity (2 live) #1e1 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:44:38.863 [140443190213432] DEBUG - Request: [[::1]:40170 (Loopback)] GET /identity (2 live) #1e4 -Jun 04, 2026 03:44:38.863 [140443261360952] DEBUG - Completed: [[::1]:40170] 200 GET /identity (2 live) #1e4 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:44:48.889 [140443190213432] DEBUG - Request: [[::1]:42750 (Loopback)] GET /identity (2 live) #1e7 -Jun 04, 2026 03:44:48.889 [140443261360952] DEBUG - Completed: [[::1]:42750] 200 GET /identity (2 live) #1e7 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.382 [140443190213432] DEBUG - Request: [172.22.0.1:36318 (Subnet)] GET / (2 live) #1ea -Jun 04, 2026 03:44:49.382 [140443261360952] DEBUG - Completed: [172.22.0.1:36318] 200 GET / (2 live) #1ea 0ms 5131 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.387 [140443190213432] DEBUG - Request: [172.22.0.1:36322 (Subnet)] GET /identity (2 live) #1ed -Jun 04, 2026 03:44:49.387 [140443259251512] DEBUG - Completed: [172.22.0.1:36322] 200 GET /identity (2 live) #1ed 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.391 [140443190213432] DEBUG - Request: [172.22.0.1:36334 (Subnet)] GET /library (2 live) #1f0 -Jun 04, 2026 03:44:49.391 [140443259251512] DEBUG - Completed: [172.22.0.1:36334] 200 GET /library (2 live) #1f0 0ms 670 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.395 [140443190213432] DEBUG - Request: [172.22.0.1:36344 (Subnet)] GET /library/sections (2 live) #1f3 -Jun 04, 2026 03:44:49.395 [140443259251512] DEBUG - Completed: [172.22.0.1:36344] 200 GET /library/sections (2 live) #1f3 0ms 329 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.399 [140443190213432] DEBUG - Request: [172.22.0.1:36346 (Subnet)] GET /library/sections/all (2 live) #1f6 -Jun 04, 2026 03:44:49.399 [140443259251512] DEBUG - Completed: [172.22.0.1:36346] 200 GET /library/sections/all (2 live) #1f6 0ms 329 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.402 [140443190213432] DEBUG - Request: [172.22.0.1:36348 (Subnet)] GET /status/sessions (2 live) #1f9 -Jun 04, 2026 03:44:49.402 [140443190213432] DEBUG - [Req#1f9] [Now] Adding 0 sessions. -Jun 04, 2026 03:44:49.402 [140443261360952] DEBUG - Completed: [172.22.0.1:36348] 200 GET /status/sessions (2 live) #1f9 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.406 [140443190213432] DEBUG - Request: [172.22.0.1:36354 (Subnet)] GET /accounts (2 live) #1fc -Jun 04, 2026 03:44:49.406 [140443261360952] DEBUG - Completed: [172.22.0.1:36354] 200 GET /accounts (2 live) #1fc 0ms 493 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.409 [140443190213432] DEBUG - Request: [172.22.0.1:36360 (Subnet)] GET /devices (2 live) #1ff -Jun 04, 2026 03:44:49.409 [140443261360952] DEBUG - Completed: [172.22.0.1:36360] 200 GET /devices (2 live) #1ff 0ms 414 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.413 [140443190213432] DEBUG - Request: [172.22.0.1:36376 (Subnet)] GET /clients (2 live) #202 -Jun 04, 2026 03:44:49.413 [140443261360952] DEBUG - Completed: [172.22.0.1:36376] 200 GET /clients (2 live) #202 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.416 [140443190213432] DEBUG - Request: [172.22.0.1:36392 (Subnet)] GET /servers (2 live) #205 -Jun 04, 2026 03:44:49.416 [140443259251512] DEBUG - Completed: [172.22.0.1:36392] 200 GET /servers (2 live) #205 0ms 470 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.419 [140443190213432] DEBUG - Request: [172.22.0.1:36406 (Subnet)] GET /playlists (2 live) #208 -Jun 04, 2026 03:44:49.420 [140443261360952] DEBUG - Completed: [172.22.0.1:36406] 200 GET /playlists (2 live) #208 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.423 [140443190213432] DEBUG - Request: [172.22.0.1:36410 (Subnet)] GET /butler (2 live) #20b -Jun 04, 2026 03:44:49.423 [140443259251512] DEBUG - Completed: [172.22.0.1:36410] 200 GET /butler (2 live) #20b 0ms 2509 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.426 [140443190213432] DEBUG - Request: [172.22.0.1:36414 (Subnet)] GET /activities (2 live) #20e -Jun 04, 2026 03:44:49.426 [140443259251512] DEBUG - Completed: [172.22.0.1:36414] 200 GET /activities (2 live) #20e 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.430 [140443190213432] DEBUG - Request: [172.22.0.1:36420 (Subnet)] GET /updater/status (2 live) #211 -Jun 04, 2026 03:44:49.430 [140443261360952] DEBUG - Completed: [172.22.0.1:36420] 200 GET /updater/status (2 live) #211 0ms 334 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.433 [140443190213432] DEBUG - Request: [172.22.0.1:36424 (Subnet)] GET /system/agents (2 live) #214 -Jun 04, 2026 03:44:49.433 [140443259251512] DEBUG - Completed: [172.22.0.1:36424] 200 GET /system/agents (2 live) #214 0ms 17417 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.437 [140443190213432] DEBUG - Request: [172.22.0.1:36426 (Subnet)] GET /sync (2 live) #217 -Jun 04, 2026 03:44:49.437 [140443261360952] DEBUG - Completed: [172.22.0.1:36426] 200 GET /sync (2 live) #217 0ms 311 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.440 [140443190213432] DEBUG - Request: [172.22.0.1:36430 (Subnet)] GET /channels (2 live) #21a -Jun 04, 2026 03:44:49.440 [140443259251512] DEBUG - Completed: [172.22.0.1:36430] 200 GET /channels (2 live) #21a 0ms 388 bytes (pipelined: 1) -Jun 04, 2026 03:44:49.444 [140443190213432] DEBUG - Request: [172.22.0.1:36442 (Subnet)] GET /transcode/sessions (2 live) #21d -Jun 04, 2026 03:44:49.444 [140443261360952] DEBUG - Completed: [172.22.0.1:36442] 200 GET /transcode/sessions (2 live) #21d 0ms 292 bytes (pipelined: 1) -Jun 04, 2026 03:44:58.914 [140443190213432] DEBUG - Request: [[::1]:48604 (Loopback)] GET /identity (2 live) #220 -Jun 04, 2026 03:44:58.914 [140443259251512] DEBUG - Completed: [[::1]:48604] 200 GET /identity (2 live) #220 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:45:08.941 [140443190213432] DEBUG - Request: [[::1]:53484 (Loopback)] GET /identity (2 live) #223 -Jun 04, 2026 03:45:08.941 [140443259251512] DEBUG - Completed: [[::1]:53484] 200 GET /identity (2 live) #223 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:45:18.968 [140443190213432] DEBUG - Request: [[::1]:34716 (Loopback)] GET /identity (2 live) #226 -Jun 04, 2026 03:45:18.968 [140443261360952] DEBUG - Completed: [[::1]:34716] 200 GET /identity (2 live) #226 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:45:28.994 [140443190213432] DEBUG - Request: [[::1]:53400 (Loopback)] GET /identity (2 live) #229 -Jun 04, 2026 03:45:28.994 [140443259251512] DEBUG - Completed: [[::1]:53400] 200 GET /identity (2 live) #229 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:45:39.021 [140443190213432] DEBUG - Request: [[::1]:56074 (Loopback)] GET /identity (2 live) #22c -Jun 04, 2026 03:45:39.021 [140443261360952] DEBUG - Completed: [[::1]:56074] 200 GET /identity (2 live) #22c 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:45:49.045 [140443190213432] DEBUG - Request: [[::1]:36144 (Loopback)] GET /identity (2 live) #22f -Jun 04, 2026 03:45:49.045 [140443259251512] DEBUG - Completed: [[::1]:36144] 200 GET /identity (2 live) #22f 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:45:59.070 [140443190213432] DEBUG - Request: [[::1]:47838 (Loopback)] GET /identity (2 live) #232 -Jun 04, 2026 03:45:59.070 [140443261360952] DEBUG - Completed: [[::1]:47838] 200 GET /identity (2 live) #232 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:46:09.095 [140443190213432] DEBUG - Request: [[::1]:38150 (Loopback)] GET /identity (2 live) #235 -Jun 04, 2026 03:46:09.095 [140443261360952] DEBUG - Completed: [[::1]:38150] 200 GET /identity (2 live) #235 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:46:15.233 [140443219913528] DEBUG - Butler: we're in the window, starting. -Jun 04, 2026 03:46:15.233 [140443219913528] DEBUG - Butler: Waking up! -Jun 04, 2026 03:46:15.233 [140443219913528] DEBUG - Butler: Scheduling randomized task 'RefreshEpgGuides' in 40 minutes. -Jun 04, 2026 03:46:15.233 [140443219913528] DEBUG - Butler: Scheduling randomized task 'RefreshPeriodicMetadata' in 68 minutes. -Jun 04, 2026 03:46:15.233 [140443219913528] DEBUG - Butler: Scheduling randomized task 'ButlerTaskGenerateCreditsMarkers' in 13 minutes. -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - Activity: registered new activity 4221855c-8f07-4471-b01c-a13f5266c301 - "Butler tasks" -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - Activity: registered new activity 4362e8a9-7ee7-48d0-9d8d-f9b59b3ff4f7 - "Optimizing database" -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Optimizing database. Starting by capturing all sessions. -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Activity: updated activity 4362e8a9-7ee7-48d0-9d8d-f9b59b3ff4f7 - completed 0.0% - Optimizing database -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Activity: updated activity 4362e8a9-7ee7-48d0-9d8d-f9b59b3ff4f7 - completed 10.0% - Optimizing database -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups] Running fix-ups. -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/42DatabaseFixupsGarbageCollectTransientItems] Executing fixup -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/42DatabaseFixupsGarbageCollectTransientItems] Destroyed 0 transient items. -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/42DatabaseFixupsGarbageCollectTransientItems] Fixup completed -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/41DatabaseFixupsDeleteUnusedTagsAndTaggings] Executing fixup -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/41DatabaseFixupsDeleteUnusedTagsAndTaggings] Fixup completed -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/33DatabaseFixupsDeleteEmptyClusters] Executing fixup -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/33DatabaseFixupsDeleteEmptyClusters] Fixup completed -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/35DatabaseFixupsDeleteOrphanLocations] Executing fixup -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/35DatabaseFixupsDeleteOrphanLocations] Fixup completed -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/31DatabaseFixupsCleanupStatistics] Executing fixup -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/31DatabaseFixupsCleanupStatistics] Fixup completed -Jun 04, 2026 03:46:15.234 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/35DatabaseFixupsConsolidatePeopleTags] Executing fixup -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/35DatabaseFixupsConsolidatePeopleTags] Fixup completed -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/34DatabaseFixupsRemoveRelatedOrphans] Executing fixup -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups/34DatabaseFixupsRemoveRelatedOrphans] Fixup completed -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db/DatabaseFixups] Running database fix-ups completed in 0.0 seconds. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 0. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 1. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 2. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 3. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 4. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 5. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 6. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 7. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 8. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 9. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 10. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 11. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 12. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 13. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 14. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 15. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 16. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 17. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 18. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Captured session 19. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Rebuilding full text search tables. -Jun 04, 2026 03:46:15.235 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Activity: updated activity 4362e8a9-7ee7-48d0-9d8d-f9b59b3ff4f7 - completed 40.0% - Optimizing database -Jun 04, 2026 03:46:15.236 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Database optimization: starting. -Jun 04, 2026 03:46:15.237 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Activity: updated activity 4362e8a9-7ee7-48d0-9d8d-f9b59b3ff4f7 - completed 60.0% - Optimizing database -Jun 04, 2026 03:46:15.258 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Database optimization: complete. -Jun 04, 2026 03:46:15.259 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.260 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.260 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.261 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.262 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.263 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.263 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.264 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.265 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.266 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.266 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.267 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.268 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.268 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.269 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.270 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.270 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.271 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.272 [140443251936056] INFO - [Database optimization/com.plexapp.plugins.library.db] SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - [Database optimization/com.plexapp.plugins.library.db] Activity: Ended activity 4362e8a9-7ee7-48d0-9d8d-f9b59b3ff4f7. -Jun 04, 2026 03:46:15.274 [140443251936056] INFO - Running migrations. (EPG 0) -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 0. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 1. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 2. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 3. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 4. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 5. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 6. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 7. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 8. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 9. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 10. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 11. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 12. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 13. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 14. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 15. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 16. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 17. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 18. -Jun 04, 2026 03:46:15.274 [140443251936056] DEBUG - Captured session 19. -Jun 04, 2026 03:46:15.275 [140443251936056] INFO - Running forward migration 20210207150001. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 0. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 1. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 2. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 3. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 4. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 5. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 6. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 7. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 8. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 9. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 10. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 11. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 12. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 13. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 14. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 15. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 16. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 17. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 18. -Jun 04, 2026 03:46:15.275 [140443251936056] DEBUG - Captured session 19. -Jun 04, 2026 03:46:15.276 [140443251936056] INFO - Completed forward migration 20210207150001. -Jun 04, 2026 03:46:15.276 [140443251936056] INFO - Running forward migration 20210207150002. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 0. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 1. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 2. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 3. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 4. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 5. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 6. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 7. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 8. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 9. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 10. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 11. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 12. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 13. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 14. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 15. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 16. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 17. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 18. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 19. -Jun 04, 2026 03:46:15.276 [140443251936056] INFO - Completed forward migration 20210207150002. -Jun 04, 2026 03:46:15.276 [140443251936056] INFO - Running forward migration 20210207150000. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 0. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 1. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 2. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 3. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 4. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 5. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 6. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 7. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 8. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 9. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 10. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 11. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 12. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 13. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 14. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 15. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 16. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 17. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 18. -Jun 04, 2026 03:46:15.276 [140443251936056] DEBUG - Captured session 19. -Jun 04, 2026 03:46:15.277 [140443251936056] INFO - Completed forward migration 20210207150000. -Jun 04, 2026 03:46:15.277 [140443251936056] INFO - Running forward migration 202302020000. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 0. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 1. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 2. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 3. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 4. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 5. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 6. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 7. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 8. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 9. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 10. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 11. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 12. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 13. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 14. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 15. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 16. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 17. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 18. -Jun 04, 2026 03:46:15.277 [140443251936056] DEBUG - Captured session 19. -Jun 04, 2026 03:46:15.278 [140443251936056] INFO - Completed forward migration 202302020000. -Jun 04, 2026 03:46:15.278 [140443251936056] INFO - Running forward migration 202505261219. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 0. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 1. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 2. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 3. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 4. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 5. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 6. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 7. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 8. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 9. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 10. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 11. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 12. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 13. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 14. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 15. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 16. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 17. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 18. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 19. -Jun 04, 2026 03:46:15.278 [140443251936056] INFO - Completed forward migration 202505261219. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 0. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 1. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 2. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 3. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 4. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 5. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 6. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 7. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 8. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 9. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 10. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 11. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 12. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 13. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 14. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 15. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 16. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 17. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 18. -Jun 04, 2026 03:46:15.278 [140443251936056] DEBUG - Captured session 19. -Jun 04, 2026 03:46:15.278 [140443251936056] INFO - Analyzing database. -Jun 04, 2026 03:46:15.279 [140443251936056] INFO - Vacuuming database. -Jun 04, 2026 03:46:15.289 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.290 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.291 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.291 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.292 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.293 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.294 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.295 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.296 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.297 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.298 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.298 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.299 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.300 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.301 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.301 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.302 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.303 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.304 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.304 [140443251936056] DEBUG - Butler: optimized your database -Jun 04, 2026 03:46:15.304 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 21: [UPDATE activities SET `finished_at`=:U1 WHERE `id`=:C1] database schema has changed -Jun 04, 2026 03:46:15.304 [140443251936056] DEBUG - Blob Database: Collecting garbage. -Jun 04, 2026 03:46:15.304 [140443251936056] DEBUG - Blob Database: No garbage blobs found to collect in 0.0 sec. -Jun 04, 2026 03:46:15.304 [140443251936056] DEBUG - Captured session 0. -Jun 04, 2026 03:46:15.304 [140443251936056] DEBUG - Captured session 1. -Jun 04, 2026 03:46:15.334 [140443251936056] INFO - SQLITE3:0x80000001, 17, statement aborts at 63: [select * from metadata_items limit 1] database schema has changed -Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - Activity: registered new activity 12fc75e1-fd1d-430b-9b47-6b36db71a2bf - "Cleaning Bundles" -Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - Activity: updated activity 12fc75e1-fd1d-430b-9b47-6b36db71a2bf - completed -1.0% - Cleaning Bundles -Jun 04, 2026 03:46:15.335 [140443251936056] ERROR - Error cleaning media bundles: boost::filesystem::directory_iterator::construct: No such file or directory [system:2]: "/config/Library/Application Support/Plex Media Server/Media/localhost" -Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - Deleted 0 media bundles. -Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - The butler cleaned 0 media bundles. -Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - Activity: updated activity 12fc75e1-fd1d-430b-9b47-6b36db71a2bf - completed -1.0% - Cleaning Bundles -Jun 04, 2026 03:46:15.335 [140443251936056] ERROR - Error cleaning metadata bundles: boost::filesystem::directory_iterator::construct: No such file or directory [system:2]: "/config/Library/Application Support/Plex Media Server/Metadata" -Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - Deleted 0 metadata bundles. -Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - The butler cleaned 0 metadata bundles. -Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - Activity: Ended activity 12fc75e1-fd1d-430b-9b47-6b36db71a2bf. -Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - The butler looked at 0 cache files and deleted 0 of them. -Jun 04, 2026 03:46:15.335 [140443251936056] DEBUG - The butler looked at 0 diagnostic files and deleted 0 of them. -Jun 04, 2026 03:46:15.336 [140443251936056] ERROR - Butler: Uncaught exception starting generator UpgradeMediaAnalysis: Vectors of size 0 are not allowed. -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: registered new sub-activity 94d95f0a-38a3-43e0-b5b4-b7137ba070f1 - "OptimizeDatabase" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 0.0% (0/1) -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: ended sub-activity 94d95f0a-38a3-43e0-b5b4-b7137ba070f1 parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (1/1) -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Butler: Computed a set of 0 audio tracks to get loudness analysis in 0ms. -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: registered new sub-activity 1d7bb558-fffd-403b-bd91-ec3ec67a75a1 - "GarbageCollectBlobs" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 50.0% (1/2) -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 50.0% - Butler tasks -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: ended sub-activity 1d7bb558-fffd-403b-bd91-ec3ec67a75a1 parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (2/2) -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: registered new sub-activity a98fd856-5fb3-4268-a50f-bcd77757b2d2 - "CleanOldBundles" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 66.7% (2/3) -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 66.7% - Butler tasks -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: ended sub-activity a98fd856-5fb3-4268-a50f-bcd77757b2d2 parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (3/3) -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: registered new sub-activity 18b502fd-b43a-4588-ac72-f614c4065f7c - "CleanOldCacheFiles" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 75.0% (3/4) -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 75.0% - Butler tasks -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: ended sub-activity 18b502fd-b43a-4588-ac72-f614c4065f7c parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (4/4) -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: registered new sub-activity 30825734-2ca4-4ef5-8a90-db8e39481a8d - "GenerateChapterThumbs" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 80.0% (4/5) -Jun 04, 2026 03:46:15.336 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 80.0% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity 30825734-2ca4-4ef5-8a90-db8e39481a8d parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (5/5) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - The butler generated chapter thumbnails for 0 files -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: registered new sub-activity 22864c6a-1d38-4c2f-984b-cdc2d0abebdd - "MusicAnalysis" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 83.3% (5/6) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 83.3% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity 22864c6a-1d38-4c2f-984b-cdc2d0abebdd parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (6/6) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Butler: Performed sonic analysis on 0 batches of albums. -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: registered new sub-activity e4f3ddc1-1078-43d2-9f5a-0f390e566cbd - "ProcessAssets" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 85.7% (6/7) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 85.7% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity e4f3ddc1-1078-43d2-9f5a-0f390e566cbd parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (7/7) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - The butler processed 0 assets. -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: registered new sub-activity f99f7498-f2e8-426a-a9c3-74c795007aee - "ButlerTaskGenerateIntroMarkers" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 87.5% (7/8) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 87.5% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity f99f7498-f2e8-426a-a9c3-74c795007aee parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (8/8) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: registered new sub-activity df2dc948-42fa-47d5-a63a-a815ad79283e - "LoudnessAnalysis" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 88.9% (8/9) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 88.9% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity df2dc948-42fa-47d5-a63a-a815ad79283e parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (9/9) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - The butler performed loudness analysis on 0 albums. -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: registered new sub-activity 42b03973-7eeb-49a8-ab0c-7c41f9f6d634 - "DeepMediaAnalysis" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 90.0% (9/10) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 90.0% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity 42b03973-7eeb-49a8-ab0c-7c41f9f6d634 parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (10/10) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - The butler performed deep analysis on 0 files -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: registered new sub-activity 8fbf9bb1-f265-4af3-965e-1d65712035f7 - "GarbageCollectLibraryMedia" parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 90.9% (10/11) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 90.9% - Butler tasks -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: ended sub-activity 8fbf9bb1-f265-4af3-965e-1d65712035f7 parent: 4221855c-8f07-4471-b01c-a13f5266c301 overall progress: 100.0% (11/11) -Jun 04, 2026 03:46:15.337 [140443251936056] DEBUG - Activity: updated activity 4221855c-8f07-4471-b01c-a13f5266c301 - completed 100.0% - Butler tasks -Jun 04, 2026 03:46:15.467 [140443219913528] DEBUG - [HCl#7d] HTTP requesting GET https://plex.tv/api/v2/features?X-Plex-Token= -Jun 04, 2026 03:46:15.643 [140443243293496] DEBUG - [HttpClient/HCl#7d] HTTP/1.1 (0.2s) 200 response from GET https://plex.tv/api/v2/features?X-Plex-Token= -Jun 04, 2026 03:46:15.644 [140443219913528] DEBUG - [HCl#7e] HTTP requesting GET https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 -Jun 04, 2026 03:46:15.690 [140443243293496] DEBUG - [HttpClient/HCl#7e] HTTP/1.1 (0.0s) 401 response from GET https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 (reused) -Jun 04, 2026 03:46:15.690 [140443222969144] ERROR - MyPlex: Error 401 requesting JSON from: https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5 -Jun 04, 2026 03:46:15.690 [140443219913528] WARN - FeatureManager: Couldn't get features. Trying again soon. -Jun 04, 2026 03:46:19.121 [140443190213432] DEBUG - Request: [[::1]:50226 (Loopback)] GET /identity (2 live) #238 -Jun 04, 2026 03:46:19.121 [140443259251512] DEBUG - Completed: [[::1]:50226] 200 GET /identity (2 live) #238 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:46:29.147 [140443190213432] DEBUG - Request: [[::1]:45878 (Loopback)] GET /identity (2 live) #23b -Jun 04, 2026 03:46:29.147 [140443259251512] DEBUG - Completed: [[::1]:45878] 200 GET /identity (2 live) #23b 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:46:32.323 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET / (2 live) #23e GZIP -Jun 04, 2026 03:46:32.323 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET / (2 live) #23e GZIP 0ms 2683 bytes (pipelined: 1) -Jun 04, 2026 03:46:32.530 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /identity (2 live) #242 GZIP -Jun 04, 2026 03:46:32.531 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /identity (2 live) #242 GZIP 0ms 487 bytes (pipelined: 2) -Jun 04, 2026 03:46:32.734 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library (2 live) #243 GZIP -Jun 04, 2026 03:46:32.734 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /library (2 live) #243 GZIP 0ms 597 bytes (pipelined: 3) -Jun 04, 2026 03:46:32.936 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library/sections (2 live) #244 GZIP -Jun 04, 2026 03:46:32.937 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /library/sections (2 live) #244 GZIP 0ms 432 bytes (pipelined: 4) -Jun 04, 2026 03:46:33.138 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library/sections/1/all (2 live) #245 GZIP -Jun 04, 2026 03:46:33.138 [140443190213432] WARN - [Req#245] Invalid library section ID 1 passed. -Jun 04, 2026 03:46:33.138 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /library/sections/1/all (2 live) #245 GZIP 0ms 379 bytes (pipelined: 5) -Jun 04, 2026 03:46:33.340 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library/sections/1/onDeck (2 live) #246 GZIP -Jun 04, 2026 03:46:33.340 [140443190213432] WARN - [Req#246] Invalid library section ID 1 passed. -Jun 04, 2026 03:46:33.340 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /library/sections/1/onDeck (2 live) #246 GZIP 0ms 379 bytes (pipelined: 6) -Jun 04, 2026 03:46:33.542 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library/sections/1/recentlyAdded (2 live) #247 GZIP -Jun 04, 2026 03:46:33.542 [140443190213432] WARN - [Req#247] Invalid library section ID 1 passed. -Jun 04, 2026 03:46:33.542 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 404 GET /library/sections/1/recentlyAdded (2 live) #247 GZIP 0ms 379 bytes (pipelined: 7) -Jun 04, 2026 03:46:33.743 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library/metadata/1 (2 live) #248 GZIP -Jun 04, 2026 03:46:33.744 [140443190213432] WARN - [Req#248] Invalid library metadata ID 1 passed. -Jun 04, 2026 03:46:33.744 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /library/metadata/1 (2 live) #248 GZIP 0ms 379 bytes (pipelined: 8) -Jun 04, 2026 03:46:33.944 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /library/metadata/1/children (2 live) #249 GZIP -Jun 04, 2026 03:46:33.944 [140443190213432] WARN - [Req#249] Invalid library metadata ID 1 passed. -Jun 04, 2026 03:46:33.944 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 404 GET /library/metadata/1/children (2 live) #249 GZIP 0ms 379 bytes (pipelined: 9) -Jun 04, 2026 03:46:34.145 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /status/sessions (2 live) #24a GZIP -Jun 04, 2026 03:46:34.145 [140443190213432] DEBUG - [Req#24a] [Now] Adding 0 sessions. -Jun 04, 2026 03:46:34.145 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /status/sessions (2 live) #24a GZIP 0ms 397 bytes (pipelined: 10) -Jun 04, 2026 03:46:34.346 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /status/sessions/history/all (2 live) #24b GZIP -Jun 04, 2026 03:46:34.346 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /status/sessions/history/all (2 live) #24b GZIP 0ms 397 bytes (pipelined: 11) -Jun 04, 2026 03:46:34.547 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /accounts (2 live) #24c GZIP -Jun 04, 2026 03:46:34.547 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /accounts (2 live) #24c GZIP 0ms 521 bytes (pipelined: 12) -Jun 04, 2026 03:46:34.748 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /devices (2 live) #24d GZIP -Jun 04, 2026 03:46:34.748 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /devices (2 live) #24d GZIP 0ms 483 bytes (pipelined: 13) -Jun 04, 2026 03:46:34.949 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /clients (2 live) #24e GZIP -Jun 04, 2026 03:46:34.950 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /clients (2 live) #24e GZIP 0ms 397 bytes (pipelined: 14) -Jun 04, 2026 03:46:35.151 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /servers (2 live) #24f GZIP -Jun 04, 2026 03:46:35.152 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /servers (2 live) #24f GZIP 0ms 519 bytes (pipelined: 15) -Jun 04, 2026 03:46:35.353 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /hubs/search (2 live) #250 GZIP -Jun 04, 2026 03:46:35.353 [140443190213432] ERROR - [Req#250] Missing required query parameter query -Jun 04, 2026 03:46:35.353 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 400 GET /hubs/search (2 live) #250 GZIP 0ms 384 bytes (pipelined: 16) -Jun 04, 2026 03:46:35.554 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /playlists (2 live) #251 GZIP -Jun 04, 2026 03:46:35.555 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /playlists (2 live) #251 GZIP 0ms 397 bytes (pipelined: 17) -Jun 04, 2026 03:46:35.755 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /butler (2 live) #252 GZIP -Jun 04, 2026 03:46:35.756 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /butler (2 live) #252 GZIP 0ms 799 bytes (pipelined: 18) -Jun 04, 2026 03:46:35.957 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /activities (2 live) #253 GZIP -Jun 04, 2026 03:46:35.957 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /activities (2 live) #253 GZIP 0ms 513 bytes (pipelined: 19) -Jun 04, 2026 03:46:36.158 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /updater/status (2 live) #254 GZIP -Jun 04, 2026 03:46:36.158 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /updater/status (2 live) #254 GZIP 0ms 433 bytes (pipelined: 20) -Jun 04, 2026 03:46:36.359 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /system/agents (2 live) #255 GZIP -Jun 04, 2026 03:46:36.360 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /system/agents (2 live) #255 GZIP 0ms 1917 bytes (pipelined: 21) -Jun 04, 2026 03:46:36.561 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /system/settings (2 live) #256 GZIP -Jun 04, 2026 03:46:36.561 [140443190213432] DEBUG - [Req#256] [com.plexapp.system] Sending command over HTTP (GET): /system/settings -Jun 04, 2026 03:46:36.561 [140443190213432] DEBUG - [Req#256/HCl#7f] HTTP requesting GET http://127.0.0.1:33755/system/settings -Jun 04, 2026 03:46:36.564 [140443243293496] DEBUG - [HttpClient/HCl#7f] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/system/settings -Jun 04, 2026 03:46:36.564 [140443190213432] DEBUG - [Req#256] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:46:36.564 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 404 GET /system/settings (2 live) #256 GZIP 3ms 177 bytes (pipelined: 22) -Jun 04, 2026 03:46:36.765 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /system/updates (2 live) #257 GZIP -Jun 04, 2026 03:46:36.765 [140443190213432] DEBUG - [Req#257] [com.plexapp.system] Sending command over HTTP (GET): /system/updates -Jun 04, 2026 03:46:36.765 [140443190213432] DEBUG - [Req#257/HCl#80] HTTP requesting GET http://127.0.0.1:33755/system/updates -Jun 04, 2026 03:46:36.766 [140443243293496] DEBUG - [HttpClient/HCl#80] HTTP/1.1 (0.0s) 404 response from GET http://127.0.0.1:33755/system/updates (reused) -Jun 04, 2026 03:46:36.766 [140443190213432] DEBUG - [Req#257] [com.plexapp.system] HTTP reply status 404, with 0 bytes of content. -Jun 04, 2026 03:46:36.766 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /system/updates (2 live) #257 GZIP 1ms 177 bytes (pipelined: 23) -Jun 04, 2026 03:46:36.966 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /statistics/bandwidth (2 live) #258 GZIP -Jun 04, 2026 03:46:36.967 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 404 GET /statistics/bandwidth (2 live) #258 GZIP 0ms 379 bytes (pipelined: 24) -Jun 04, 2026 03:46:37.168 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /statistics/resources (2 live) #259 GZIP -Jun 04, 2026 03:46:37.168 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /statistics/resources (2 live) #259 GZIP 0ms 379 bytes (pipelined: 25) -Jun 04, 2026 03:46:37.369 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /diagnostics (2 live) #25a GZIP -Jun 04, 2026 03:46:37.369 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /diagnostics (2 live) #25a GZIP 0ms 416 bytes (pipelined: 26) -Jun 04, 2026 03:46:37.570 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /sync (2 live) #25b GZIP -Jun 04, 2026 03:46:37.570 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /sync (2 live) #25b GZIP 0ms 416 bytes (pipelined: 27) -Jun 04, 2026 03:46:37.771 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /sync/items (2 live) #25c GZIP -Jun 04, 2026 03:46:37.771 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 404 GET /sync/items (2 live) #25c GZIP 0ms 379 bytes (pipelined: 28) -Jun 04, 2026 03:46:37.972 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /sync/queue (2 live) #25d GZIP -Jun 04, 2026 03:46:37.972 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /sync/queue (2 live) #25d GZIP 0ms 379 bytes (pipelined: 29) -Jun 04, 2026 03:46:38.173 [140443190213432] INFO - Request: [172.22.0.1:58442 (Subnet)] GET /services/browse (2 live) #25e GZIP -Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: overlay Path: / Name: overlay -Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: cgroup2 Path: /sys/fs/cgroup Name: cgroup -Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: mqueue Path: /dev/mqueue Name: mqueue -Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: btrfs Path: /config Name: /dev/mapper/root -Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: btrfs Path: /transcode Name: /dev/mapper/root -Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: btrfs Path: /data/media Name: /dev/mapper/root -Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: btrfs Path: /etc/resolv.conf Name: /dev/mapper/root -Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: btrfs Path: /etc/hostname Name: /dev/mapper/root -Jun 04, 2026 03:46:38.173 [140443190213432] DEBUG - [Req#25e] Filesystem Type: btrfs Path: /etc/hosts Name: /dev/mapper/root -Jun 04, 2026 03:46:38.173 [140443261360952] INFO - Completed: [172.22.0.1:58442] 200 GET /services/browse (2 live) #25e GZIP 0ms 615 bytes (pipelined: 30) -Jun 04, 2026 03:46:38.374 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /media/grabbers (2 live) #25f GZIP -Jun 04, 2026 03:46:38.375 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /media/grabbers (2 live) #25f GZIP 0ms 516 bytes (pipelined: 31) -Jun 04, 2026 03:46:38.576 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /livetv/dvrs (2 live) #260 GZIP -Jun 04, 2026 03:46:38.576 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /livetv/dvrs (2 live) #260 GZIP 0ms 397 bytes (pipelined: 32) -Jun 04, 2026 03:46:38.777 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /livetv/epg (2 live) #261 GZIP -Jun 04, 2026 03:46:38.777 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 404 GET /livetv/epg (2 live) #261 GZIP 0ms 379 bytes (pipelined: 33) -Jun 04, 2026 03:46:38.978 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /channels (2 live) #262 GZIP -Jun 04, 2026 03:46:38.978 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 200 GET /channels (2 live) #262 GZIP 0ms 454 bytes (pipelined: 34) -Jun 04, 2026 03:46:39.172 [140443190213432] DEBUG - Request: [[::1]:49890 (Loopback)] GET /identity (3 live) #241 -Jun 04, 2026 03:46:39.172 [140443259251512] DEBUG - Completed: [[::1]:49890] 200 GET /identity (3 live) #241 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:46:39.180 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /player/timeline/poll (2 live) #263 GZIP -Jun 04, 2026 03:46:39.180 [140443190213432] ERROR - [Req#263/CompanionProxy] Missing required query parameter commandID -Jun 04, 2026 03:46:39.180 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 400 GET /player/timeline/poll (2 live) #263 GZIP 0ms 384 bytes (pipelined: 35) -Jun 04, 2026 03:46:39.381 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /player/playback/playMedia (2 live) #267 GZIP -Jun 04, 2026 03:46:39.381 [140443190213432] ERROR - [Req#267/CompanionProxy] Missing required path parameter X-Plex-Target-Client-Identifier -Jun 04, 2026 03:46:39.381 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 400 GET /player/playback/playMedia (2 live) #267 GZIP 0ms 384 bytes (pipelined: 36) -Jun 04, 2026 03:46:39.582 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /transcode/sessions (2 live) #268 GZIP -Jun 04, 2026 03:46:39.582 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 200 GET /transcode/sessions (2 live) #268 GZIP 0ms 397 bytes (pipelined: 37) -Jun 04, 2026 03:46:39.783 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /security/resources (2 live) #269 GZIP -Jun 04, 2026 03:46:39.783 [140443190213432] ERROR - [Req#269] Missing required query parameter source -Jun 04, 2026 03:46:39.783 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 400 GET /security/resources (2 live) #269 GZIP 0ms 384 bytes (pipelined: 38) -Jun 04, 2026 03:46:39.984 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /security/token (2 live) #26a GZIP -Jun 04, 2026 03:46:39.984 [140443190213432] ERROR - [Req#26a] Missing required query parameter type -Jun 04, 2026 03:46:39.985 [140443259251512] DEBUG - Completed: [172.22.0.1:58442] 400 GET /security/token (2 live) #26a GZIP 0ms 384 bytes (pipelined: 39) -Jun 04, 2026 03:46:40.185 [140443190213432] DEBUG - Request: [172.22.0.1:58442 (Subnet)] GET /downloadQueue (2 live) #26b GZIP -Jun 04, 2026 03:46:40.186 [140443261360952] DEBUG - Completed: [172.22.0.1:58442] 404 GET /downloadQueue (2 live) #26b GZIP 0ms 379 bytes (pipelined: 40) -Jun 04, 2026 03:46:49.198 [140443190213432] DEBUG - Request: [[::1]:47346 (Loopback)] GET /identity (2 live) #264 -Jun 04, 2026 03:46:49.198 [140443259251512] DEBUG - Completed: [[::1]:47346] 200 GET /identity (2 live) #264 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:46:59.224 [140443190213432] DEBUG - Request: [[::1]:37454 (Loopback)] GET /identity (2 live) #26e -Jun 04, 2026 03:46:59.224 [140443259251512] DEBUG - Completed: [[::1]:37454] 200 GET /identity (2 live) #26e 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:47:09.250 [140443190213432] DEBUG - Request: [[::1]:38560 (Loopback)] GET /identity (2 live) #271 -Jun 04, 2026 03:47:09.250 [140443261360952] DEBUG - Completed: [[::1]:38560] 200 GET /identity (2 live) #271 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:47:19.276 [140443190213432] DEBUG - Request: [[::1]:52162 (Loopback)] GET /identity (2 live) #274 -Jun 04, 2026 03:47:19.276 [140443259251512] DEBUG - Completed: [[::1]:52162] 200 GET /identity (2 live) #274 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:47:29.301 [140443190213432] DEBUG - Request: [[::1]:59458 (Loopback)] GET /identity (2 live) #277 -Jun 04, 2026 03:47:29.301 [140443261360952] DEBUG - Completed: [[::1]:59458] 200 GET /identity (2 live) #277 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:47:39.326 [140443190213432] DEBUG - Request: [[::1]:52286 (Loopback)] GET /identity (2 live) #27a -Jun 04, 2026 03:47:39.326 [140443259251512] DEBUG - Completed: [[::1]:52286] 200 GET /identity (2 live) #27a 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:47:49.351 [140443190213432] DEBUG - Request: [[::1]:43716 (Loopback)] GET /identity (2 live) #27d -Jun 04, 2026 03:47:49.352 [140443259251512] DEBUG - Completed: [[::1]:43716] 200 GET /identity (2 live) #27d 0ms 418 bytes (pipelined: 1) -Jun 04, 2026 03:47:58.331 [140443269335864] DEBUG - Shutting down with signal 15 (Terminated) -Jun 04, 2026 03:47:58.331 [140443269335864] DEBUG - Ordered to stop server. -Jun 04, 2026 03:47:58.331 [140443274078864] DEBUG - Stopping server... -Jun 04, 2026 03:47:58.331 [140443274078864] DEBUG - HttpServer: Stopping server. -Jun 04, 2026 03:47:58.331 [140443234695992] DEBUG - TranscodeJobManager: [Running] onServerShutdown -Jun 04, 2026 03:47:58.331 [140443234695992] DEBUG - TranscodeJobManager: [Running] -> [Shutdown] -Jun 04, 2026 03:47:58.331 [140443259251512] DEBUG - MetadataItemClusterRequestHandler: a shutdown event has been received -Jun 04, 2026 03:47:58.331 [140443274078864] DEBUG - Server stopped. -Jun 04, 2026 03:47:58.331 [140443274078864] DEBUG - NetworkService: Stopping advertisement. -Jun 04, 2026 03:47:58.331 [140443236805432] ERROR - Network Service: Error in advertiser handle read: 125 (Operation canceled) socket=66 -Jun 04, 2026 03:47:58.331 [140443274078864] DEBUG - Killing plug-ins. -Jun 04, 2026 03:47:58.335 [140443274078864] DEBUG - [com.plexapp.agents.localmedia] Killing. -Jun 04, 2026 03:47:58.338 [140443274078864] DEBUG - [org.musicbrainz.agents.music] Killing. -Jun 04, 2026 03:47:58.338 [140443269335864] WARN - JobManager: Could not find job for handle 755 -Jun 04, 2026 03:47:58.339 [140443274078864] DEBUG - [com.plexapp.agents.imdb] Killing. -Jun 04, 2026 03:47:58.340 [140443274078864] DEBUG - [com.plexapp.agents.plexthememusic] Killing. -Jun 04, 2026 03:47:58.340 [140443269335864] WARN - JobManager: Could not find job for handle 505 -Jun 04, 2026 03:47:58.341 [140443274078864] DEBUG - [com.plexapp.system] Killing. -Jun 04, 2026 03:47:58.341 [140443274078864] DEBUG - [com.plexapp.agents.themoviedb] Killing. -Jun 04, 2026 03:47:58.342 [140443269335864] WARN - JobManager: Could not find job for handle 608 -Jun 04, 2026 03:47:58.342 [140443274078864] DEBUG - [com.plexapp.agents.thetvdb] Killing. -Jun 04, 2026 03:47:58.342 [140443269335864] WARN - JobManager: Could not find job for handle 726 -Jun 04, 2026 03:47:58.343 [140443274078864] DEBUG - ChildProcessMonitor: Waiting for Plex Tuner Service to exit. -Jun 04, 2026 03:47:58.343 [140443274078864] DEBUG - [JobRunner] Signalling job ID 341 with 2 -Jun 04, 2026 03:47:58.344 [140443269335864] WARN - JobManager: Could not find job for handle 293 -Jun 04, 2026 03:47:58.344 [140443269335864] WARN - JobManager: Could not find job for handle 576 -Jun 04, 2026 03:47:58.345 [140443269335864] WARN - JobManager: Could not find job for handle 660 -Jun 04, 2026 03:47:58.354 [140443269335864] DEBUG - Jobs: '/usr/lib/plexmediaserver/Plex Tuner Service' exit code for process 341 is 0 (success) -Jun 04, 2026 03:47:58.354 [140443232586552] DEBUG - [ChildProcessMonitor] Plex Tuner Service exited. -Jun 04, 2026 03:47:58.354 [140443274078864] DEBUG - Database: Shutting down. -Jun 04, 2026 03:47:58.361 [140443274078864] DEBUG - Database: Shutting down. diff --git a/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Tuner Service.log b/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Tuner Service.log deleted file mode 100644 index e68b0f094..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Logs/Plex Tuner Service.log +++ /dev/null @@ -1,27 +0,0 @@ -Jun 04, 2026 03:41:15.239 [0x7f5cfac7eb38] INFO - Plex Tuner Service v1.43.2.10687-563d026ea - Docker Docker Container x86_64 - build: -Jun 04, 2026 03:41:15.240 [0x7f5cfac7eb38] INFO - Linux version: 7.0.10-arch1-1 (#1 SMP PREEMPT_DYNAMIC Sat, 23 May 2026 14:21:20 +0000), language: en-US -Jun 04, 2026 03:41:15.240 [0x7f5cfac7eb38] INFO - Processor AMD Ryzen 9 7950X3D 16-Core Processor -Jun 04, 2026 03:41:15.240 [0x7f5cfac7eb38] INFO - /usr/lib/plexmediaserver/Plex Tuner Service /usr/lib/plexmediaserver/Resources/Tuner/Private /usr/lib/plexmediaserver/Resources/Tuner/Shared 1.43.2.10687-563d026ea 32600 -Jun 04, 2026 03:41:15.239 [0x7f5cfc7f0808] INFO - [I] broker_t::start... -Jun 04, 2026 03:41:15.241 [0x7f5cfc7f0808] INFO - [I] device_manager_t::init. -Jun 04, 2026 03:41:15.241 [0x7f5cfc7f0808] INFO - [I] device_manager_t::init. Initialize provider manager -Jun 04, 2026 03:41:15.241 [0x7f5cfc7f0808] INFO - [I] device_manager_t::init. Initialize all device auxes -Jun 04, 2026 03:41:15.241 [0x7f5cfc7f0808] INFO - [I] dvb_device_factory_t::get_aux_list -Jun 04, 2026 03:41:15.241 [0x7f5cfc7f0808] INFO - [I] tvbutler_aux_t::init -Jun 04, 2026 03:41:15.243 [0x7f5cfc7f0808] INFO - [I] web_server_t::start. Starting web server on port 32600 -Jun 04, 2026 03:41:24.545 [0x7f5cfa9f5b38] INFO - [I] web_service_t::process_device_discovery -Jun 04, 2026 03:41:24.545 [0x7f5cfa9f5b38] INFO - [I] device_reactor_t::get_device_list () -Jun 04, 2026 03:41:26.548 [0x7f5cfa9f5b38] INFO - [I] SAT2IP - discover_satip_servers(): no servers found -Jun 04, 2026 03:41:26.966 [0x7f5cfa9f5b38] INFO - [I] v4l::DeviceGetList_impl. getting v4l device list -Jun 04, 2026 03:41:26.968 [0x7f5cfa9f5b38] INFO - [I] onetv_factory::DeviceGetListEx >> -Jun 04, 2026 03:41:26.968 [0x7f5cfa9f5b38] WARN - [W] onetv_factory::DeviceGetListEx. libusb_init returned an error -99 -Jun 04, 2026 03:47:58.343 [0x7f5cfc7f0808] INFO - Received SIGINT: Interrupt from keyboard. -Jun 04, 2026 03:47:58.352 [0x7f5cfc7f0808] INFO - [I] device_manager_t::term -Jun 04, 2026 03:47:58.352 [0x7f5cfc7f0808] INFO - [I] device_manager_t::term. Stop all devices -Jun 04, 2026 03:47:58.352 [0x7f5cfc7f0808] INFO - [I] device_manager_t::term. Shut down all device auxes -Jun 04, 2026 03:47:58.352 [0x7f5cfc7f0808] INFO - [I] tvbutler_aux_t::term -Jun 04, 2026 03:47:58.353 [0x7f5cfc7f0808] INFO - [I] web_server_t::stop. Web server is stopped -Jun 04, 2026 03:47:58.353 [0x7f5cfc7f0808] INFO - [I] device_manager_t::term -Jun 04, 2026 03:47:58.353 [0x7f5cfc7f0808] INFO - [I] device_manager_t::term. Stop all devices -Jun 04, 2026 03:47:58.353 [0x7f5cfc7f0808] INFO - [I] device_manager_t::term. Shut down all device auxes -Jun 04, 2026 03:47:58.353 [0x7f5cfc7f0808] INFO - [I] broker_t::shutdown. Shutdown is completed. diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.imdb/HTTP.system/CacheInfo b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.imdb/HTTP.system/CacheInfo deleted file mode 100644 index 9e26dfeeb..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.imdb/HTTP.system/CacheInfo +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.localmedia/HTTP.system/CacheInfo b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.localmedia/HTTP.system/CacheInfo deleted file mode 100644 index 9e26dfeeb..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.localmedia/HTTP.system/CacheInfo +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.fanarttv/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.localmedia/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.none/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.plexthememusic/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.themoviedb/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/Dict b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/Dict deleted file mode 100644 index 2353c34da..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/Dict +++ /dev/null @@ -1,1756 +0,0 @@ -(dp0 -S'_AgentService:AgentInfo' -p1 -(dp2 -S'com.plexapp.agents.fanarttv' -p3 -(lp4 -(dp5 -S'media_types' -p6 -(lp7 -S'Movie' -p8 -asS'primary_provider' -p9 -I00 -sS'fallback_agent' -p10 -NsS'contributes_to' -p11 -(lp12 -S'com.plexapp.agents.imdb' -p13 -aS'com.plexapp.agents.themoviedb' -p14 -asS'has_attribution' -p15 -I01 -sS'languages' -p16 -(lp17 -S'xn' -p18 -asS'persist_stored_files' -p19 -I01 -sS'version' -p20 -I0 -sS'accepts_from' -p21 -NsS'prefs' -p22 -I01 -sS'name' -p23 -S'Fanart.tv' -p24 -sa(dp25 -S'media_types' -p26 -(lp27 -S'TV_Show' -p28 -asS'primary_provider' -p29 -I00 -sS'fallback_agent' -p30 -NsS'contributes_to' -p31 -(lp32 -S'com.plexapp.agents.thetvdb' -p33 -aS'com.plexapp.agents.themoviedb' -p34 -asg15 -I01 -sS'languages' -p35 -(lp36 -S'xn' -p37 -asS'persist_stored_files' -p38 -I01 -sS'version' -p39 -I0 -sS'accepts_from' -p40 -NsS'prefs' -p41 -I01 -sS'name' -p42 -S'Fanart.tv' -p43 -sa(dp44 -S'media_types' -p45 -(lp46 -S'Artist' -p47 -asS'primary_provider' -p48 -I00 -sS'fallback_agent' -p49 -NsS'contributes_to' -p50 -(lp51 -S'com.plexapp.agents.lastfm' -p52 -asg15 -I01 -sS'languages' -p53 -(lp54 -S'xn' -p55 -asS'persist_stored_files' -p56 -I01 -sS'version' -p57 -I0 -sS'accepts_from' -p58 -NsS'prefs' -p59 -I01 -sS'name' -p60 -S'Fanart.tv' -p61 -sa(dp62 -S'media_types' -p63 -(lp64 -S'Album' -p65 -asS'primary_provider' -p66 -I00 -sS'fallback_agent' -p67 -NsS'contributes_to' -p68 -(lp69 -S'com.plexapp.agents.lastfm' -p70 -asg15 -I01 -sS'languages' -p71 -(lp72 -S'xn' -p73 -asS'persist_stored_files' -p74 -I01 -sS'version' -p75 -I0 -sS'accepts_from' -p76 -NsS'prefs' -p77 -I01 -sS'name' -p78 -S'Fanart.tv' -p79 -sasS'com.plexapp.agents.none' -p80 -(lp81 -(dp82 -S'media_types' -p83 -(lp84 -S'Movie' -p85 -asS'primary_provider' -p86 -I01 -sS'fallback_agent' -p87 -NsS'contributes_to' -p88 -Nsg15 -I00 -sS'languages' -p89 -(lp90 -S'xn' -p91 -asS'persist_stored_files' -p92 -I01 -sS'version' -p93 -I0 -sS'accepts_from' -p94 -NsS'prefs' -p95 -I00 -sS'name' -p96 -S'Personal Media' -p97 -sa(dp98 -S'media_types' -p99 -(lp100 -S'TV_Show' -p101 -asS'primary_provider' -p102 -I01 -sS'fallback_agent' -p103 -NsS'contributes_to' -p104 -Nsg15 -I00 -sS'languages' -p105 -(lp106 -S'xn' -p107 -asS'persist_stored_files' -p108 -I01 -sS'version' -p109 -I0 -sS'accepts_from' -p110 -NsS'prefs' -p111 -I00 -sS'name' -p112 -S'Personal Media Shows' -p113 -sa(dp114 -S'media_types' -p115 -(lp116 -S'Artist' -p117 -asS'primary_provider' -p118 -I01 -sS'fallback_agent' -p119 -NsS'contributes_to' -p120 -Nsg15 -I00 -sS'languages' -p121 -(lp122 -S'xn' -p123 -asS'persist_stored_files' -p124 -I01 -sS'version' -p125 -I0 -sS'accepts_from' -p126 -NsS'prefs' -p127 -I00 -sS'name' -p128 -S'Personal Media Artists' -p129 -sa(dp130 -S'media_types' -p131 -(lp132 -S'Album' -p133 -asS'primary_provider' -p134 -I01 -sS'fallback_agent' -p135 -NsS'contributes_to' -p136 -Nsg15 -I00 -sS'languages' -p137 -(lp138 -S'xn' -p139 -asS'persist_stored_files' -p140 -I01 -sS'version' -p141 -I0 -sS'accepts_from' -p142 -NsS'prefs' -p143 -I00 -sS'name' -p144 -S'Personal Media Albums' -p145 -sa(dp146 -S'media_types' -p147 -(lp148 -S'Photo' -p149 -asS'primary_provider' -p150 -I01 -sS'fallback_agent' -p151 -NsS'contributes_to' -p152 -Nsg15 -I00 -sS'languages' -p153 -(lp154 -S'en' -p155 -aS'ar' -p156 -aS'bg' -p157 -aS'ca' -p158 -aS'cs' -p159 -aS'cy' -p160 -aS'da' -p161 -aS'de' -p162 -aS'el' -p163 -aS'es' -p164 -aS'et' -p165 -aS'fa' -p166 -aS'fi' -p167 -aS'fr' -p168 -aS'he' -p169 -aS'hi' -p170 -aS'hr' -p171 -aS'ht' -p172 -aS'hu' -p173 -aS'id' -p174 -aS'it' -p175 -aS'ja' -p176 -aS'ko' -p177 -aS'lt' -p178 -aS'lv' -p179 -aS'ms' -p180 -aS'mt' -p181 -aS'nl' -p182 -aS'no' -p183 -aS'pl' -p184 -aS'pt' -p185 -aS'ro' -p186 -aS'ru' -p187 -aS'sk' -p188 -aS'sv' -p189 -aS'sl' -p190 -aS'sr' -p191 -aS'th' -p192 -aS'tr' -p193 -aS'uk' -p194 -aS'ur' -p195 -aS'vi' -p196 -aS'zh' -p197 -aS'xn' -p198 -asS'persist_stored_files' -p199 -I01 -sS'version' -p200 -I0 -sS'accepts_from' -p201 -NsS'prefs' -p202 -I00 -sS'name' -p203 -S'Photos' -p204 -sasS'com.plexapp.agents.htbackdrops' -p205 -(lp206 -(dp207 -S'media_types' -p208 -(lp209 -S'Artist' -p210 -asS'primary_provider' -p211 -I00 -sS'fallback_agent' -p212 -NsS'contributes_to' -p213 -(lp214 -S'com.plexapp.agents.lastfm' -p215 -asg15 -I01 -sS'languages' -p216 -(lp217 -S'ab' -p218 -aS'aa' -p219 -aS'af' -p220 -aS'ak' -p221 -aS'sq' -p222 -aS'am' -p223 -aS'ar' -p224 -aS'an' -p225 -aS'hy' -p226 -aS'as' -p227 -aS'av' -p228 -aS'ae' -p229 -aS'ay' -p230 -aS'az' -p231 -aS'bm' -p232 -aS'ba' -p233 -aS'eu' -p234 -aS'be' -p235 -aS'bn' -p236 -aS'bh' -p237 -aS'bi' -p238 -aS'bs' -p239 -aS'pb' -p240 -aS'br' -p241 -aS'bg' -p242 -aS'my' -p243 -aS'ca' -p244 -aS'ch' -p245 -aS'ce' -p246 -aS'ny' -p247 -aS'zh' -p248 -aS'cu' -p249 -aS'cv' -p250 -aS'kw' -p251 -aS'co' -p252 -aS'cr' -p253 -aS'hr' -p254 -aS'cs' -p255 -aS'da' -p256 -aS'dv' -p257 -aS'nl' -p258 -aS'dz' -p259 -aS'en' -p260 -aS'eo' -p261 -aS'et' -p262 -aS'ee' -p263 -aS'fo' -p264 -aS'fj' -p265 -aS'fi' -p266 -aS'fr' -p267 -aS'fy' -p268 -aS'ff' -p269 -aS'gd' -p270 -aS'gl' -p271 -aS'lg' -p272 -aS'ka' -p273 -aS'de' -p274 -aS'el' -p275 -aS'gn' -p276 -aS'gu' -p277 -aS'ht' -p278 -aS'ha' -p279 -aS'he' -p280 -aS'hz' -p281 -aS'hi' -p282 -aS'ho' -p283 -aS'hu' -p284 -aS'is' -p285 -aS'io' -p286 -aS'ig' -p287 -aS'id' -p288 -aS'ia' -p289 -aS'ie' -p290 -aS'iu' -p291 -aS'ik' -p292 -aS'ga' -p293 -aS'it' -p294 -aS'ja' -p295 -aS'jv' -p296 -aS'kl' -p297 -aS'kn' -p298 -aS'kr' -p299 -aS'ks' -p300 -aS'kk' -p301 -aS'km' -p302 -aS'ki' -p303 -aS'rw' -p304 -aS'ky' -p305 -aS'kv' -p306 -aS'kg' -p307 -aS'ko' -p308 -aS'kj' -p309 -aS'ku' -p310 -aS'lo' -p311 -aS'la' -p312 -aS'lv' -p313 -aS'li' -p314 -aS'ln' -p315 -aS'lt' -p316 -aS'lu' -p317 -aS'lb' -p318 -aS'mk' -p319 -aS'mg' -p320 -aS'ms' -p321 -aS'ml' -p322 -aS'mt' -p323 -aS'gv' -p324 -aS'mi' -p325 -aS'mr' -p326 -aS'mh' -p327 -aS'mo' -p328 -aS'mn' -p329 -aS'na' -p330 -aS'nv' -p331 -aS'ng' -p332 -aS'ne' -p333 -aS'xn' -p334 -aS'nd' -p335 -aS'no' -p336 -aS'nb' -p337 -aS'nn' -p338 -aS'oc' -p339 -aS'oj' -p340 -aS'or' -p341 -aS'om' -p342 -aS'os' -p343 -aS'pi' -p344 -aS'pa' -p345 -aS'fa' -p346 -aS'pl' -p347 -aS'pt' -p348 -aS'ps' -p349 -aS'qu' -p350 -aS'rm' -p351 -aS'ro' -p352 -aS'rn' -p353 -aS'ru' -p354 -aS'se' -p355 -aS'sm' -p356 -aS'sg' -p357 -aS'sa' -p358 -aS'sc' -p359 -aS'sr' -p360 -aS'sn' -p361 -aS'ii' -p362 -aS'sd' -p363 -aS'si' -p364 -aS'sk' -p365 -aS'sl' -p366 -aS'so' -p367 -aS'st' -p368 -aS'nr' -p369 -aS'es' -p370 -aS'su' -p371 -aS'sw' -p372 -aS'ss' -p373 -aS'sv' -p374 -aS'tl' -p375 -aS'ty' -p376 -aS'tg' -p377 -aS'ta' -p378 -aS'tt' -p379 -aS'te' -p380 -aS'th' -p381 -aS'bo' -p382 -aS'ti' -p383 -aS'to' -p384 -aS'ts' -p385 -aS'tn' -p386 -aS'tr' -p387 -aS'tk' -p388 -aS'tw' -p389 -aS'ug' -p390 -aS'uk' -p391 -aS'ur' -p392 -aS'uz' -p393 -aS've' -p394 -aS'vi' -p395 -aS'vo' -p396 -aS'wa' -p397 -aS'cy' -p398 -aS'wo' -p399 -aS'xh' -p400 -aS'yi' -p401 -aS'yo' -p402 -aS'za' -p403 -aS'zu' -p404 -asS'persist_stored_files' -p405 -I01 -sS'version' -p406 -I0 -sS'accepts_from' -p407 -NsS'prefs' -p408 -I00 -sS'name' -p409 -S'Home Theater Backdrops' -p410 -sasS'com.plexapp.agents.imdb' -p411 -(lp412 -(dp413 -S'media_types' -p414 -(lp415 -S'Movie' -p416 -asS'primary_provider' -p417 -I01 -sS'fallback_agent' -p418 -NsS'contributes_to' -p419 -(lp420 -S'com.plexapp.agents.themoviedb' -p421 -asg15 -I01 -sS'languages' -p422 -(lp423 -S'en' -p424 -aS'sv' -p425 -aS'fr' -p426 -aS'es' -p427 -aS'nl' -p428 -aS'de' -p429 -aS'it' -p430 -aS'da' -p431 -aS'ar' -p432 -aS'ca' -p433 -aS'zh' -p434 -aS'cs' -p435 -aS'et' -p436 -aS'fi' -p437 -aS'el' -p438 -aS'he' -p439 -aS'hi' -p440 -aS'hu' -p441 -aS'id' -p442 -aS'ja' -p443 -aS'ko' -p444 -aS'lv' -p445 -aS'no' -p446 -aS'fa' -p447 -aS'pl' -p448 -aS'pt' -p449 -aS'ro' -p450 -aS'ru' -p451 -aS'sk' -p452 -aS'th' -p453 -aS'tr' -p454 -aS'uk' -p455 -aS'vi' -p456 -asS'persist_stored_files' -p457 -I01 -sS'version' -p458 -I0 -sS'accepts_from' -p459 -(lp460 -S'com.plexapp.agents.localmedia' -p461 -asS'prefs' -p462 -I01 -sS'name' -p463 -S'Plex Movie (Legacy)' -p464 -sasS'com.plexapp.agents.lyricfind' -p465 -(lp466 -(dp467 -S'media_types' -p468 -(lp469 -S'Album' -p470 -asS'primary_provider' -p471 -I00 -sS'fallback_agent' -p472 -NsS'contributes_to' -p473 -(lp474 -S'com.plexapp.agents.lastfm' -p475 -aS'tv.plex.agents.music' -p476 -aS'org.musicbrainz.agents.music' -p477 -asg15 -I01 -sS'languages' -p478 -(lp479 -S'xn' -p480 -asS'persist_stored_files' -p481 -I01 -sS'version' -p482 -I0 -sS'accepts_from' -p483 -NsS'prefs' -p484 -I00 -sS'name' -p485 -S'LyricFind' -p486 -sasS'com.plexapp.agents.thetvdb' -p487 -(lp488 -(dp489 -S'media_types' -p490 -(lp491 -S'TV_Show' -p492 -asS'primary_provider' -p493 -I01 -sS'fallback_agent' -p494 -NsS'contributes_to' -p495 -Nsg15 -I01 -sS'languages' -p496 -(lp497 -S'en' -p498 -aS'fr' -p499 -aS'zh' -p500 -aS'sv' -p501 -aS'no' -p502 -aS'da' -p503 -aS'fi' -p504 -aS'nl' -p505 -aS'de' -p506 -aS'it' -p507 -aS'es' -p508 -aS'pl' -p509 -aS'hu' -p510 -aS'el' -p511 -aS'tr' -p512 -aS'ru' -p513 -aS'he' -p514 -aS'ja' -p515 -aS'pt' -p516 -aS'cs' -p517 -aS'ko' -p518 -aS'sl' -p519 -aS'hr' -p520 -asS'persist_stored_files' -p521 -I01 -sS'version' -p522 -I0 -sS'accepts_from' -p523 -NsS'prefs' -p524 -I01 -sS'name' -p525 -S'TheTVDB' -p526 -sasS'com.plexapp.agents.lastfm' -p527 -(lp528 -(dp529 -S'media_types' -p530 -(lp531 -S'Artist' -p532 -asS'primary_provider' -p533 -I01 -sS'fallback_agent' -p534 -NsS'contributes_to' -p535 -Nsg15 -I01 -sS'languages' -p536 -(lp537 -S'en' -p538 -aS'sv' -p539 -aS'fr' -p540 -aS'es' -p541 -aS'de' -p542 -aS'pl' -p543 -aS'it' -p544 -aS'pt' -p545 -aS'ja' -p546 -aS'tr' -p547 -aS'ru' -p548 -aS'zh' -p549 -asS'persist_stored_files' -p550 -I01 -sS'version' -p551 -I0 -sS'accepts_from' -p552 -NsS'prefs' -p553 -I01 -sS'name' -p554 -S'Last.fm' -p555 -sa(dp556 -S'media_types' -p557 -(lp558 -S'Album' -p559 -asS'primary_provider' -p560 -I01 -sS'fallback_agent' -p561 -NsS'contributes_to' -p562 -Nsg15 -I01 -sS'languages' -p563 -(lp564 -S'en' -p565 -aS'sv' -p566 -aS'fr' -p567 -aS'es' -p568 -aS'de' -p569 -aS'pl' -p570 -aS'it' -p571 -aS'pt' -p572 -aS'ja' -p573 -aS'tr' -p574 -aS'ru' -p575 -aS'zh' -p576 -asS'persist_stored_files' -p577 -I01 -sS'version' -p578 -I0 -sS'accepts_from' -p579 -NsS'prefs' -p580 -I01 -sS'name' -p581 -S'Last.fm' -p582 -sasS'org.musicbrainz.agents.music' -p583 -(lp584 -(dp585 -S'media_types' -p586 -(lp587 -S'Artist' -p588 -asS'primary_provider' -p589 -I01 -sS'fallback_agent' -p590 -NsS'contributes_to' -p591 -Nsg15 -I01 -sS'languages' -p592 -(lp593 -S'en' -p594 -aS'ar' -p595 -aS'bg' -p596 -aS'zh' -p597 -aS'hr' -p598 -aS'cs' -p599 -aS'da' -p600 -aS'nl' -p601 -aS'fi' -p602 -aS'fr' -p603 -aS'de' -p604 -aS'el' -p605 -aS'hu' -p606 -aS'id' -p607 -aS'it' -p608 -aS'ja' -p609 -aS'ko' -p610 -aS'nn' -p611 -aS'pl' -p612 -aS'pt' -p613 -aS'ro' -p614 -aS'ru' -p615 -aS'sr' -p616 -aS'sk' -p617 -aS'es' -p618 -aS'sv' -p619 -aS'th' -p620 -aS'tr' -p621 -aS'vi' -p622 -aS'xx' -p623 -asS'persist_stored_files' -p624 -I01 -sS'version' -p625 -I0 -sS'accepts_from' -p626 -NsS'prefs' -p627 -I01 -sS'name' -p628 -S'Musicbrainz' -p629 -sa(dp630 -S'media_types' -p631 -(lp632 -S'Album' -p633 -asS'primary_provider' -p634 -I01 -sS'fallback_agent' -p635 -NsS'contributes_to' -p636 -Nsg15 -I01 -sS'languages' -p637 -g593 -sS'persist_stored_files' -p638 -I01 -sS'version' -p639 -I0 -sS'accepts_from' -p640 -NsS'prefs' -p641 -I01 -sS'name' -p642 -S'Musicbrainz' -p643 -sasS'com.plexapp.agents.themoviedb' -p644 -(lp645 -(dp646 -S'media_types' -p647 -(lp648 -S'Movie' -p649 -asS'primary_provider' -p650 -I01 -sS'fallback_agent' -p651 -NsS'contributes_to' -p652 -Nsg15 -I01 -sS'languages' -p653 -(lp654 -S'en' -p655 -aS'cs' -p656 -aS'da' -p657 -aS'de' -p658 -aS'el' -p659 -aS'es' -p660 -aS'fi' -p661 -aS'fr' -p662 -aS'he' -p663 -aS'hr' -p664 -aS'hu' -p665 -aS'it' -p666 -aS'lv' -p667 -aS'lt' -p668 -aS'nl' -p669 -aS'no' -p670 -aS'pl' -p671 -aS'pt' -p672 -aS'ru' -p673 -aS'sk' -p674 -aS'sv' -p675 -aS'th' -p676 -aS'tr' -p677 -aS'vi' -p678 -aS'zh' -p679 -aS'ko' -p680 -asS'persist_stored_files' -p681 -I01 -sS'version' -p682 -I0 -sS'accepts_from' -p683 -(lp684 -S'com.plexapp.agents.localmedia' -p685 -asS'prefs' -p686 -I01 -sS'name' -p687 -S'The Movie Database' -p688 -sa(dp689 -S'media_types' -p690 -(lp691 -S'TV_Show' -p692 -asS'primary_provider' -p693 -I01 -sS'fallback_agent' -p694 -NsS'contributes_to' -p695 -(lp696 -S'com.plexapp.agents.thetvdb' -p697 -asg15 -I01 -sS'languages' -p698 -g654 -sS'persist_stored_files' -p699 -I01 -sS'version' -p700 -I0 -sS'accepts_from' -p701 -(lp702 -S'com.plexapp.agents.localmedia' -p703 -aS'com.plexapp.agents.thetvdb' -p704 -asS'prefs' -p705 -I01 -sS'name' -p706 -S'The Movie Database' -p707 -sasS'com.plexapp.agents.movieposterdb' -p708 -(lp709 -(dp710 -S'media_types' -p711 -(lp712 -S'Movie' -p713 -asS'primary_provider' -p714 -I00 -sS'fallback_agent' -p715 -NsS'contributes_to' -p716 -(lp717 -S'com.plexapp.agents.imdb' -p718 -asg15 -I01 -sS'languages' -p719 -(lp720 -S'xn' -p721 -asS'persist_stored_files' -p722 -I01 -sS'version' -p723 -I0 -sS'accepts_from' -p724 -NsS'prefs' -p725 -I00 -sS'name' -p726 -S'CineMaterial' -p727 -sasS'com.plexapp.agents.localmedia' -p728 -(lp729 -(dp730 -S'media_types' -p731 -(lp732 -S'Movie' -p733 -asS'primary_provider' -p734 -I00 -sS'fallback_agent' -p735 -NsS'contributes_to' -p736 -(lp737 -S'com.plexapp.agents.imdb' -p738 -aS'com.plexapp.agents.none' -p739 -asg15 -I00 -sS'languages' -p740 -(lp741 -S'xn' -p742 -asS'persist_stored_files' -p743 -I00 -sS'version' -p744 -I0 -sS'accepts_from' -p745 -NsS'prefs' -p746 -I01 -sS'name' -p747 -S'Local Media Assets (Movies)' -p748 -sa(dp749 -S'media_types' -p750 -(lp751 -S'TV_Show' -p752 -asS'primary_provider' -p753 -I00 -sS'fallback_agent' -p754 -NsS'contributes_to' -p755 -(lp756 -S'com.plexapp.agents.thetvdb' -p757 -aS'com.plexapp.agents.none' -p758 -asg15 -I00 -sS'languages' -p759 -(lp760 -S'xn' -p761 -asS'persist_stored_files' -p762 -I00 -sS'version' -p763 -I0 -sS'accepts_from' -p764 -NsS'prefs' -p765 -I01 -sS'name' -p766 -S'Local Media Assets (TV)' -p767 -sa(dp768 -S'media_types' -p769 -(lp770 -S'Artist' -p771 -asS'primary_provider' -p772 -I00 -sS'fallback_agent' -p773 -NsS'contributes_to' -p774 -(lp775 -S'com.plexapp.agents.discogs' -p776 -aS'com.plexapp.agents.lastfm' -p777 -aS'com.plexapp.agents.plexmusic' -p778 -aS'com.plexapp.agents.none' -p779 -aS'tv.plex.agents.music' -p780 -aS'org.musicbrainz.agents.music' -p781 -asg15 -I00 -sS'languages' -p782 -(lp783 -S'xn' -p784 -asS'persist_stored_files' -p785 -I00 -sS'version' -p786 -I0 -sS'accepts_from' -p787 -NsS'prefs' -p788 -I01 -sS'name' -p789 -S'Local Media Assets (Artists)' -p790 -sa(dp791 -S'media_types' -p792 -(lp793 -S'Artist' -p794 -asS'primary_provider' -p795 -I00 -sS'fallback_agent' -p796 -NsS'contributes_to' -p797 -(lp798 -S'com.plexapp.agents.plexmusic' -p799 -asg15 -I00 -sS'languages' -p800 -g783 -sS'persist_stored_files' -p801 -I00 -sS'version' -p802 -I2 -sS'accepts_from' -p803 -NsS'prefs' -p804 -I01 -sS'name' -p805 -S'Local Media Assets (Artists)' -p806 -sa(dp807 -S'media_types' -p808 -(lp809 -S'Album' -p810 -asS'primary_provider' -p811 -I00 -sS'fallback_agent' -p812 -NsS'contributes_to' -p813 -(lp814 -S'com.plexapp.agents.discogs' -p815 -aS'com.plexapp.agents.lastfm' -p816 -aS'com.plexapp.agents.plexmusic' -p817 -aS'com.plexapp.agents.none' -p818 -aS'tv.plex.agents.music' -p819 -aS'org.musicbrainz.agents.music' -p820 -asg15 -I00 -sS'languages' -p821 -(lp822 -S'xn' -p823 -asS'persist_stored_files' -p824 -I00 -sS'version' -p825 -I0 -sS'accepts_from' -p826 -NsS'prefs' -p827 -I01 -sS'name' -p828 -S'Local Media Assets (Albums)' -p829 -sasS'com.plexapp.agents.plexthememusic' -p830 -(lp831 -(dp832 -S'media_types' -p833 -(lp834 -S'TV_Show' -p835 -asS'primary_provider' -p836 -I00 -sS'fallback_agent' -p837 -NsS'contributes_to' -p838 -(lp839 -S'com.plexapp.agents.thetvdb' -p840 -aS'com.plexapp.agents.thetvdbdvdorder' -p841 -aS'com.plexapp.agents.themoviedb' -p842 -asg15 -I00 -sS'languages' -p843 -(lp844 -S'xn' -p845 -asS'persist_stored_files' -p846 -I01 -sS'version' -p847 -I0 -sS'accepts_from' -p848 -NsS'prefs' -p849 -I00 -sS'name' -p850 -S'Plex Theme Music' -p851 -sass. \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/HTTPCookies b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/HTTPCookies deleted file mode 100644 index 2021ccdad..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/HTTPCookies +++ /dev/null @@ -1,4 +0,0 @@ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/StoredValues b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/StoredValues deleted file mode 100644 index 9603bf1ff..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/StoredValues +++ /dev/null @@ -1 +0,0 @@ -{"LastVersion": "2.6.3", "HTTP.system.CacheVersion": 1} \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.blobs.db b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.blobs.db deleted file mode 100644 index 8abcf381c318cc1ff12c0dc85d95efb36740390f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 365568 zcmeFa34mKyRwn$GvgIs}m2w;M9F^iFT5Cz-IAy!yRJ9zC zMKu)fqyGi`IpqC>K<@8|KOv31rETjV^kMC1;9E8Hf6)J4{~P_Q`k(24tpC3LJNj?x zU(kP9|3&@h_0Q@*ssD)nY5f!W_vqiLe@y=-{pzDPG-q2ss4gF>P1^sFL zDgB5(rSI1#^t`@DPwDsQcj#O6P5O1ZuKh3VziEG?{b%hzXr!J(moeSBX9NBJGwEjUf*wpdU$>S&B|7VUK-JNvegY5Gq8rQ71j5(tT0adeU zR9cPZZgAm>Ua5y=1j#T4t+el%y=PX3Yr2GwW635}&JO zz6xB96eHs_?P|MOZkdg`M+RD@X_Q+=wN!3xPeOC5lGot7LTFRnMOyHEAF0FlcJc~* zZzFT?eJh!P?@i=I_`Z%j1K&D13Dx+&$T9f-Z{%_K{u^=-zW+0M1it@-Ou+Z=lRSL? zHrWH;zfMx{{eP3~@cr+|UGV+${&BJizW+~hJ$!#Zp&jJA-hi)fy9i(3 za2~!sd=9>@%)-}eW%z164_}Sb@OAD<_&Q6as2+i@7Z1bNvj^boG?nAY2jT0;7<^4p zQ6?XNuZMTTSAk0Nz&-G_>rVI@*$Q9x-3DLxB;f0AD$|{t;p_Hc__~z}H@p$PHcL1bHf-tVYDzBf54%P z=CZk5KA+3R_xhB~XfadF$M?9DOcqj~$YkQX9ZDge$xakUv-$Wghmy~YXR_Ie+<5$c zhmr*f3G2Wb#>>SuwuNq2zMoxlD1aScu=@QnLA6u0VOVdXx+R zlFLrSZ+9txN3M{|7vr}%lx!{!80HJbc!E)&o*|tq)LA`^nB__&(8T!uRnG zbZhlk2fDO+v;%!wJ<>S^-%oU&fbZ$fA^3j0^DulL?u^3sW1Sp)Pj#RNtA{%G!S}&V z621>~p#Q3qoh|VFXy+#Q-ruvjT3a?lvuJFO;CjkZRy~NqerRH;rNMzlc%PD(UHH@y1d}) z*nwUv*XP>hxp2xrs|Ql0$yCbqy3rJK1A5ysnx)p+_WVq#-K@!j!Ilvn*n)m#l;+!( zS&=d=v}bB&WxLzLAxqv25bVy~h5@?>w)r3!uWDKgwKA*iM!ibwy=Gi6pgc~;a!WdE z8nvnwDkj)}Aj+kAh(P-+aNCq1=nCFdFnGR?rR+FWLX5)fcg<6_xHrfkd*YTpV{*U^)4Y0tsCqmyS;KN)fyFcl)!Rj_XrzA zj6&hdfK;>5Xu;_Y2_EGOWwS<4m3WH|ZwZiU!MyG)!Q|_gC4q_a|25I)QAk8!c@RMT z|MK99sUiZ`0s?IPul$yxeg(dM^;(d)yNveg_=XL!#2t62SLWF&aG}!3#f(j}- zRz%=@qe=ylEDh6dZH>he`MmnU7Z@6zZit=zy*wt%GPwTlKAd1E zBCw_r!1e!{u3ju0BG459w*FUdRkR;dZ&l&;!N7mm2I9)?*T)iDwy5uHVN2##c@7rl zb5>kj6jRcYR>9uVR&xCg5*1gh$&fuCSVFe^cWs1^Hoq@Pu?)&;D&~c9tu356h&pTo z>(q0`<&}tuV)XvyTgSM~9hkU{S@V+NZ1TLHH;FZ7Z}z;1ry?0=HjhS*&dOE^_>zKa50MdtBm?aA?aMD|;O}Za|M(UqophEcs zT>lUJfQJAKG6J~%ALQD{vJW}}wEyeMc}4r2`bqf5TuwY}-F#tVERjm7Z>8AsjVUKB zqt!C&bC&Sq7IEn&ge_^|Cf7YzY9>9mVk?;g$1+)-?960n5yyhWH6T5T8&GUBQrUX< zXIImmEjPvz*{piyjHtwK8a4Z5i?^rnD4Rt9!wgG8(Mv|McVStBlDj7loTd)#V3xGa zNO$(#5KG*7r@I?~JqKvY*=~*fd$Wjv8+_GEPWL)uYX}<*VCxfVMsScHj`7dVLJ!~# zK}Nk=iU^9{C3FKYYTJeD|K%L;Fl|I&l_P-b|5aW=C>|oPj0j-=Uq)~-X+&U^BS8DV z2KGPw7PSAds+jVne{ilA-f{W3s7P?1iFs2jaqytpv0c0d&l@fn&3V(Jm-vG> z!b@Dx7O@?4Nn}ZlA()=1e2_O4Upfym-2bog@fpQK1eOy4I{&NsA1Lr2eh>jfU`-*A zRIgJ~L*Phw)27KPcmgslaCHPngN}ab?dRzKTP@oEb!EGveZTr0@DKGR?tg59U3-{a zA9>qd3%kzg;dqg4w)0)ld!#$W)sKW@Nvj_Dx`s<#Tn1U-^{K+vcJwE8} z-sADS*hjG0Wer(yx>;SixuWT{eoc2`H#6L?6rDW?#XYbA36ZwSa2Fz7b=)O(K(}FB z9k9}!=id%6xa}&HS?i1Rw&b#T4KR|k+-^ZD zW{ui=biq5@=WTs#R{=aP6F|y{>wkZ=!@m%LfkOcG{{vU$SYSlJLje1~2L=9t2n-wo zO#i1P6)maJC&ciB2)GE?me3bBv*X(DT;{Y8wuZ!coY48PP27dsIvFQyNn3G84MPuR z2aeX-X-o7DGWWxkM%94x*MXDWkz4Gg?)5{*eIu1pRPj?cYH$b7e{*rhqf+8SKxyWD^DpS<-aT{Xm54E6Vlz8k$jf2UwyJK{5ed zG^^Bmt3Q69HO#rQ!VQi--?Nnr{M6BV*_1ijr#{>paDqlQq1ifSd6?_jzHBXkIiy4n z2Q~b&LCjN`MUSq4Y8f(z8N@v{Y5Kg0QbR+Y6<2@#|*^INBP&{BV7tZbbBfdsE;01Pe;$pb2l8Wg?NtcXXU*!(}F zzox*O++Tt>e&IP~{2&5|zzQI+YiMZ4{>|Led~CVToRc_j_0b1@s6{fH%;xl=2lgdG zFABBmCOk7z3egJ%h_hK6N-LY(DbFg^VdltgREO?VHn~R9ES>*#^pFBBzZ1UuD$s<$GB`43EJ~4e9Vjr72ewurgYJ2zPmFK2M z3P;d^r}W4&x2X@ENRIHeX|`ad?dJg`*MBD5sf8$^m59}%2Ko@0u9Nsf)b{Vd31+A` zxcgg!^;#&t)t;Y+XN0`>fLcxSf?4){o^Ll=)HRRuT9Es`kDF^?wd4dt-`R0w%lgF5 zovQ846&?wLh7W6+ax2UKofKLCA2QOKsqHqamv+-Qxc^`3XoT?)fi;2v+Y#31=wo60 z_#M(dmS?O+tqr41D5Tn^!&altM}OBI>1Nn-b5fsYEbVBIbu2jIoi-S)trASI)Mr{? zjAcQvQKE+iSz%=1?gKaS*cY2H8i&1svy@@H4Trc>Q^2+J_MmI$?Y!gXaHw%lY3Khi?#cR(7cdX0OWzmC9ell&jSU&ZVlxyKSu<$l)n!I#CAj?y_A5A9vyBgs8fL zzH#leXMeTT>#QZf00=SV1$bre{T5%-n1{KW-;x_ulQtQ9fgx_OVZ&~L=lKwkHPQ+^ z+1Z5WiRK!#oricp+fc5;%b$E!-eRuT+kTKS%fmX~1`mNH$L*k)2hRU%WDLh*AOcH4 zfbReC{m-Q!hj9>rYaan-|5KZa+Eib;_Di$MOTaXkZ{KhmGmd`v#efFWetw#10Ii*Z z`i9dDE=_yqI63U{UXh~^<`s^PPO=7<#sXyPa=l_-MG}>qy;PWxqOaPd+aX9ec*MnL zpic0*1T%eaSR3cZH|ZyBFpy?}J*?Rs-IKvbEgZN-Zsaq$>nm|F7~P1I0rGmJY(rKZJ2f}Ckd);{@aK+J%f z`qNj&ZjU9##?*H<2G%rG(`uVCxz!CvOo>I{W?4Vtl1e~RlB`@JivVkccGC>0AZzBl zDV*z~b~v-%ZnWvzqR{~LT^*tZthf1UK&e5j9F$7_`Zbi}W7sZZZTT&SW2?FXtZ;KM3gJN^efG1@_Z-USh zcft`HMgVOd+@_$1L4EzC=atGi7AYt%odNR=RX4Bw?h#6E!&YJYJr1`2Z0QgH~ z>wi`MvI76%2N6I7))oSHYeUN9rc+?AF{;PG24WqwPd81r&al~oo&QJs|Jtf_EDa*i zF9Nv#?-wcLLj=|y0vq+aVfr6ev~BA3%DBEyFZL{>y12^16@P2;`XgO^Y)SJlS#8G+jZ}TkY>4lj)u{{sgD<%lm5C0Hk#z= zsb^Wxxvc+Zj{SLky0htS`)1)&c8OrG1}9(4ie>M!=vIyYoe`u?1%sEQ9q`R={DE&< z3jupfo=9JZv=+*Bo>qo);#GR2re(|-P1xOmBEZ|fQi~AJ%r4pS1osYyM@x5T&+>Io=@yBCuu=!2Z8x zs}>7}2=qh%`+rY}kO2``vj|}SU$a$<1w#aSBCt{WHf6nXzoLCyJ*DkeKC3sC`++3+ zkc}yJNQ3NQ%8uEVRbWRP97Ts^%+15u7AuNAA*ec1QEaIZxUp3^7op*!*SRX^k_V2S zIFKf{?u;d-rd0BPFORS7qK=-dQngW`CmvX45n*EzxguCoBamK{WHcW~Fmnh0e5^Ec zKnom+bO|ciZO1%e-xSEOGd- zO2(q=SZH{`nsWp5{lUpvaQ{sZdP#AS`aiOf+;AUL8j_t|$^^=0IX)0D-cMP8FEtX? zR@oUWyRqW@FB$5Pga`}>0@u@W!ULiBK?D$i!9xJ&|G}$sEHNVBB7pthMFRgt1O^WQ z?EiyT=U8Gyz(oN2zl#L^iwF!J0;vBRygJ7cBLXf0bpBtb3@iE$?YFg~>KByZD-*k! zo&TM6%sy#56oBUm>FbltlJ`zR6n(#Fos42z(hU&rnJMp%2HbE7UTmRPQriA44&a~^ z;qFTpFC0+NRs-Gu33=iG?{HySn_kM{U0FbGzN@uR5c4Msu4wDhw;Px0>jS)il;IW& zIJ!;0zKdPhA$RzuW$r2o#erFs1GGoPDwDDFWlJWp`(ufR9#VPBHkTED7$Z#H*IfuF za-T;qj-=NoN)ug=C2$hh=O~;L2_gDJfc<~)>Ksdq2)GDf|96qVe-VMfLje2#;MF;n7!hz0p#5K0ZdKs+&*$ME=hJ!c z0jBbJ%XVzy-Kt>EPgH7c3m&-@pPVnb)PthRLmqWW+P_yDjrkJ0>%y!5!VlB)q3m)} zNDmkCeZ%g_(ARUr4s_sFOhmw?Rf13+foip9tV+{dps&ON za@29FKzcL?TZm&xn6ZZ`Qpwp`qulD|4ajj>E7n%P+G-xmaS?E|u7?Rl55-tJG|OKiI&}!@`DZdmwcC2#e$Tsz`D!CUz(54R|Q0 z;fAH>v#~@vt&%Nld*>%a*~DLuMde9Zw~vVFih0tlyzLa>%B~D^(eSq6Y$y3QIUPj@ zJgOttfY5+Lf)u_JUS5Af`IfZt?7o4Nh#J^KGT$8hj?{Tih9f<8;^fry;p538Q_qcv z**T?$B-6>0Q;$uZoH~AR>Qqw7WPt;Ubn?XUUkr2PaP*oIEtOI~kpPw`3!d zqdt0nJ~1(&zIV#1d~to^@I6t-jaUOM&rp9fS^w`RKwB>!>I_qb*5h8q>c03%S4Z=efc3l9b?`_ZMP`d+t%+KJ3>xQQx8EljznnkJ`dTsXhc2$1flsi_+r%l_G0XNgDU^gm-EjAI&&_jzB zhc*IwAd?l3NuN&R`hQ8I9Y#U~)&v6B|JOt{Vj&QLB_V+O|0ThOkr073fdJ0`YoZ#l z5QxB%5ZI{ih5Nrd6z#9ozf*STKdJwumkfk3rQVej4>GrI@7R|s;qs=@te0yg;moHM zL4Hcq-b8Q(R5_ri2s2uZcC%uuWgL~$ZqRqlG|SD)CHKCmsNC`d47v!Es=MS@h3zAg zC3)awqs(3HOqHuuP`=Si#GZh>rpG0AaS_NLjO_}6aQHR~tB3=$$uzk*!Ok~#-e9_* z$oP=~CwkSYU0F*z-z@XA=v2PE8rl{(rj!RY>Y(BDeLtr6jjvC<3k5awjW5#U@9(jK zdivq@i5JJB)a=eB;#Sir&qL2>wdhInQdUYnh4a5R-r*mJz`!AZ{eR%991DyHcnF~W z&w~R0Km-O30XqK=DIZm|U(#Mz55gbpPU3q2gZ1P z>}S1)Q)}oz$SusE$Va2 zHr-k!v(g50~Rf5Ybm2)1gW|S|$dEkY|7B+hrbbxl z%&J>HUWu@qz8VNcKXCNKfpll*qp?IPrM`6?6ZI_UKS03(SG8J(CH#0!6hR1E(pK3y zy%BQL-sPD_xwZdnW8NrTFfDTiG#ahTyauFcR2uVu2tA=8=Lon;=eOhh#i%qnvY)9M zI`(lGPb*Y{?R(td`$wq#S&9fDzSAl5ixvC zTR1fq_Ohs{>6T3Y`Zbc6iX{#oR>__osz5kD6s-n?z>-8d?@$v{j5)eg;7x%Ge!1rF zLb=v9Y|S6pekhhWc1$H>-6g9wDwg@G5h z70OQIk)p&j&hLXpyopm#li933%L=2 zwS)ln|Fu+`SQbQJaR^}lUmRY@jR>qI1hD_FrP{=@AOed+0QLWi!wb0)fwhDH&i`wv zHnA*-z~T_t2nN3)rJ!iPpzT(_2maU%|BL=GD_iH4Ble>W_9NisO3S=pwoJqF|C$wz zAASHFa89PUi_iScb;s8p7YetP?ZeId32aIr0q~OhsMg#5&)WzqlQ+^=?AANA^+C?cfLIIFI zjLlyou$j_i!xOQ@zI`g$5p9WbErvn!63`8?BBZ9wzU_pYr(=nO2L%geAWPmvC=aUi z7HDyX!BdZ~Ph53_GW3AIK>J_xIDjFD03xsk5Ww~S8mL4p0wSqgBA{4~W4XdrY+7qIK) z`LH$u+!R)t<^sJA9@136t@_I~a1zKaY5VU2*zO3Zx*-+x=aypE)4`KFf2m!5k-chK zG<{HB(476$D~);!d<>MDa7CS_!)s5{SK3F}>Ew4zre^R?%2Fqbt`qsve7SkfX!<@E zWr1@dyj>Go64+zp7@rKqwAswOE@#9I(}|Nq(>@=#(#;Hn{j>;J0;B_@OjTyqG}{;w-> zMZ2JW3jR^9B%Wl>tlxf$tplr#i}hNgTrHh%8*T7?O{@Mjf6Av+jS6^%YSc?$p)1crP#_7T*=)dTUID5X3w(LE zYp^^Fgo}$UZj}i_*}j({yWl$CxU^u>RXAOr2Ru5{SHC! zmd>k#0NavUT$kd=jmxs<%4|V`&(3*r(tvOSbl)oT?8+&A8zHn4ehb5IDI%F7YXay0 zYi`I!ff0eLh5+{es|F<|ga}-72w?xe=Bf+@Mg*=J0<`}RDW;-+MEgzUAK;JW`jAbh zV~MABfRh;$oG@QvU+{!DeW!`;kS#D)IX{_I$*gi=O=rJ1ef-eWv&rqf<8Du$IG)_j zrLa9Y;{0?{-wv-}-*^gqbAv?rXo$WE@%{3eC1>XcGZh4*1dSClvhj~f6WcgNjp=pA3j$#GdcyrdI`T|~u0XmTt*wS|H zKgk}EyYf(PAOnxc$sb8yapgD5_gcEXLodEj~zWRc^d71 z%QfC%x`@CvfB@eAy#^`?MMMOa2?6Z?%LFVYiwIl;2w?xe1}X_fL_ptj6;!jEayE||terpKFWQ*Bu&=#pG(X7iCpo{uHY zLHg$eZCof3swb?OGfk>zavqLjy15YJY)cairFhw)X|nSf zP|SfS&-5Wm$!auP!Ne{sMjnfdKaZ!Kh~}B_be00Qg8Sxos$>&a9Pm#)2ad2FSHI#Kabr#Khuz zMW+|iK?3WIh};E6FGtHQGK~%(pMKx^!~hZ}^3rOtoQh~jk{7W!6|I0>2q#*)>fdKaZ!Kh~}B_be00QBmy0)v47_W!}CXDlTmAVUEAzYG1L)RgL{Y#UL# zuv2R)&z>g3RWSIcG{N9c4aDx_Sxk1vWj?i+3t`IJGI0eKDj*l#mQdiJG6@`MvZ(@B zl0him!=Vs|rpgG+t)LL3yw#UXe(VU5c!o6DJrhfmz)XIsrBx6C$wM5WxPw+G+&lK?GI~0qp-P zhc)Je2&^^)HtM6G|9?}_KA?U{%_(o{Pp_ziB=brvQO;|EOGw+rA-khw8LgIkM~@@B zkMRgR%0H3mQn^@>iMc9a>XuPR(!Mn1k(tI69BIZ9FM!BLIGu1rF20FC!k~QJBINZ` z>MAVHmL~U{jU~=ZXk@=2Deuyhha~K^)eTiXBA2vVO0JkP9tx}Lo-{uP4FF{1eS&&g ze4#R^>f0}$oJaZ4;w1Ic>m@JGnT9@+>}IzjsdG_nggpoC0vjxn>lf5B8Yy2dFHeY3 zOvx=wh%IEd!ufwi$2-gn5m;3SVEafFnn;D#OA}2*j5ZGZa@+)K>0?QBpicG5-vC_Nv0NMBMK?g z{dCx)a9$0%3U}qB-G%cM?^H-3F}?zYY-QC59cTly5#7B2b^xeOxvhwS7(SM7=gV5K z^3Bomdi@}r0xzuB6J%_7{{LN#br=~DxV90%_5Zb9e<(d7@NN*m{{L>!!?=jRwT%Gw z|7*McPTBg&VQY5f)L zD@#g`#M|I&DlPh&5-fbo+5x5$gE{XKgOvY6Zs*`^cVcwc!of38ON^I3eK~4Z3k*jf zQsmu|NCOO?tn%&s$tJU}oH(8oUtMBvX301~S}T^QfUW2S&h*Ebf_#fqxn8bawoI#Z z!Dv#qXdILBF}bV(yDR+}OvOdiWAzPNVOB5?Hlxggo?XhfC-M@0YabH&F{M)R!SpW9 zJzXu$WawfnaTuDx4gpxciYc}%FwiRhnOs(BR98|ykV44PrLA%E1@I6DV(?GGiTP16 zDqw)Nt-E5F@*Vxj;>V8?i0452-;xG9jD!fR4Fqugzc%U-OMwV11p(~;OF<3eAOdRx z0qp;4qaLvoh`>@1!2Z7!)G!Vrur?6D{=YWr5levxECm7j{?B?Psc2u(j;X(_-mkv` zKe$gP_Qr+;xjU_OPIR@NgiTstV5-6uD#si`pS)p|a<$6tu6ZH$J*V&O&$_YbY@&=H z;e@vD=1g@|TuN}IrS_X`ufdH*u-}L`8hLY%ZKC5!94O>>_g6?S7Ly_=w;=|Y(nNhV zmY4$Z?(SMoAt!&9^3VH|%68Z%7shqwxA}5ECa#v*su?A#(QJ8zup7b0`;)|vA62_N zN16;>>c{@a;sgZx&P52+RTgIdd%YiUeA{L~mhb6L7C(NJKs*Q9|G2RZ|3m}^4FO#L z4_b|5c@Y600qp-i7Wfw;FlY#1{~xp($MPZqJ_6YPeJt=VL}1Vm(4fHA>G#98I-~!E z{zd(>`giN^=nMMu`lI^&`ZoPK?eD=h@ax*oX`j+QroE+|*Iv?&Xye*WZCL$B^{eXd zs-IVXT>WnK>(y7)IrX$UsqR(pP&X)lr~I+yZlCi3}7mKe59nL0Z`iWU-wia@mQk zJ_+E-6>|CF?H(zc%LA(ULh&|-1eFVEWua;_36BI40V9<2R*p290j_Lzi$?5=q8T@`9W*U z<|l3nkTSWkjW#JW0U+cv6VOA-H|smKV#fPql^+J`%Ukq4S`HdBlzal(_4r;84t!}U zYKihg2*d`7C$eMe3{YQks1#g)Ad^w^Kz-3kB?r7?v@-T)#xNFi6uK|*_> zQk36=kQX-VX-FTM)C7PI?KYE9J__{box+Sk>cwo4w&<6E{G3CkSrjs(5H_0KsJ*Pj zlx>RoAJiw6&nVmU59x93tleA5ZA9(cQ6{zEcs>_hN0~n;w^`6DW+6wJP6Dpgg5&Wo zqIo=Natl$woU%*2PPI^L&zbeoLerQvFWKHQ9gceZSu4cK>nKqimKL&c#nU5t3!BNfCBOOxx~A4}|eKqFaZ3T)TS^KG!V zRn8jo<p;o?J0^vYBW&yPE_GwUQ{txQ*Rr!<*r65-*8Mo@h#O%8BX;qN7 zP4rk|KitCH%$ZR+KdCI~a_cNdQhrD#6UX4jv8CVwm;jI%%U28MYhRnB-bUF)Rm*(U z;7H0RW%+UpG+!FWZ7#G+vBYS;b^zM{+=U7LiwF!L0=WMlz)Hs=BLWTr*#EI9AOeGn z0QUdEt$QpvB7prL+W;akxCmhXAKbdfk|P4x|FI1q0)vZyegC(lX#ZN{g{@}n}7r(m`h+!+_1-But+7zjc{ig44(U?IFx+5BQ;9}&18P4@)O;y zJ+g#?h2VGutJx&EA(l7?GM?*4#-JI?$C^uD`LRWb8%(o@JdwU2rLBw?Egza4dWmJYXbpW|NnkPdjov=7WK!J_pfBRK#6-xFD0&J zv|46;&c5An&Ri(5i!P$N)#XusPOcv19A%bVUaBXxy!2d6sf?4VOnFYKdmdhl*cVLW zVpp+$W^rQs>Gcwu=cJcUZiZ`3@J1kitw})AR+Y=2X#8wXA%)ly(bxqP{z=6t5|1V3 zL5JVq3=x7ruAZGGErys?@wcn(S3c8I(5|UU1o!x9QxJ2ty}pi;&9OuU3i3i^LHKsZ zs--bI3p6n`mr42A-equkX+!1`l!@=MQt<^=)c>#KaEEyz0;>!GT>r1K3PEuYffYmm z`~M1pjaeZAs|*3`|EsJ*P#i>H1rfmhzk*<6R*1kVLtvvm4d?&QYTC!u-&60@=M?Ad zud6L4$&%Y+2?KP`r6>(4Q}H$ptI=*&;O(x;SvUY~R7+)1MQSPkwx?<|G9`&_loE7wS}@G0#_FS?EhC6PfQIFxRwyW z{(mji7RrhUTwMgP|6g4^F*QWsT0&r>_7kB0|Foj1>WuPf{fze8t5$kAb-!&fr|x}C zXM{rdmwM_{J>@agW&7z#bgLdG)noIVX>td-13Uu38x_1qpqe?;EH^Jhv`Wit)C0=f zV5stWnW#Z7nUF!Auy_xUt+7N2oB^HUG}BTaKVte)7UdUZf=XG%)NDwlj3JSsg>H{l zwbPd~UMHZ7pWdR8om`n(W&08d{99^WUH}VCy;_1Fl&<`;Ozx-{wy-pm$_D?k^r$;1 z_}eyH+!;%}kk`l&E`Qs@&qBG`@*0bXfrLT%zhrVr7{!#_21@<@2pNX3#QA^Kj&~>+ zBCzZTVE0vQQIVeJd zrpov(E%ytHMJkwbZ=}L8(Era$4S1LjBCrY(!1ezstP~Up5m+Gvu>Y?R(3lM(unG~t z{=W(<1w}#xRtSNOpz>R%e7mB(pneHX0Drsw#0q8HBOCG&~tGrl@M^&K*qKRbh7Wz^s}G}Hd}P?r6g0MT|EqD3X$TU!>A2Fe7j77lYu^?xKsQgD!Zzeb*7 z;&?5Doe%D(u?88H{~(sK?-T<~G?*^mI_dnc>VKrbfA~QJ5P`LZz+L*Jdg?L^_toQu zQMC@*UbQA$XBMjEmZ9PLf2~zGmIo2&9|7$D{bPlkh`?Gy0Q>)1t5GZuBG5kq*#G;- z3ONyhwT8e(Q24J`-cqzr!uy}!s@|l30Di3ShpZ=iVu>T5s7`Z=V&}kQ%b53^W7Lfr zsLQzk<@W>)siP|A7+kjqc1&Ac&IMDIId#_I1gD8kc7fvvkc4*}!9}3y%@}ah*JA#? znUU?)8zj3i3hf5=Q%h)iOX;}XI!R#D!(JkkYlp*pafb-h?Po{ zagvTD=D;mQnM+taK1=<7vwY^7;2r~fM}TpnG}jKkwaM6&|0t88&-7dj_y<>6s#M%y z<{M+GY<)}Sjunplvk35L{J8)m{W?H21fhU|NAZe4YE6y zn1Tj(r%)`fVbKO>)T_bf_W#IBB8%qA?}br-og`Cu{&$7PI?N6cSWO7v`hPXm2Fij6 ztSkc9|5p}o%ncD(O$cEBUrn`vvLFI0ivafjmBkx#Lj+b60@(joQ*EFuh``Dsuo1Fb zuOt-hJJr8aA5%V|ABP``LT(^=uuFic$TrE@CNQf#V^x~wg6FZm(X1LxNtp7-qJ2Wb zLJb=%dMeqdCsPs*YNxO{(qtRS#uCTiD#-*hli1t~&Bg_|@X{>#&-X&2)U|t5xblZG zxuVnIWeamr0cmbvo!Uh*vBWbV-?5(ZIW{%dju}o?`Evh4dWrRx)MrhT9pnKU&ci*$ zZ8O^+H6BSM{R2l*;kJ-dmtl5VA-nWlE9yey#|>?Jv{QbIeh?*K)$LyCldRV#{1`6E&8 zC_XW@-st){qy2AXM_bGd5m;Ra;QD`c)dxz02&^Om*#B1&ZOjW1SX~HU|6g78fzluX zD~SO1|CK}=^Fjnx7XsM-S66+YG>E`TB4FG9#uaT|{Rj1&@>hCJ8Sf{5@OCy~KgNAV zu+8w-xhl1`)q)p2sD0wqMq|EIGcFi4;Z9b`Pn%?QT1{xVBwb1!Fr_!&I zG20`aecQ@5sK8~j875<;X@EIG;=>mFb>^F;DQ*v=2&E< z3#26C;+h9-8UD1Z48fRENkUBN1}Vl8c@Sr_OdQ|tXN&Nk91&!uKE@%l?s+&k2E9pA z0H=;%Rkm+7+6aWK%FdH4L5U^Y%2#B-^qU}$lMsg)cJ1e8fl56+I_YB zzzgi`0;{a8Dt|7PrB@FKr`xM1NMhjqzkUWg+t^9EsFYEs;bVF8`V2;SC9*@7FrF_cC#qb=xhaXeV*3dQr9x8cF$o`!;v<%ASQ8Nd22%Si9a(HFj?;>*hhQRw}?2jMy*n5ZUum5CWX z!@e?oyX;@~T?9X=E<&@~VEHkRnc$DK3}W`MA%pYJNBVL833l8@t=%&0C))(jEak6z z7K9Z*OhZxhh^lK#s{kZJR-|#Cm|M9UUX=Z;El5P<6oRso;*kng73gx8krA*Me|*# zl`CAebETngoiXTrHs$YnVdL|9l^;lwL&0Ze?UXh`o0&pEvrnbx$bnemp)DG@juYN} z+|6_3$lihbnyfK~SncfH*WkPq(Es0Zk9L?oBCwhf!1e!Xt{s#O5m;UXu>UVFzL+{9 zu$mFT{=b@Q2W3M9mKOo+|I3Rnrj7`#W&}2Z!hfAIqG5jz6mgcw_@CH3nA|VI{DqtoAh0^qxTkpYs39>L!BOE}>%(VwV?s zS#AUopa>6>X;9un5z74)!8y>*3_uY=DgSekCE(NSsbd$I)8t-qRO}z1|1Zf}Dut?L z&KuT3xh@M=6`9mBPCljXJ;Ti}m4+^Y^M4=X9kL(-YZL+O|7)~ju~>*e9|&Oo?*k-c zK?K$)0@(l8XvJc&5P?1r!2aI{NXUW+tWgAP{eMl-enb7Q>W%sfN^SWHO16=cvBZfn zjqGD;-KH_$pw8OC-A@zLpEcVL3TQ;>5%3z&r3`9JREbKNs5aD1#ny&O*{C|*V@s0? zc`}x`d`j!APkRvk8uhJT1DHejohmIJIst&!2GTON;s(?nd{~Za_R1>O&1U-$R~?C0>LF){k+LRH4~aS`E0m!LCO*h69&+8NhY_1`c(- zOdyVdR*57DTQrW3$|d7N{r~a}cbGCFu<8-O_5Z4`A`}o2ST+Q(|1TS~m@p!+>Jh;H zzv`<91w;gv4FT-`%LXkbj0miH1U70v1LyzmRkYjGj`BbC1pFELkkjOuSmKR6T8DQ> z&K*LwPo#q?(m#jJywAHQjoA<3&_9czZj@;^7oV=J?F`1FDoRa6vhyKm32f%Bs zvBcCKjois8XoKlc6{|${8~T<#d{Kdwp2%TB#9TIUf)9+ zkJC;ggqRoZNp&|l6-zt?wi?^Dk7qv!+G@N2?+>0s-5?4kWuh{90k&w~Pd+g!n-{>I z4}RZrnUjb?o`#zv>x$wN*j(H25MzjXmqdEBdoPxHqX>*`0$N)7J!;dFP1Xl+{tpdz zNI(Pz1_A8<15?#lP(&bv0QUb7BuGF61_lA_{{vIiSWrYDgaG#c5F|)I1O^5Hdj5aC za+{)kM*XUqRz9x3AAZ1xXyipWMh&jr`D4`OO3S=pww$xepsj4S;0!!GqU+JsTV#4o zKb&ey{dl(K(hsE?UM@6EV&sKbq6mk%AL2Ch%*{*5YBa$sPo*6=!aXd@UyNbrD#oKZ z`&_By!4pT1PM)4hLI$N~qtT*nb)JtU&ZjhTo)hIP9EWci^YEN(%RbL-!QpQDnk(q+ zOJ^JNM(KiSnKNe1Y+V+3)thB<3M>q&=;Z8D2r(FZc8t{SR3Lk>G(1k8izV6#t+Rt@{b`MtwzdO(t;GEhwt3FxXENeS{xDd@2%nzh( z#7h(X{|wAPj|D{pBnaU8Ujhn}5P<)dR5TV75s)B&{a*qKk`RFbK>+*zfK)UV z6A_Rgfc;+r3X%|k0YSj_{{{Dd9#Lz`uj&s;@Bi#1Gw{swKKCvNvsL)+s>*W)ypOTa zY+Qh6j+@M@5xfrVnb!ir>Q~SY73$RVrtoPpojy$Oki5w=AiE z@-)E|#~vk-hdSuf;>sBydYVjT#&d!XIZVnhF^x6E17XnLszxYXO7GRiEg zQIW)?1LX>2K#Syyf%d-v8RoH=h=3FUT>nd9K_VhB5C~xZABbwkLLvfE1hD^0VL>7y zFc1h}{~w5I#zGid-6P}2HKQZ~2{bT63=ziC`;T&&j`iLa7S{vIs&A%UQ19p}S!8+vDFb{AG?p)O>-8(whPA1S z{-4+;GjbQ1izUt!-4}0c%bD2d{7yr?f3+=HsG5|aF5_gaf~6yCopxTVb=W-k{zt@c zhh#)x5D>ui{~**dmJtz5rIKKU?V8} zbtR=}4fO#06ZPpN$SZKr`wn;;d%E{w=h9rW(O&Qsn-R)n{vl~mA~JdeTv#ByF0*O95pT5rUkj^p{8Cb+uO8Y%x;@^S0*^9cO#jHCph7t-X7Ve z)H|qWTBUNeT@&x&Tk43c44%B9*nthDcVN#=9prh2)WEs*DUGyc@qsh~g2aZl9WsJ!)r>2h|WTaSG+Rx>psqAiNfVmuoYADu6_#72d9$8M&cdDemP;sK z;s{ieEpSkR$C0iRE0)-`YXjNh_cOoovYzArl!_YQk#;Od!h-h{;h!|s|L2s~75%UD zFX{hY|BU_#{af^ozM#LPAJre!NAz3uA?Y%Z72=d$s=J|#0+ z%oOwSJuW4ah14f9nfPvpQpjhr6UEVNKEBJL3qAWPt*CXY%nhqhzzW zY$h{SDC7(A5u1`3&lNJ6>{u}yPdSv)+!#nSRv3@p=Tb6|b72Bx-YHTbuX_c`cp)3# z;ZO?Mi3}7gKM~*VQXrjd22zjT<5BXNQJ@y$NrwVBKpFD+(fHjiB|Dxe&!T?*ilE9COU z_-zg)o67@+`9d+CU=*llNGA(5n2F!&P(Tu3gR;f9c$Co$@MN>`TO102oXHo)^4a)i zo01s?}lq^sRqtM1Si4>@vn;Z({1nn^k z$Zr%VncP_XMoP&{K(X_giDD6A-M~`{fMfi6mja256(FJbbvz|sgi>skE% z4aR&*W-OnF+}C>)=mMEyb~L^&K*_|1Tne;;T)qHpRTn6EkWdpT&^A<&lFQNlpHa>( zz5jm=Jcs;>`Wf~6)o)Z^S6@~SLEqn|Zcx6a{GswI%4d}CSH2N?{@LM~AsE~NUFgNx z(QJ|Sp5d}b%R>KRpW&B%8kF4TD>*c%K^PTm+Dkqy=h9yEXk)o?hwptJtpF|1j{AZ` zE5g`Q%#J}r%?v;9@_{InKxxl$v9{%4Kq+g`8#7 z;33{*cI(qz*r?6#h7F%_(*jJOanaB4X^#dy)sgpwE`H3WfNbMXV<1ZW zs6zn`kS&wV#g8}?D0g5>#vgYnfPRjm6+i4y3fV$- zG(Vcl#UFDhS;!l5gVAS-QRut?BVnNkqYh<^VK!PEi|=#K(Fb~>WB1>(#$he_QGvJc{Hdj7)@Z#AHL|&XukmY z>1X(YLxVXFsJ3ivj|P%Cvb7x9#-Te+K#Cxsm%rum!>R_>C@kG3M{`D`;qxAC%pJ|P zF1YE!3>p}Twl3G3dfamn2zu)U7`CVL&c z*fh&E`aXM#9G_p8zM|8?(XKXDb#3;9K+@Zsunj`eGFr*MTi{8GCcf`w_Rq_^ zoqzXblNZk#O~a4by1ZcQ%Z@+PcZ&6Pt>z>m=9M(9WWCW!G6s0PUCaXtn;gmR&ZUQI z9>LmPv7bzA2vE)CYLZVNCy+Nj&=hR^ymx=y8^;W?iMt;cTdvmR{>>cQqS zJQ^J%*=K9jYrO?%qwM3>`vGl2y#&4bN0skXKBzR6 z7nMgL$o&kHjZXXt7~6|>$Jt75bea`(B|50kuIXh+Zt!Bjy4xuUx!xm=K|-*wgd&sc zJmM(GW|x_4;D|Y!xRu1b3}JYR09#-oq$+jfJ_rm0F_> z$1WZs`^Y+wv@A-R^V)HQkhG8ZLhZ9#tKBDjGHt8NUI3E}txJ;$QU2_rknR_)hqe;k zt8-ZE+vB8L=Ua*92hw?se%!#$okU%ie(N4vOlVhja6d4^i!%FCXIrfW>%j*eSZGu$ zWvgX*wQ1LF>q5$DH;mh@YKRc5{k?7qDSxc$QpeKF_ke>iP0eKX)kHh>OWUIs-Zrv%m7o=XDhket^ybl={jeOj%02XkQs6p z%mKTg3LqF3FZPsn=E*~or>By^1AEC+Q>T+{%V?J1nUq@9f}Yeg7HZ{+G2;Hqg@TG@ zp}8|ZdDg7Ly|8^5P-;+uS+CUERb#q-xYn2{*Y;&o=>TWe;mpHBK_YJ^l}e?l7>|&FBr+xOR25oP7eZDvWV06Ry+p=p{-<#2NB)p3lME3x41E(>A{pB&On>JDFpW0b|5GLhXK^P?LmPq zyI7p47RlBn^o^^1sY+v>b^P+e!d|9Pg#iJ^`1!VFRscz84RvrTxi9r35R*?fjd`;@ zpFBoGlc(%3cf4S+_j!|qlbD^*R&ujnBDT=v=G3hu?qUJEVdzY>SGhn9lTA)>VHpC7 zE(X+Aa+4Q>g3D%pHwNwhapmi2|NlJg|N2G!d3_(~{ch0yO8Z@{qTR0kN3{S9EAb&a z$OG&4bkZA~1r8m_vwNYCj;8bU$?3y~r%u`y1YZwYD$llHz;Fij$;VCui&L2=j#DkC zl{_$Yc=~v9`uM4-lc(XI(1~a$gXue$y3*Hm6~zT66_2STZr&8UF^E8&z(vhJaP0WolLk~ z)5GL`XOyA(oPxcR+e*@QSAcPbZn$8K@jK5}GU5l)QHBp3CMj>wngCTR3*1WXb7R0l z7KSZ8##XY^3k3CLFz{YK5LPsSm^=JH*mALLf!kq+$#zc=x<6$@*H&_m7lUp&8Psl! ztt9CMf<{f8ooWAH2lhYxtoG~bZzx}cKP4YBLJH6^^L%rFjyWprnBJ^p+rLUP#%!Z$ zl$@pEfvLw%z~p*p>gW{I7&Ly5-QES-J=F<*?Bt1Ka(kgYMYB%3uTiVo{nYNAuaW$^ zJy)I!$Xe`6)~+LoRMOCx;&Iu<_XZZTRWrKUE~ADWJ0cr_=%0?^ll~4EKi%TzB*iZ* zqWBS`lvgmmqE=n;Zy{M|sW${_KQAplH-$Kj)R{w^Mk<{|LQT_8#aTE?TjebzBatiD zr(98;hnw7%CKv7hHz-dk`f2@o?Q>dNyI=i1^`EE@D_>PU4&+6Dj*$IBdtMXK&yHoQ z&Bj8q1-5!HlqUVDCt$1;Ch`)@LPy9W;nYSKmzv$0X==yFzM(yD24pLCP0efb;#g)k zlVjxJaC(KMq-R&}QS#8xo;L#Wv4)Po17Ve(-c)QLz`adXDms zdtcT{zS00ynXM4Cb7}}b_X=`=>lxTm3nYss>}sT`HixA`iBts#3Toj9Nj1?mqdwOM=cl4kdjNuH)Z>l`JM;bFM%5h{e`QSxXw zxxR;~5Q?<_->BZI=vjT6_K(`1Xuk$yz;|gM&~8@0q&@)w1Nq64(?fd>)1e8h4pe8E zf$eiX`{c>V!^b9*7n>$KomH|bXN`HPXghuK%oMqaoPx&lW*}BB>kQu3`5FulZXBws z0}7|4gI}PFtG2-O#mB!{d@k2>!4x?dAyi|^y z9NIG-kS7~mijz|y)rXSgsdYQQaTgsryuwG1%kCDWcDYo(P&RAybSS)34nmmb>o zF*_2$q$uj>RsshU=-~+%|LM_#QEEPQ2cxY7PAb@g7;M++83eF$xq-vvxVymzLn&xn zsXcC(9CL|aA%z_|J%w}|IqHptV0NXuV>gkl8M6^=5FJQszG3F*Ud}DLZfn)@<&uOghV$E zKBNyxcy=Ls_(4x;*6hwA<_H29mljM|L4?|-PwyjhpSf$+J{x4ruUy1#!H4vbInUlT zd!CU(54I7w86W7AF13%0UDmFdx=fH^1)5JwlBG}YBU7KbYqmZcWNdfAa9MqN9~t}1 zT{HICAY*$k63*DC_mQ#B+%;pLjdk94IX~0+e@OYXqJE!RSH28?tlm$SJnK)&FxbOz z-+NNNfjk3~G8?Vw0Rku1GEU0g=%13#$WQw-vMWrl8TqZ}$eDFJKg{MquMBqcDYbUO|_nxMGW&v9G zAxw=v8$18MUP&t2Ic-$^LDf>uzz^<|BQJR^wg87EVU0u=JCQ44wubC%B`>bq`PSX` z8q$d-v{-k?OKq$E5H3!SKE00?3&=4bZ9XLc*7(5ukI%h5{L`mWY_A81Xqqi(RuPaPby69$dxHeGg?)YntF-y*RRa%5|7odyky~Wr}=0G8Ion56~tYxlJYH9FBMp?z?$gDRgdqVY^ zqB}`qz{1T@{yEXSLD}8fc=--IF(GPV)f1S)GL ztp6)S(Y~bpAXxssr2G{8SjkV0)WvpM=wtEF*-qx6ojzbM9#}gq_=^YHPVFIY&|7NF zYpD#Qep>2gaxO5MEptnywM7^HUR}wWX^y-iwh}5-AETKW7|pmPW+>l*9L?&Ph&^|c?*g_^J-fh@LVd1|uS7*R4iG9N2V3Yy~}X9|C#2T}AM?(pj>= zw<)-H+((<*LK@JfHgbzZ8fzKblw=Z=4Xm{PU#FZ`v_IDVg|U5 zXO6r98=$NW1gx;>u^&2=v!m(udGP7Sl2gyZNuE>g(R6lc&bnN$z@?xX*zmw-O4Ybv zR^Xbb_Z$>+s_eFt5*&v~kz2{@a7;fTWF}ox%5C(>gYNo88xU1f~B7zaR1oZ z1HxT;xC0NSWm_rh9t(21X43$lGSokfV=i`ommEt!fEOpP4(+6_6+n?V3KxbM>9R*E z()8gP1-ZmGT6!tD_o{Uxx#(|JVFh8wTDC?@yI7A^zy)ClWQFKC1a2j5Um5L`!WjaE z90zv(kHK|c?XR_;&_1T!tNws`AN*VuAF{qP1nsZkbYT082W_>oPE3b~v&}}`e3f+= zf263?Ot`znjTE+bDk(qhzY_lR>m3~gc_AQ(cX(U4#v)Ca4q0pftHB`-kfnzVA}eIC zNwW8@MJ*zGrZ(s=dyh4}&{5$6&k>>Yi>d;a6kKWTQEHzpy|n{gARLP)3~A!YpKm? zEM3G&AsFc1B~Aqc;NnN=oN+lsKi@X!V;peEzCITU^zU+tLCpTQ4%~BTpV8Xt52^RV zpR4KvW59KiFt90h0esw65#sGq~YbbaSWi8Rrxlc=;kX}qohw?kQHiHhM#j}0|OO+)!sr5ZHN48ov|HqVXR`j3J*K6R zY(yrCxX+g+L!Fx;*T5_eC;j^`X25|=uuFuqmqbXD-JLk})Q19adw0gWEUv^1yfKVl zRS7J;1r+8hm^Q-E(}z2o=v_so^YQAc&}9J?If7FC-#TTVqF>VfyY{N`0r<23&!e5K zp>-U1u#s-W+<{yujg`7`p>zAXJs&(FmIeIBI4z*t5+RV(Qr2+-*6zy6nXT#K*qc~{ ziCoB-RcIfxzoeH7iT1ykv+sjIl{!}!1s~L2AhW5_#gZ?Z&0jStCcT5ghtO?q$ueJs zorWM(;Py(?G7?&;->cmefGFu}ZYb=hZiB8L(5b*p!~VN|q)vrF!x=Z2!w|8mA^U_R z`>ty!q1xFj!_xHHNcVA8XijwGyEQ!W!6m3g6u0%n0l0>W=%dceW4rpda_osj)}Ap5TC zmOv?3eZUna@bd}U3)sxI>#+UlAw!TK)=%3&j==f}HlT}vA-sGFipp98+k~e{zHIrHhCFQ$Ni^81dwzvD5!Qq-bB!KCb>X`1;$ZeCWOC)kN*w z2Nf1j3gx?2SQ*-f1-d=^+C4=r*bMk)BXZN43v#EMot+>$YP2&^Rhv z=%x>Jwh!$w1HwjV`rQR)prcr+&h4FhKvlRUkc>CgcUxkH61&Qa%s~3ASNrQVZe(?r zP4?O}*mB)a0C924OsD^UhoZj&xBrQH3Osv%$9vKL!+EwlyP;nk6Kf5;$4B)G=VrZo z!#Yw65agpRkpnvYNN3m3p1^{l;JD87nu?=QrXwsYHpQmhxxaHiw6{QyhUXw0$-P7* zT2C=0D%#alcZU1t^0qbUov+nQn>!D9x8mGr&hZp3zkxiQ@}Av_+uzws-KPqh%0f5AR%lWo_jdNcLW_C5_BW;l zZ=n@A34~Hw${gT$8S#`kurA;_y}MeVwj`?m8&XY0o7J-FcflX{Ssnzk9dIvaZ!K6a z@5`l7yh9zy(dRShLp?AmvRKPDz6DmJ5rbSo8045lJqNj4J9!x766_eVTM%cE3uZc? zBc1I#JnTZmr}uG`*=L3x?|bHfAHw~ApUs*7?^M9=Uq=0B>YQ>?`QPoG37j28oyV)X zlbKvVCO1il10hTXlhF5j1169=fgG5GfD$rHW+s^llbOjJ2_!&x-9b^2#VaZ*q9O{5 z0?I1xDvPX(E8Z?Dy6mp^fru`v=(>3Ps=B(my6er%LwJPU&>ub@GT&GI?>hefe^pmk z{p%!Y08WSim+_1S){wFzrT9|a5jOwVg=b;CWxUNhxlOb+4_A6j?)eW9i&L?FUXvqj z8mkMNVEv<0>*se>&HDQ>w!vqCX63BQGCTi6gzgk7!5mUWDiKW&3o!o^Q}f4dLM61P zzGVNI*lCKbqTgnNfnmaQrHP-7{f{Br@%_(SVccr;&>zyf@cn=03^g>#qP@cRFe68|4+X_ z@1<|2HRR9>;sh}Nx*2;*_A=wexyrCyoMtQn=5`G3XvT6rtX&+y@qF6hR_R)l`h`oD z;B^OE{zRa2<)^iq<(>>4QgwGfM!5T0x;oqDr>PoC$Az2F!|WeDF(ZBJJ6T^*S&mUlXHmDtL$f##UgN4cA zdU(^ZsW+|eU?En|{=psnt$m%ne5+$QHFd&u8An>txFM_$&y)NAxvAl{j3doF_h=3w zj#}(eX8*OMftXhszcbo#((hXGN&K0=N)y6Y!$9~RWHZB$ z9FV(htDK$V!>#$&@-x{fGoq=k!>1u)s>bV-lGgGvIf~ygtD6ZDZb2saJ3x|&@462-etfRaXb;w_C zMIG9yYN=~LtE}P^!e&&9>LBe@p_F{QP$p-F+fgs-z{*Z^OZ2(o(2?q@I1LdAHe+XY zGQJZpQY^-3mD`4f+wz%6Mt5;0__mQMXJT@AF%+auamltNJx&<~Y2MS)cUjdtQfB|- z$Onjd(D;LKm9fKEZ8-F8^iuL|z!%45hnIrj=usy64v z4&Es{zv6_QV&JM|W26~?(urXQbcOGKm$!+5D}U0_9I8$V#qso5tB*l7HtQgG$&7F( zj@aP3jm`Q6cE)US#Kw%UUHJ)Te55}e2-{$n&8kTxgG&CTsH(2%>aZ0L-=#i089^p9 zm{s-&G~AJQOUZ~a?MbWb8{__e8Zmxi++)n8zk=PrpG?Cp%D!aE7;CX`oHvdduHqy` zODkXIJ%k1A6&9rAWF!j;r-Z$D^_$G*(By5xf|7?FO(R+m=SBbAoAL_g>C(i*&eEmH z8tt%0_|l|SDhLBKF6@Rf@a@LRT~+g?>Cm_QOu(L;I#lvWXQm{WD(+OsZSqw zEGk57|J#W9CF2uV|NB$=aq=dz?fL2Wo$!iWQ@IrcZJZNcj;3l*E!P!IC1)CvFjzJeu1!mLB6}L;E@+aRtpK(+=x#Wva#nRX8aHk7iCwo^+KQn_`Fk zImJMqJ;HZLX8$#GE-`nTfia8zgkFe0Ub@s8utS8K;-7aD%kf66R?Lzh&Q$!BN4cwN z_NI&%%NyBMIU_?6Ml`bNA>t<<=BsvO8HAB3&pQ@-O*=f8Qwj8JBUoB#Qg{F^m`_jpi_UT!1b!hhxNW{!o~#{?zi{%mwCMMLj_M)QV;uZC0*l!Jw0umJ3Grf zTlt}aXDg|PeYTRW(T>cViuxm~=+p>-216dDHc?UBRW%h&y@(R1t(=xR5zYB8WNSqK zb#g@DzZR+r>PrPJ6C&f<;>eTu#i24`LIu>ogj%stN5LBWHHF;IQT~$+s-Y(v=mUoh) zbE<%hjHC*&{ohK=0et_v%a~3h@(Zj0xV4(*|7>MXjHZaCEgqIj1#B+Tjwa`ts<_B1 z485?9AJ9D|LWrwyJe%=NtQL0#$)}*_`+#o6lkI5fZrk74HqcS7-AWT91i^|w9V+?q zUx0k^uU}>JG$mpIvGR50y#RT_A77B%b>P#%Qx^Fscd5wJE+0)Y7JLLNF2ocMK{>b8tCzKHV-?btRdZ9O~g*Sz>+CUy@T^!EiTCJnXPHO~&{C9Zy_h{@DDw z`5E(e^KE9y_`WfRZX$0WJ>+7t8b4;Qy6E)LIBw(fpJ- z_$cgK#S^23(fCe$9Pfg$+!tFpiphuK((>rEnuXym@oNF=SY5wK8A~PgC$@~mUq<;N zKg_>3wD#;-)Z5j5IjnyXhy9DXd%D|k`bNAfs*fc)9|`K$_u$-z`pvB^-3Shj-@6bM zd=R&=1eYT$-i2#cZdzF{1rO}wax+5tnYd-;Hk8&x^H7Yv`C`~f-}!tMV{<#x+$xk~ z%hvi>c0=jx=+v5d`6dyoR-UhNtRL*}Y^_2uxZH-)>}YOHW0>e%0qdo056cstVVU}PoOPPno%{<+llwt7* zV>6;6MKa^}9jwX)F&Vs-U zm5j%~ijy@SjO-e=3?@?x&$b3qpB@Lm8ScSq+Q!oE$f}taElwVf*sH$ph{u-=Q!&Jt z=dX%Z6wBH*$if`uLf*?3D*J1C+HgaC8;(>_1MI8i%ly`OR$YW>D@o^tuud>HcSE#j z^uj|)`PqUdk1uvvx^4>&`-rQc0rR>n5+QplS+SzNp`)e01M|AQE&cubd-`&jUmhX$ zM`vE3Z4W1~AK&w`Rj?si0JRvM6;nu%X24wgtLYZgu$>!Oz{WyiLWqUACB zuQ7aL?lG=4_8ONMYw^cR*Gn}pTn*GkO^G5QBncK}T0Z)*V#0jvgM($+eqDrZ{}9Bz zdx0+(L_ZcNjNNTnrMAegSr|1Ys-E-%!$->*&ci+HsA-9?Bpd+~kOoJSu1Izk>2K_9 zJq?@8#@)SbAZ#R`^GuDU6Cw{ijC3_gIm-vNOR`k1ze|2ovpZ6EQ|_L|acCZk^b+%z z=6B7{oA;XUGjA{tnjIJmEHlqAXPaY|?{BK3uz(pw zbera;2(oMp{p?c|IPAhI&Pfr5eC(0_NfJ3u z(Xsr3@6Aq;?K+N!RI?NWE5?6KGgE}>anNJ>CrZRO^IX&_>&BIzERir*K@1a9)SS_NMy27fi?^M5DCErwD=y2=nNU%Oclz?Xd}h zG`#kD80?NwkyUVAx2aY^@Trz>2Q?b9MyH7FmUS_vAC*I{7nphE21Xt^4wd#_RqHo@ znX`X1J3CI&$I|gv#ks<;%eG*8?7B!nc&lO8t0jVQ#%OXm6eq9Q85zDb2OypAo-I*e z!^wKSXRVaTgPTQ#dBr6XIn3L;O-`^lMVRI)AP%(k3W-oWXc*k_SpvnQ8$8jn&P)+1 z8h!)2+9iT+K|Fj@F+s>E{5U4N3WXHGvVG(~2qY@t4cYh53;7bEGeLU?Xe5E4NvJ{u zk4DZCgw8U6EZc8#1PV}{!qQrq{hxuuen;s4ziNEixZOBnL`E;(5zaLV#;L|c`bYXW z{Wkp^y$6v4Uq=UN3tdl}=sa3S{z!gKzDYhyK0@9}uFae!JlSkC;Bv8}0LH`SR%13foHEul{28HSY|bXm%NtV0`fHx9B$*5IaUJ+Qa*b$1 zIDQxuzxR-W{5Z>3rwA6yOL3KgFp^*eyHcXKA@I@J1skzQ9nx~o*jc1IX8IKqb7ll^IJQ zUyqdx<8i#jpzlM?lCMd|dOF)j8Wq&z{%zoaDAWb%0_Er6Sg4do%p_(vW7ggXR7 zi^0&jf|J`*h6ak+hZBZ!F&EBq_aVuc=ZM*DlCkN4n0+v1EHC`tTT_Ns<3>b2AQ>w^ zHyHAMg`unE_r6auA6-m=nIO3(WvJtry;m}5hNy#^C4;*a>^+j<-AAx@O9o&!xyTQ> zDP>51GK`a&;FT=$4u#*~$u>ZkCompvu!?rvcH{{qrM%ty=z%{$E_<~3$FVu3F+7nn2gHQ-5{3iOb1 zw{a7!zYo^G%CL+%#u)k(eT+VgNI^H#>*zk(M$e~9=zN?V@C^AG`4%Dw+(F(-t|lGk z5lqf^hOqjl=qbd*jVo2I@+%C&83NShUu(zrfggYqYi83g7T& zox(T#NvH4)e@vefOCZn4=U@Pjp)%8f|COl%^o)28`GX`rO9k>jQocB#p8LMv>lAtU zolcRLr&F2i%?dJqn@NX$l*{~$P9gKZbqbkJWn{9U(0{4vFnEt;{#vJy`7515=98*S zCV~7io6e18KA}^{{Dn>-^YN@q*CId9rW0lVnNA_|r#gkqpJZjC>_3+2SU(1{<@Na^ zokHdhbqbk3kTQh?^8IW&kqx}u2Ve!be&o@ZPcjSWYhUNE!wm}rv;myrc<=QJe{I!r|J}Co2yfl z?G&A&Y$xj!WvkaI%Jwpi!coyVIz`z|(kaR|Tc;@7ES;ikGj)oxov2fkZH7)!w&^-W z*{10fWt*x|bh31cPEoeWIz`zg=@ezF(<#a}QKu-|2|7jDj@K#5cAQR8wh1~#*~V)W zuAh$6DatlBp@~&7??oME|BFZ$8~?NZ|0eS=@Bdes7VrO`G9Kgo|INmAy#GHJqkq=_ zKTW^K`~O?$4Vd@ufDc$f9a@jGgP$RflSj!z9k(j4(< zbB?%ldyY8tk{q$=wj8nO#aUuC(O2h4k-jQN3iP5J3Fw76;?u1;;?WCo#HCwu#G#vW z#HO3XNI{A3M_(yZi3omlqf8|O{n7JfOR|?Lj3{|aZqO;TX}wONP3y#S*pwxgK+nsh z6MY6fSErDWO_noVu1n0`~Q;||6fYX$IOS#`^?)g0=Ncyfw!1T@CGo=B*x=-19%Yc|3~l! z&~02~EW;bXOk)&%5^n$x(YxtQcmwFe+y5%O{m;R7zo+o_|1hloX1x9HBbSPND9fCY zyBlT=hE?=IrI%Wh0NFM6f$3zlUbnG<P$qeY> zTspqfjz&6#%uuJ0S<1=u={31@e9tjGq*KVeTBneCRZgZyugs<6OS$PmokHdTokHdn zIhiiKJeQ8I`K9}H3Yq(K3YmjBnGPMurQ_S!X}?Y(vrngxxi=@%roFjzvDfU;DP(r* z6f*bZWLmUKq?0k4xHq~?r;xc@r;ynxWJ(FNBk}lbdWlWu!JF)osYGlgx>F&1i63oG z2%iPOq%3XAks@tHCp-x*Ke7J;-7yZY=nF|Vd;gEe|K;BQ?={|U+-O{F?1ufb8GxC5 z1n?vJ4eS<--vWB+cDjxR7y*nUzrmOPuaW!7oj6JGFzHVF|M)F{Ptvf78eHrxfP942 zOqSxk=1!J-m6E>|<&jHH=%)mc3r^^L3BmUoR)H4%WJ)m0!^kH@ODGEtF-H44ox)?^ zt5dY)$90Of{Fr=_Sjb54NlCn_j^3>hzV?jXmC9nR9j`p2AJr+I@R9WHI4$M1gce0v z;`LlKsU^8Io8BSsV)J^K0-?7{B9>*-4-0}1a?m;~%BCL@Il$+4HkBSP#HP3D6#4p~ zyj!HDx27as(n^z=I><|w;L;DsRAP}UeP2rAC9d=qN!Z5{%&XG(N+OoG(wh~+SGUsl z$b8CO9%#*X>lCf|E}f!GH%Xa70)1yLUF_-Jp;O3wyG|kVNKPgq?d6C~-zx8n!*20? zZS*ZV#XHEGb&7Y8H|Z4meIsmt8he^zQ#Sc18~;x?YKZx`^Z*si0N|#VuK!0hz%)kH zi$yS6^3OVjxBi??;jRBkry%J6i`cOCQ;yu3n8b)D=mnU%HB|w-y^Su$nO|vVPgh z)oVA@uidbD<)$t8-MZ=vev}DCti1pd%D`< z3P}pMukr#u7o`vdOhqIG96>FfYXJvKgSFEaFCG&f8embk%PK51YbY-Cee2pyTP|3- zPV5;NDslY+}qcQNWxc~1-7&cHrtKG$&33tI$^(U4UNYcUnVA*N$5?O zwVP=!OFOmFnWclZvo=m06V6hV8nIDh+v#uC+KL5jEob?|-J`cJlOl{=YgI)OT4Okk zT~azwJKc51g!9q{&ECzMCyRz|#%#K>Er=w%-CA}%FD(N+e|M(Ijq7@@pxiQ>8eV~lGeP(xdG}DsW z9?i(pJ+ifrBrWeIA&|i3hroY-ZU_NFAou6;yo3-S1aA0&kU&C0LJ|UmKnQ^lk}Uir z_vb%V{qE@=jpRpU>GXPAJ*Q4po%*V(yXu^(Q)eGNA*)hsvRa!dsId$Q5m6)$#$tqs zFAySJAl5~{0*@ig410ErbzWnw!2z`zC8*mpc&~MXM>DTF3>EF}8p`WLprk|i6 zrGG$wkN!4&KmAqu3-rD8-Sj8ukI^5YKSZ(ki_`CHfqFnm$G!rN`+g zJw%6Sh901Cx{Ge3o9RZ{NvZh1#eWmOF8-tVCGiX5XT(p4e=PpK_&YrF02!A;?qJNP zX?t}4e&I>AFj1D2OJ%?>uSl2bQl;qq89H)ibmZJQ4wl|&2C4jj)D^>DJeL|JhvXu8_nUu>?Lp-@slCC&&RpjS^%aCI4AWOSc zuN73eTCvDLE7qifDwXmDwI>G6N!C~+oz||veZQu{{a&pC_Z|%zuCQI3g8QA?1l%`j z&%nJ?dmQdmI|J4DzqONa|2OSnxPM(c0{4H^9)SDbYC~}Uyq1Ccr?dlb{}U|^_dn8l z;Qqg~yW#%Z+7`I~x^@TLe_7iI_y4Y~gZocutb_cwm*DpH%W(VtOK|(1i*UO-3AYyt za8sXxTlE~=E}n+lG?Suq9B$7XgWD5_;dYM6ar!>E9Up+(C=+GmAlzQl3%4wj=HM>4 z?cV{ny<6dS?_F@)6@}YQCew~haNE)iw>z0|-Cc0o$OPQLT5xAO+`>%KcFOwZehN1t zJi+_sztFGHzomZ(J@e!ABlN@cgU~O3h5kH!4}BN(%D2-Wpl_isL!Z1tYqU%!p+`PN z&(Tx#VS1RphW67W-AC`CchkFQH{C$nA?e>EzeL_i-bP+zxj3&#T1=#qsdREE-Ji^* zQ@No?%A#bG{i$TGKaw;kgUNwpI@_P^j~p~8{pnOXoynwAkv^M}?9U~0naBZ?l1xGB zL&;>M*PvuG$<$D;Kb48>Hz=9(U^0~&N)JZ%8I%-IAn#-*lHin7DxFFu2eR2rHnLZz zBnQ*kWHL37OGV-ar9V9Y5)EVrBlnt=B;=eO0-5)?DUjDaF3Mmw71?c2vZ#xol*cNl9hW=`7>fYEhB^NIEqX*u3x!s^-phXSla+$$M#H6HvlI@2!w$Vv}cK`TQ=wHHPSNFmF{MGGnKX(;6 zk#P3v2DqQO3LQmwbm8@IKfN#y_wj`q+)ph)w-!z=K$jLyEI^+YjxU^r`y&gFzrm+7B<8E!G+u4erTZ+?hh=m ze1|o7mk6)nueSU7tL;8*8Yn~jr8cNN3(o`E6L8OI@JbP~>~$t&v_o)DYgxFbGW@` z_xut10DQ&SPy#PRV2vSg+j_dYbGBTV&%>myE-81dqd7rQVKSnqa#6`o6e^|5a!H+T zTh~dqb(W+#8D@SR9dxsx7N!)sDNOeZv*r4fT*=SYq)GXTq=eSD(`^P(>58|}v%-v| z7D@%RkS|P06%{zEb8<=Z`fQ%f%#=`1h>kU9R6^S+9S-7A+Bb@Hx4@*3YJ7s) zwn3mfghH`ctyfe;F{95V~D>MaT&I9YOf$j{xfbR)+qsq~=}v z!ul+HO%2_kH>@O;rJykBidrk=*_YU@rc7uBAsjt;P*}L6t9pym(o7*gBTwmiNk#Dz zM7N5zA)F~{=cJm#m6}dXszWgwuT{(Ci9+#W9@NG0ma=TK&x6Q zv3f5{a}t!t=va^~FX^N#l}k!PF=46zQLfBD1lDJPTc>zIuh&`CIxCEoXBw))cy-zD zwAj(nhepnyI2TLy#^NB9%BBf6YusTjv3h+x83*P?rWPeDD)0ZO|68-KJuLVdM}U3* zMd8HwFRJ|KAu~F;zt1 zRzQG{|H&tb@I|=&@vR_na~bu~@%oN%blW!J>I@$R>ZVxG?l6n2(&ZlU8PsKs^T1qN zQDsmFH7dm>YoMLGT&-O+m9NfKtYCeW6eZ71uueKirxwcP03Eg-D zZw-f|nT+tJr#TvyZiuh_os*@@u*%r5MBAkGZj^jDmW7yMclInTp7PU)Sy_5DXr_wP z9ILzMA)uVEl#Iy;UzOaTY%>BImLNBc)WGeZcCZ?h0qs{kpsjO?%%F&S)PwPAO@@{W zEn_}!O%Y%TbUfzKVaD~P2!O7o;Dh8@&Rq9v5v^H8l8^tpggHY09M<>F(g$gm_$l#S zVpSXwHwm8=eg=Z@y6y-Z?CKyR0ttme#p+DoY+1Ten4Rt8YImg%)Zyw}X+pdZ`)1pP z*f+i|zbgJr8WwIJYZ74w){aO#&NsdeaX!c5^snzA<3Vv)o?P$F)$WiNkN0^NuXkMs zxj!hLJfr9Gc{7*Z&L-TIYDHpcf6nAib##zXo_4i1)yMM&8;e|d-YmQ&juj;xZc=nM zk1zAB5N0-?WktxfcaW1oMc`P?RuxsM>1APA@o1?wQ#zk&DbLsB;v~EWTsifHI>@1* zoXQ17ot$C(pEa{c(hhPYh<~zB0Yiy8=ZcXLJIGj2jA@mb3QM)>tm29k7dl9)A(Ao= zg|_7R3x*W`{?i8ueJ9-TLIe~sq*UuQ7zZAd!L)b4F!A@zR;CWA!>IwdGO)uU_bhd$e;O7gN;OE9|G6IN^ZqZ~ zNyJ|g?i676!J5DL1mfzJb>Zmd&B7Zu^C2@^)ye*kxCh0Iw5(CEHMI5Feg}!VN35|1 zdp@u<*z&L02p?>IUzTDSl+{ekxk9<_T5}Mz*apU_7p3`zk*_&cw+FO|h2x!Jw*T_w zla9%qwa!-Wan{e<+%@J2T~_58X}D({z6&(;wZHD#1YCmFLIlqp_*`S6Q1e|Kp}=-b z+h73c!!FFc0vkBluGAV|nrxX9Ae0FOt=3r7kYI~`MEWY+1&QtdTl4+@h63=)MgjI? z=7g@Uu26`4&)F_AZmi`hu`SrKlhp~>ExXSgFuu^E)b7*gbf;@ozLEC6p7Rx%t>-F~ z4ep*^#>L0LXC+mYEAUdfucuI&E5Lr_(ph6~t};APuT}0X)Ya-p=|WvmAFUT)=kok; z(m^wsfe7tGQIE=na&-!R=~g}V^%+hXKhCPK6?ew-bEIC9t3a!;?c`-xqIRNMFI7O- z0cn`Kgq2|?#Jy~-d-bpkOYc-^7`9R-b&4t0Kvw^K20oMJI$M4<%ywm78AvCgz-*n- zeNgN@nGqK}!xlJu(n%f6dpVa2p5X>?_GFGSc=n|G8vuf!q>FBXWCS>XGAK4!KuAGc zouC8eL*k$r^akLJG%fJpHxm(3bpi-f2BAqcKm_VQ)}+}$0vURHNrYPw*Z<$p{*H+w z0xKHPg7K&CfK64kIH7L0k<$=$6!whCw(~QKz@cM9c#}0Eg0CNt|l=Imd z|9iU|12g!#mz>RY+^wO}U;tB}hGql{`C%FVV>miA zB)sW%_iUTbc};DFdzNcbqwX1}Khv`2pZ@v_-?ejWgL(z*h?C`Nfo(BAg=ioo&sPDaS-*@eR>Oa(y${x!ID^|zi;HcUwI{s| zc14~SGd-{clb&^S2~EB&96fSGSkPU(de}_XI;V%_ zMf!3R+ZDY<+U6ep_;4(1)Z;&{ais1Z1}Wh6smRB8Y+VX0iegJvJa!t3$6R6&#AYn5 z@$Ai5_Goyq@oQosd^^YeYR;I0Fx)*8kOtCLKiplBt~>5Nc0jXXG?=@ZnWzH&_9Pab zjBp#@D{UMJqY)_P-@DvpHp$B>sP8(yWl0Sa8e>gwzQ9{wptmKH&1!&woNVO}bTQVb ztwR^ArF_=ZM|TzAh!kt8y$bB48na{ojHD9}s~xhXB|A zi7_I^M0SK2UWkB+fNlwWW)oko{l5%YKeoGP;kr)72wT=v+|bsrh1njJ zjh?oT-oelPaIspFVEwgcWq05dd%1J{hULD2N-3uJsYqqmgJ++)IHB)@a+07d;NIMG zN}{1EXq?J}xw8j0kimv8|1jGW>V^X6|7L5)zlgvZM1X()$$0|*PF|1V^N+@x_TIt0 z)4nb0_-L^AweiW|k9YfhFnGwaJ{QdwM3}y!Ouw%UUlgYUEVmKC=L5tKe{#O8rzLr6 z+O>nD#q(@^Ui{3_J9xzL@hQf4e8LJEzYm(OWA+a-J=+(QS*AH=i-W56+92+!Okqn` zK()+V-`hb(qCOui_UWpX3(oHie1UY27Va+$kf(vW(P6$RRpYXx>uWv$0n7t4N_qH3 z8ulH&KFW6OALvpTqU)b>@Xb@6S7fEZp_`?6XCGmuFaxfY^8Qc5(fMT@_MOSM@_fjan|6icrhORG6!T$fd;S_BG zr)Ph!_?Xxud`)<_@SL!Te1`lqdH#C59h_+-ZVzocvPs{*t?-df-uS`JHL+dmrDCac zBy?~%+Hjmoy&}UI3;70mHrpRd4Q>qWe{_?_;e(!yhsd(CoI0dq>EpMBhNVr`!aeut zY=)#kp>EMZjH6wl;m5Bbv3gDJk7bT+2n|1T4XIQsWq6}NLaFtk-NykH>ufs{5sSb| zV4GPP`0GNuPc9mTC0Pa&GgKVJ$#jNxk1rZWnXeReizbisY)9K}ZQHiRgflj5+6^QR z4*wh?^Pg7zu(vk|#Qxh94kgG&^9!KlEAS#sb+w0fkd3CzFxAx-+D2~ITZ59y>!M(KkkP^$;-t$yhI9Ws*i?t9otlZ(_!Xh6@0JjVA{WV%hLU#%cX2Adr%DR z8e4=P60YgX60@=Nb3)sgCInTyeo|ob7HRNsNow*8JJ!TR4!Zp0?d=t zPavE^#nK%+b#C<7=$Y8*Gh-)5&O8}AKKf*At-`pPE zvq#Xqxxyh~(AxCZk@Gp`Y5~rWz3N1{S1w)YWv?)t|F5u@9EyVo+-wB+jIc7r&LMWb zzxim!NhnNkUreBmZO}{B*=ws>adKa?M>;rW89sx)KF@gC!5-_Hozn(yYlVGana?!O zJC+B*M2W4h;)U@GHxIb+kA1lYZ{tR9;5=nEvTKNCewsY4oqN2loqL>)pBqD^E3-0q zl!Q59V;DGmgP>`@O*QcKnwOYV_Q$zUDg|&ZS2f;jYHdIcM^Up6r3ddO(`E2+*La)| zQ&+Gvu8sC=kG2+DYY8v_Lb^Ln#{qj5EZ&VpHE9OE-OeewRDuZrb85oIBf;s19O7cFw?Yyxv98O8|PqPr*u!0s}qo|BC(Y*_AIAZukqtb9TNK}ZMl~K zeL~cnkvU}cOn;XYQjB8u)ZApOJ|J=Wd8Z@<%`8o1xt$<&hO5(YC0oC)C+$UArlQl;Ye zf0evTuo#HIau8tOfAs&m9ON(#B5>;?!1_NG!bE&U_%i(Y&s)DlOD%yu3V(Koeq#70 zK7chAA{&1WxCW`lA0i>1(D%b5UWfo9u)+|Cv~`fqP9fAu zLl?|*rC*>>ljLq09Iae*hwt=RhDfjfPIdjk6 zb+MRS@|$({LP)JpxyZuUGxPDHbFyET!A281H~It*x|p&b)BJH=VqxP>eP`jLdWm4J z2K!m%qN2~U*i_B=JL!@-?hRg+cEC2fITw8ES_qhXI*IIbNM*KAanc%2vH&H4HGgFm zAty86WalK5j6EC{EwMoE4o7o2!Psl*C?aglC~+qUezd+oWUOc_1s!N2aoda+pO}Xo zc~<#h)qesy!`;zs+k~r|c%v{BLhU{6yq9PX?g~c_9TFBcx;p`z`TMqiZ$R1wRgcy5 zy?i&W)uaA@(f1uPAOfov0qp;)wra6ph`^!RjprwRRM`bqi=^atr>_<9Emgu%C#Vto=ALeS(=l| zrbd*xcCwy9Jy%onI%vi^rCwOFJ_pdS-F5DOMoO((Re70u9X`VJ?0P{7dnJ)Le@}Z< zJ|YmlPtWi&#ZI2$zw=GXmrpeb?5D#-*D`PK2}h3|6SRTgI(9WYZ_Sy3nbzRsEx7e2 z2)!h?ME#%ErLDi0D-E?hP09qyW`BGjV6c_40AGA>P+R3|u=K`?-+!N19g+}%HG;r8 zR?g5GDJ&Kf5kLf72;leM1qc2>1lAM+*#Fm5bz@->0T%+;|6Oq44@6*1A%OjVO;tA* z77=hEfcifd9QXqfSW^hF?|&QVCUm#>De;8xQPO>NsF&OM-`K|Ole$9zIG&K5K3U6K z=OhHt54o+AL2S#~0b(69W$n>`9WLIDEo@6l-QL9k9E{@H`_jY<2NYDT!Wke9o;bie zTqCW{Hsv^7SwL>KtF?w8?oSq6(ZUIPaHK;C4$A|_4^vVNcA7xM<@)-7ecT1u#R86Q z6EE)P8+Np9wrSb1m4xBIt;!zS1MVvGV`<5jtcCZ5qxau0I4#?btelH68p*@Wg)kzw zxCG;PqCJ`)YPu}JA%VV*!dQ{eK)+vmYOn60aoitOdnrdl-20jrY6UFd!14c@dfj7T z5djwh*#BK{;15J#O(B5&e@#_478Vh3A%Okg1qc2>1lAM+tp8JTCxP8RABI21wQ%1- zuJU+UcWh$qs^BL}6w7r54!QLlN?}ruxK$qhQJ1Ctd%jwo$@9G~PW4~o!Sv2h|MOTI zeBbbWGVJu+My(v|iU|m~qSgv|UHRrz0VWn^4}_zcjPOd>p+HsY6H2ir&$3fu0XgQl z)kS*H3tI!nvM}QZQ^aGFXn{~`iw4*~4|Yp>3+#E5{20QP?q3H*x)tUUy}#NUPOzexf|iNBj9 z=>i?4qX8&zj|^%$9NoWP(Dc(P&H0^@uT{Yxtmo%3*MzIb6WX(v$1#0X#2hXrdSjI; z9F$Wv!xA&8a5Rw+w9R~aXD7ti+`k?Q%9FA7>~*K>&XY~$b*Bhd_b0iFhF2tGI_W%< z(@=E4p*sE=5EgLMC51ihcIr7>^HKW_F{&+o!0hy+P1#f z&2HWL?}uG2%h9Lw;N~q{=V5)o>RIgjFOVU^{w?Wx(@`NrzJJ4#;vh33fC#K81aSPn zqN)RhK?H6p0@(j=D%_YEBCw(m!2Z9Yssn{V1a2w+Fq4+qa1+EANtN*f>G)`f-hE?ua>Z>mC# zpC?_K(6}dbS(Yk3iDfCl7habQM|bTKUO8shI9HYPs^Cv!Zlvsh zWx?fF#g5w4tC8i)jV4AL@Mq9b4rmt3-p%b?8|h4&wJ8a9rkB8Oly9`y1T;enEmj=X z2-t#5UOX;+B7x)oWxee%5+blF5WxPwDyk6+fe0)M0i6FY3pR{|2&@VO@cX|isu2r; z2rLVMF4_nCe|Hn{Yr?n4Zu+bASFL0qge&!~j^D@Ky1h}~TnP#asa7eJ^R6|YN&xv$ zxArE0%cIHxMMWc{QmxmDx?09iIrW0RYob=D&F9Virf%hyC7^e=tFOAtf2***WHRp` zI4>0(TRY>0QVEoAY!k61V0{)=6?=$HTm(87#x{k(wfHs&tAGWwv4nPch_7#6c!}$R z0^(l|MK3f3Z7>yhHBJR>Qyg^I0(h{gRJ zn@v|0HD8>q=j*CmmY?T-x@=Eja1H`2(NcmLc=Q>71k^80QwZcqT*qnbLjV2Y=)i#R z@_M7;aQA8MDX{MZ_>8+2e0i2t4TU22GUsVSuJoC<%3fs#$`;F?oU?uP#_WYy-ZLX? z^^!NlTo2^U5ZbXrGF<=jU3k-BmWaTLK>+9fE2b(?5JcdnBY^$?rbCVyA_6N00e${I zMQB=F2m61f$PxH&X%{_CrY;>1vPSaL}q{q_VjQfk$z z$~}hlI-Hm3+4aUCAK3r1cO)Dg9~ZPkd|uj2)ETLwDvL5a)q2@^g7Lk)baKfopHqp@ z%T5i1q8~mnemJqP=fQ9^9v5Ej$Lf6*OHp6A;7Jv^A#2!=7_% zYMLd}x_(WIj)tShjtSa8wRfTrpK%6mIV=5 z8UkHl@C%VF5kDmM3O@l4z3^Y~#jR`$7mn+PHt2_d7mBJpC#$lg*iVyg~)y+eNE&Blh#c8QjFB^XN_y&2kFf$7Y@eKez z^hvoQD-el$^K(Wh7Ai%l3`xP68`Uc86{xt6vyR(^aQWziUDqZ`@x2TH--EH8+X!@~ zgx2v$I66EmXuE?gQKrSvYhD7ngWo6_42+0%rKWUjhLL=g*#h(zT z#FX&w!Uu#m3+IH5IvPO?@0-qw_J#QE6o1y-^dd<7?8kGNt)&SBjAyEUXc|uUhXy???6Dj6V-aD z0{(5h(T;TSXk!7PZnwyrJ9v@dIL`+9+1ds-L=k$0=`-8 zIP06nIaycaqF31a*6}z40r{9B9+@u8g3IP})AgANE5CtG9yb*b_Xr!=jF(GC3NUnf zNG?lO#B2wTxPOs|hwGJ+Bi3M;$I1l6a<_xS?36UCBHMY)po$!yh0z%-5<1E@mKGGr zjMm=47W>06Jgo7!Y{9Z^)oc}NH#fGsEfz^Nj>;EG8UqtMH+i%`_CDIiV51!=bhQ6#XU@g`awK|h8P8TW_ zsjPT@%I*oMCv;gGuq%a`Mr{PRDJ<4x_-<6e6`w~_0lVtw%ituCZ_+jo3ox`1u=JUw zR)WBaDoshXy@LtRRPgQT@Ii2HYWLsBUXm4-J}56(&UWg>Dx_CY^Du1T={RLdT&f|I0$b7k&=LbKYKuwhGvCm3RuSMHopC=&5-GE!W6jU~ss>zor;4BE-|9|Vf@=#(# z;JP8ezW?pQCkTBHeMI~x@r`01{J`s0M&QZz_2kfjuFhi}p%78$`ew`0l|In2fP0}n z?iz;sggp(^*a_w-CdL&gsor#NrZ?L=*gMplO7^BQy{T+(I@z0sfHce$|APJhSlfCw zIqo>t*_d>tT9J67r$H4`1$E34(v?E%$>{F$!WNcpwKml^!}J|+wv$|W-V~jaxE|y% zr<*hA`wkv73u%)2%uk@Gm&OqPFQ2CCNp9Eq4xWt}$v}oD&*kTNm`OED-JSSr#r0%h z_xX;f4>oW>5tzq#>Sy_5E6MZvFhze%&_&!Jjn zot%SLb98JCser)TY1iTWDSP-^l8WFNs#?i|g|09IL7pU}TCEDFd3mT-Eb!%BFT?QA z6K=LN4vl9x&-)q6&O6SRuFT486wb!y-f@1=Kro?=jq^#)!kACZcq&CHH>;239m@qR zL2{gS7K<0lGMi2`@zNDomaE}Y+^G4=F86GM_r<)~fNkgQ9{L4$>8v{Nuq~^_H7Sn2 zaoO*Z3tlh zzc&0ZHX?8m0)h6a(_4%=85weaTIj(k|>f!w-?WdjH};dJd6u zD-d*mbe7pAK&r=B7Os|xz+V#kz%Zu|+kCU! z^yNC1z>Nu-8oP%4nI_SXJ)zz4B&ZW_96%nC8OBY8)EU5kz!RWWJRoRs2dAx{^6(Uz3uUkrVgD)Y z<&0HeIiw;b)W^cnL!cMl_#uG(-wzd}Ap&ay0qp;4qn@#ph=3mg%>EZ9Q6j!eJR$s@@HqK<`Y`;|P8Pz^ zdP>w@@3Mgy*07oc<`OWxak~-!0nVn}20w>M&f+GTzrkWDshYM7ZyaVw36cbiE0sL# zH{T&>8y&>~|I}092#Xhj`Kp#nCgt^ha+-n6mZP)lvY2!xfk}tG1<%562guO5+ri{y zDR|K`!(O*o*4~JXLNszDO3#F&Lz@LH>@L1lbhaTKBv4)o$lb+g<*1lNX3+uUbFXcW z9^5P_{+Y1!UtA>phNRgxjonX&qfdfe^_U}FcNr}^E_>ik+kL{H_siRdkJXNqjxLZ7 z7c07hE1~6{3r8jBFyOV#vAxCHO#Q0fO5N@#Z)hs3#pjorM`DYY32fzLZ-Qape@cIg z&@amn!b{C z;>qd+EIiQr|JMlpHvJa;+AULX6ciCa1eT6K8x@3ol;6b=6*~9f{D0{nVhluJwIG1~ zf3?&kmID!3Is(}LmyQ|6Km=9`0@(joOHE=q5P_v5fc<~zm|+Y=V6`B??Eh`#bwsQR zpBEmccf;dNytHGJu<7@R=-Tw_+4Py8m1;Ax!d&-rGjyR?tk${T`6i6yO@0>CCJ~q^ z)lOMAqBdb?)>J2ZLhCMp!9Om#4F1eOY#yG)Wj9>rGkdu!jJ)C}u8V~U=!mXM=;B~9 zxi}Kq#v*J<2BDlD4qb6rs+_>x3c7;G%Pq-d#|{w5$&k=`C&JM@n90vBY9===*Zia} z%W`c}6|&$bULzkXp&5xM)yzQdVN7UwDI9&_h`6xcA#Rgq!7}p(%Ox+x(V)p2{Yud! zf`1MzwO4PdZ2vg!|GkNCJIo3ZSZN60_7Fz*1q}dXbovCfwD=7&+U4`-A#Yxqq;`6X$?N1yKp%-Uvs-ELi$QIK9|vs$%V4(? z*4v1SfxOkfJf;ItmvzZb$t+9*TZ7#SzyCM&eTSJL0xJpu?EfpOI#3uy;HDyg{r{%I zjhP_=D+&SZ|0}9GP#8qurXqm-|E9u?nIQrz3V|+A__vcMi1?G@7UBEJH|ewRdi+AhAnQV$$lL}_)miE*X%?Kqw7%W^+0#4Zs9^1IURld4t;Yv7q9AMk;fUP9g z;GnZ=O_q4EOHx@ z2ZNs^j^IW~lI0*9kxN(3(zVm!hr(GkXe!*v+nNjK(xI_5auOuEWTPz^#n{j{k4%`a|gv zfonkk`~S6|hj9^sTN?rF|F?Giq4bErwIG1~|60()xQM{5jR5xlTf6>HdPLw_5a<#= z1opo%A`S{~A)g~-^n&=sWu>P@>fmcC;r2D=#trCtF!B+IN z!}RAc1=;4U0-W|TugFS%PO34tXbvXwBmS~_?5^ymHx(06i`6!4HL`+vuoh$*zE$=S;Y)n9_VS6|Chh4zEMp{oq-HO zo-S*Ro94hn9EjmO63(3;6Qc+QXx+N&4kQ1yHCgQVK>|5B(EhiqmmNkz1Xc$EIR0N9 z^@ycF1eSvU_W$LehH(&q)qw!^|J6~CSPDd7IS63?Uk+**2N75u2w?wT9rcK%Km?Y9 z06YJuoy3UvMe(HY2XHp{1^D5(7Q!!eM75m>abdiv^`z0H1qP-P?8h?9A?(N-PAQa1 zeD9hSqVIEhS8LXdC1(?41ZhmDr`KVsW8yM`DJ`?#Y<~fEG=lxcy`#}-?$J$jjuLwc z`Oek~X~p7F#QbfD9;SpQJRgpZf_OWd)>DI%KZX2wYf|YB`}~D5o%wB=Z^gu=%4%84 zE7h866+&+W?`TaDJAP2@Iyn+r=t?X0KOV;;(2p%apr*2L``?SLfMeS>J+k~nYqHq! zg9LJNp#9JBuER$}V67p5#sC!HGFYLft-bT*yIZLvtHbOun(WOH{JB&b|SD+N`Xj9Mg+2pFN9cREP@ zN#IJQHd`bBKAFi5WKwsSq+~x-#{d*^aFa#KG3lXDgWVP>lkQIr=5m?A+ig+`NZJ0} zP{d2h_HVREkRPO+fn4q=o==XtzLr8_=IJ3NrwB=2AJP4QRI}y!lw8Tr)}%@Kita7bAju_97Ycw1^1iLUdIn1aIKdC(Ff;#OWk)QRG$-!X8(WP(%Z~-7Op0C)LufA=P zc^l;$RTcSp$w4CT@ypl2!185r%;v(n6iHqF2mXF^-2b%diQ!3uoPVFk9c z36@nM|D(Bt-l$%=xPM@llS7)Y7H;&l>yf5VELQ8>v9cq8{Co?-*fD)&aRw)}4O%;h z0#!{xE4~l zn-^bsK;GM`Xx@~9rEKI(XkA(-xXFf=l?iTH%6z5B%j%L-A-~XEM175bBd%96-nN{H z1A_Sdzi#h3Ob8LU6ZZceql){QiDaf&NG7G^Y^&%EzLwc?7Wk zulXi`0IXpIbp8M9i1-rt^3BnQ$m?z<7@)+xV=*PJBB`oenbLPRT$E??e4~q7-D>iX z-}G0HIvi!@OFa)~j7_9%F7R7f6pA~k{DPo-cb-l&ZQrebqR07>|K1f5# zRlGGxsn%;nIJ>Jj4GW;9Qoi6;kt*bO7gdc0rsSg=rd5UzjV%<-$Z+YLxqTT9Z2bar=e1J^cbcfoOW(2@p%3c_1bV59%gqQZOP`v}gPx}5{y zi~hf^_j?Z0Lj-Om1aSO+E7catiU?d^1hD^KUpz52MBr9J0Q>)~R9h%3B5-{X!2W-I z@x;^+fm;cIF7a1D|NmYh3c>_=FFh}QYQ;(qtM0ciW!1f{=?qW^|Nf#nRZDryblG-# zKDt$llj*UYoC$54whcT2!5I}!k3eO4qE@KQL$snQS1TUntv8f>*iTe1m!FVco<{Kw zYFoq6JU9b7>(EU5`uK6D@5@4d&reWaR(EPTq`r&|B0~%930AeUlQUk_Ko>u@S=9D8 z%A^+bO(gI)ug=ecg{D%`vG6qZXuVLD)p=@= zXH|JdeqJiYCabmBxyQsUAtBefZ`?&bS)Gu}5`O=0fyzb^5rG?oKo=ml&jk-6in4SqQzj5J(R<_$UZ0qmZ9b1zgaOpveaTYQ(e3iZtjG3Qrj7h zUV=hgcIc~{6~a|L%?k2|OD%{u<;4rr7=tawfAWUt{{bm5JuC$&14U@iOc~##<$iRj zNO@CU9I3__=>MnT&4dI*VC^7)5I(e=j2V8xdGL2w?wTJ9UjEMFhME zbb-pRjr=GPpB6p`D}aBLKH}y0?)=ss((VPl+L)+GTqUKE_(z6K+*Yb8c_ix|*eVoSwbxh()>7doi83tnCR$k8BgQZ4TX9 zNt% zjO5SUrEEDxPZRZ~>ujCu`!CSHCh!k0L;w+3Z3x^=M})KU@VYOZlBAMyME9ySqMn~E z6;w&o`~PPCR||91MjgnpfVh5i-&H2o<2 zzzY#T1a1`s)`dEv!kHr@Cr^YrLmiuilOu;uh~ZGj?ZVN+?VNJt#LbR6M`z|xzLV5zUd{d;pQHItBhrUgN)h`w^zp^0|Q?0{D1R&rfT3G1AIq-aUwre_nx)M z*~p*!$3W`_u@Bm~&_pVEH?{XhLT_=6WBfC#K=1VXe+pzJ21{(n_hG!_mKSQG)&|1Am; zG9Uu076I)4tF~&fV2Hq?2w?wT6e46m1Xe8qT~M-i5+&k~3EvVPBJZZB;0GbvdMyKX z2{0AuCOO>%rqm~tVoe4&Vur{1YON&Ie8R}zxa|`@EX=UMqsL>_N-XZf!R!<|M?%}K zrNYsZu$5$pn@M!;*;;iDHoVmG_VK-tD0A%|6i)uiPp;r}oU%1?F#%a_V4d2pCBxCj zLB5lV%4gWrOgm;{vg8Y`3uz^`xTH2~Lffq!)Zsj~sJL}*`(wrjQfw7{{IoHjdfmTkg-_vZCru0L}sc$b}Seo z&;kND{%-*!WI+U0DFWF4S82s!u@He45WxQ50!YY$2&_^Bu>Y^pip63f0xckb{l5i} zkOdJ~r3mQuzd<6-2;UYil7FUYGT2H{!Q0u8ei-+8mu<$movT=`D=M7m!R!;ySF1Dm zvNR`^U3;?fCJ*@sx2?mp(JY>xX`u1rWEMI*=Xm0IZ9w;kr|-7X4JxqNY=X;JtV!S! zsbuZ!;{oLF-GT+iaoSyYOqRKwBp8P_Xs|(yZF9`=(s@#H<6@czbs7GysSMtjzLGRB zC8}C39L<0@oBYJF?S8rlUou4SGxc!}KkJ@_gJIAc(X!yw5vwE1D=$0bK?GJQ0yzF(r4@_CLIhes0Q-LnAR!APuu2iY{=Z5q7K?=lw15Ei z{}w<(7DQl`B7psWl~ybk3lV4mfiCeyIREPoB79O1$Q|^U_|vfYPu5=35!L7+abe41 zCJwoxyQOs7NeruAkgbD7BLCE~xnr?Bn%F&9RA$Wy5)aHdr?vaxlqxv3X?}TS^}5D1 z%FfI9)oUyx+bhRT`0^FszibeN?eDt}wj+XxYGko8al>b$uT0x6`<0f9U?l3-3r|K?GJS0yzF( ztu>3~LIf5^0Q>*q7$FBDuv!to{=Zsl7R!YQERF#7|HUyv4n$zJBG3g2|29%1!q1Vv zBQ^SV@zXcDq?fdjaC9UpYMULp>4|bx--A<@D;Hr44s)x=Y2+JzT2McBUF*q1n1<7l z5GceS)E)#S|1MFx?8vlSEf&%x*s(eq94is!=-cDH~)R`F+Ec(S5D2KB#6MxMgaT&%|;yaLj+b10$rf+ZzFq&I4pb*`2^hqkG_`{*B%BH?ERuP z>QG5aSHQnlrBH^$R2(ji?1kU~;pE$XO3MIdrcu=wjPs@N0bER#YAh=U*JKZcqj^}1 ztslao>#!T+Db;$-Py$ygU@njXS;+s}n!F7u>T1`(beYh4)?lJYYNG%!NPV^`z>YlX zH90V8^6yP_)`77Y){troVl%FU7S)czJ_9hTIQJP?h6~;frle}IT7m`b=IV4in7rx- zs~ygyX^8Gnq;t~^!?2Ml0gd?Nb<_WAk88)ke00CKu)b;C@Y9Bv)E2;cZGkn$qPTks z`42w`0+{_%4yr6J3`3_eHA^bg|NFk|kcbGZ5d?7jzeXw=i-`#MAb|bf2NWbB0&4^T z?Eh<|qOq8WfDZ!L|9wC~5+blh5Mbwjw2@;}{9)na9B^nz6&02?E2>;n@-@k!xGt!EA%fti3-#kk2iak^gL>XZMZ4gm(orWTY3& z#baj2O6CgC7tGs2LZJ_7kH8@tV5yNDRne#fwv^SDMw;z22;d|CpI_YsFzY2W3_^VK z!eW*imk3aV*Jxv)yoVwbS}TIFpq(3l0)!&pSz-yCX)dZ`cQGfld$beo{sH>`ykARY zP^t2aq|6p7e&GV~liH8dnNstfVdfW4Ko`O9e+%zBWI+U0DFWF4S82s!u@He45WxQ5 z0!YY$2&_^Bu>Y^pip63f0xckb{l5i}kOdJ~r3mQy|1uH(RQQIlfj&*jH?E-CcI`|! zIzAw3!(6RflV+;SSv$D2P%ZthmtTP&-??Y3C8q`I4l_HE>j9Y0<6pTi_Sk+(qEI*?TBj%*Zqo7>f4b zSge$mc%WT>N*jmO>}LZ`JP1yQfeNAA6tZZhLg*UGsOPez0vb^gTDx{C934xD+8)13 z^wgJCS)4A2O=b4P^@ztqZKwg~UD~7J=reG@`bmc*C1^H9wF+A|`1T0Ha9~pB0bKJL zID~dTfgB91N_>*gMRV{mx%~K0|9|6NcbGCFu;LNG@&AgiA`}o2xM2uj|G#0-V#0{P zibnwZ|BA076c7=(VF+OVzhTf~!id0%N1#jm4Ostw4-xMY7RYyK6doHc?VR>_IQr57 zalz@1+_4B*Uy%-~NP8VR_n>dCH0D2Ci~e~Gq03LZx%6~(ZKpRLQ+e9*FyHE?IP95k z4}jBJ!_mj21%?C zVcjCqSe$wq4TxFcmQ*{nv*GBYV5`wx`&jk^udT)kupXQoLWf&0UnVA#6`+e|{d6YA zWU~VJ@xiaXQRXB~(jJ4IBW*eN5!jBlVIjs5wKjjcODw{S(H=!n2IBA|c&f1l7-=|9ph&`;3czs3YHIwF7w+-wBaw{;33A;iD>`ZK){ zgAc#{EM8#W{&j7goiH$fN3pZ5vje~XH@lKBKSW@qA%Nrml~yAt4(++3a zQahfmxwJ!>hSw3A(8Ai&;b;yPbKmdK&~rC0d8JwduRO)NX9;(=U;geGdamwxEN7c5 z9y>CA;>5_g(HLZquT`rmbF1@IIC?2AYL^_MOv7?`Rhoh0WL14Vw*rg1*=eqzv(Hag zXQcd`tjH5`Syty=yu$5%a=KVJRKdyVrEtaI@aZw)y>UfVhHbdSn$%)(@WudYBN}A9AYr#wIv0V<*@byR0otL++tb$ zOLE&XOX5wfrE=)bnjEEgy#^MHW6;TVISOHS2i5|NRr_+uCJUSV+KwIWilz%@2eLL| zrHTH3Zr+;~b3z1G9s)T2UwL(c5+MRN3jyr^Hw$UZ2N76#2(bPiq32S|HJ<++p_d%%|L7ml57A$zzd(P6zJvZS{XTk?J`W6dAp(fN zwIiUf$@^9~Vm@p%A8s=ry3B_S=EHjPVV(KVX+CtA4`K76-Fz_C|9va0um6jEE3B{o zi+$rueEr{r*f&0lVG^_bg)=!#|@N0Of@ z)GnG}&X&Ns$jq!wS%v7Lk~dG?rxe}@9BE4&DABz3ENqime@t9RI4oFA&0N^LtOEL{38pxHD2aclfj%p)KLbQhXd_x79F?G3T=Xlur`@w+L;t9#@}w-) ztW-T*!WN^9ewNjsNbaOP{}ie!s{_P<;8y^V4s0@nip9RFVr6fq4%;MPQd_5XJI zEP=g0ze9hP{s6rKKkz~X5P|D}z!o|nsB?X@W$8*EABZb`io{(1icy;JhE%E*sqHSB z^U`PPid>{on(Oo=H3KtlX$L*zjlexxa~~7!F*+(#Yg2tZjfol@r}(@n2q%T~{(qLx zZ^I72kJ6u}FVeHuq2QPVBCu8w*h|j~rZ()pg9pt{Ym)lRX?& zO}hjz33dr>djJ0->;I`jne0?C_Jr&BMT9F+KWT>lg|imeBgNA{;^iN^0jJ6jn+e?J!HT zT7g|RQV@r*t*K;z>3O8|@Nv+1zTBG-uyJuikf^E6ghQ2)OQ-}hJ~M4)8^Q2*aDRLF=3tU3g+ z|F60##R4G$EhB*azh$V95fNB*2(bPiqW_J+zQ2#rUxNp{5CKGBWgxKRCJvhyHmw?f#NfN+nW?lUOK zmUC{Zkap(Jw5370v1Q;32~7rQ;s6aSuP8}ZbR}<4lokav*z6VYO#s?`0{}Afzb-IY zi6yj)+BASAjEM`ITLp_7TxMZMNukD$$6jO!yYTKdW!O*vQ!>NlHJ?5$GV3jQ;|K}AX_}XdEoxdUWqq3FjoEDS?wFNs z&}QHWPFSdSz;9A&t!k8&e4$h?yZ7NM!d|~JSn@W+_Dm?P1$$=duyF8ktqjhs&x%^z zPo7{^0AIgX11}6#?!ml5ys6m15v@!-1qqJ9m-jKT;)$ypw2RP|q_g5xdFf?aq*%JI z@*pOMdx2n4g*^r;OW1(#)E2eURJlj>U@4abYfv&);|90sK|D-*rH}u=MCgCeZ_uyO zFZpzTBq0Kbz^#lxI~4``<&ge|>VL#GDt6K@v;GeQ0K5tjbcx>&=l|VHgkKZxCm$pC((f0))`$jdXRN_Fe7O#-sum{7(xj?nZH*jv zqpA4O3|-1&V`t8tA2|^_H*)yIXv~i>cK+biBmHRA!}ec~ZWTR|``*gW^N-71D>#kkJfD&1}w-r&YtzmlEPam!B5R(m7hm_-nlERuJN5waasyHE@79S9M#jRq8@T%~)!pDUV3O_IW znD7?iiZCgh6AlYW;cj6A`494C@+tCrxnwRAIbc$fDM)=NnT+%r zlx!xM8p`#jGLiiTC6gXZrcy)c!N@*?k^&0koyCI!+- zB_Z|5E{l>$_5(E=i5V2Y0m_ic^hb7@l+<7{o6cqjB6m9|DM)EBvcse#Gbxr?F0$RA zq|<}xWNsjrjchY1sZ2VZWjtFgN)iA`r-mY1ObXzU&ZaZD$Xx~{mCgW$nQSf+Y`*oLeWiuwjsDF=``#ANix0s{{Kzz9P$z2eZo%(KOnp) zJSQB5zQ0}QAm1c^MLt5_M}CU@0QCIn?uih*+yPza#i{;Oj`g1If<;R~|KeBob2bf1 zuJh#$8q^@X6?EFOHZ5(^p0Q{H=|O|I zo^;TLps(kE_Jo55WnkCV$3ux79ZSjzy8G~@xjDVvU*)F~j_Ak-L$5;d!&p zBafIAo=y(Z88axkH1sZbho&MAn-oAl&CrS*Gbq_qHr1c$Pp2af8I%;{4Y|SFXOvUe zcLCmn*&Mt_jvACfc*AFtL)mQPh)H1$3J@5G9ClLJi##%7QJ~!E9Hji9K^fqf_2&j6 zhfE5**MJMYC=VDE$RGM!4&FY)1|`kj`x*F#MP6f4pal(N0F%i51_j^)x!K$KK2FJi zBn)=AB10wxFoYKiPzDVOv?NFwT76_dr+_r@PEV#X1Cf4{0{uS+Y4t~P24x@(?~E+_ z4rL7rd{Lm?^uxO*!zobdfKMg|Zz$IP?G<_&E6ibbI@||&4k|7{gO?Cwx!cvbkN`%$@sRuVDw7(_86T#Y4*yk&qG)ze^bGG zMXw_>tb5)_YXEA2eJkM0*nP#KL1n?)1ity*mkk>07a%{oy5|fUeDi>+%T~8&AekYX zYREPS-DwC?1Ocu56_X!EH84iu>DC-H0DSJ8U z)yAu?&W{j?S(6h!L5L}m8Y@gF)pA`0Pf{%L;ph0D=X#C5!>QQiX{jdJG1d85X*e}_ zf6FOW>gBSLh&!*Cti&o+HO3j>^mcb1P}tbsRBt-bUAB;gH>}YTFB-G~s8_RfUNC7e zZZ%tgY|;A7R@Xgk)7UtbUENbQ4O)-h+9xgA0MvudCs{Q1j^x+YlGS>%&_?-X)?|0l z;O~bPXoRu;-$nKl@eAUI#Ge+2ge%aif06tcc@wFTXUKyPWM17`ml1ym-t9TP<80M7 z7|ja05__qzu4!ect+!&pxZ5a+w$36BKteFEgd%I57O@{>)61-NIEZPTxK#^V8Nvu% zFNc|-cCXgnmRQKJ_Qqd}y!&KI@G(}U*kr9b1JzoR3)X2R`I@9u>$Re!7>z+A1Hv(C3_q8-S-YwR)u7j|euTjJ$i zx|qX zBY@&%Y~w}*Zk`U1r^I|ZBJ%oS}wu9u;C;qH5fsz6wCFJG*&rQu1*xn z!>M?}!QIx#2$Zm^vtMBiW6hUM`Q6lv$bdK-1fv{l2R=L5>1ldh<> zLLLqbDmaj{i42B0C_+stl*TLN`C*1bL3L5g^4qauX7T4(@vXQn0J^m;`pcTh31wt* z!fX95n+QYup$vQly0xf-2-AH=+^XFPD6nD15PY2Awa$oU6WXe6wjg5jd>2GpwL8q1 z(DdMw;Qj(_vOXa&-_`>`3D^yw?$lojY}m!)1hq&$E@5X}4abYs8Q$>=v$LifZRXpX zyV3?Ep*2*%spN3{G!SE_YtoEdpNXAh{<~vm^)T~&!S%7j)<=T>RCG7p(3WnuOT-77 zj&JH#En;E;vtj5=tXG*pb!!`q;=(Wl6kQyst=er?3J*8k~c z`V<`oz2AEApT*CJMRAMp=Ry`3ZpNkU)(*BESV(jj1041yPxV0|4Nd2{Gh@e&jh@jh z2(}(HUzk+kg<-tZM;rTI6r!JZ$-M?SF2uTWcJ9^rT521PaV~EYJF{cJYu#aqFjMDn;O$aG^Dv9A|BEX zgboy)I41jGBJUWt%aib~kl~Z&GlG|k_4qNZH*`Spq>ySg1?L<<(e}6P(H`w|RBF;d z%VlQ>m_jrj)5W*j+T8Kjk?|8J*vG_?Yoc4*XS`*YJ}0ZsIB)qz&&Bi%T!Q^Qr=cWQTdBN-uRL z^z7l?Zmx}V-4&=`^0erA_1AXu3YA>q49M9%xW(*=bWH|oXVfI;N`_+u?2g-FcB`b~ zr%B50v(08U;HJPX^)yP#+g+Q@j7q8d^eEXq1#6iOv6k6TS+B`q@LRdHbQO_I?p4By z=*v_#+t$!aO#Y{n69m5hK7Ee%F)gRfqrad}0c!4J-C}NO>A07z%wRb@iw{v)ni1+( zR^MG1F6H)PsqO&32Df+T?(N${*XuTJ?H|~>^O}KxQ?UlCdSdas)&Q+Vuyo75<=sF9Gm9nfK|u>@zpDbeU8AVxBlXCFHZEO!4-a8$*bmo+|Qrk&NgK z<~1PN5~yiyg(OE$sB^FU+cYsB9zKve%of@P`gU(J=a~Iqo>PHb2}3CF@{uv92PY3(s{`U$q{A<)#f?nh z(-+@QwyHbE7U$UA-xIh^T`o%&h7RYDEx0=}x_;-zDEl17-tp>nCd|G_*VaINjOwlE z+k{%(7d3Ba>3G#;Om)b{SJ%tV6lCng;Ly>b{21FEikr$&iF|(lDpsH3{#8{H5kfOd zO>9tLn=0RMZgYx{cOz+F@$foHEXy{Tu<5_+hQx;R(x!jOo{j$pM0tJM=8i}kGS z2-|Q;V%%I|wN6;ebYeU-sCll_aokS>b80<3)B-{WS z%CtT%1e41b_&Zk^QA-hE17(Pm!4ez-FQ^dLck+mPeKYMQ_H`|O_)MdljPL)SLZU=F zq-E%PX_@TC56_b@Z<8FG!e&YMNX*%(>Irin(pqZX+R|~)i)452 z%7X*tL;3OXYBh0RHd+-oNBz3EX`RZHLY;12Pv=#m6>-wnuZEKnl{nvI)-Z4P>2Yov z>n#$^HV2`{@3I$Vq(N=69v9X&Op`PDpF-yleZQX2=Fo3ocmJG*1^*8&p3E z3#>)epJKF`qgW7{ZV#!<)#M>%UmB!l3>(;lxnC+}S*dy^+KQSvIBsI`Ph^uy*_qnN za?eXsZI~mHN4NkpYgbR~7n;N1k+~kRXStflBVh(Kj7_-w6O(99YwyLEzo*IL`0-pm z3A5nm(^Lb_gSFf|3_iWwb{;sNrd;QN@u{uy&Ua27lbp)?s1Z(WGYCePL2@myV?h|W%P&iYdGsWNxlWBInSth7bZZ4-4XDx*|s01%K6rGdq4Qr zYonWP!cLxkXKOk?G*>=R7{;NXF?_>A%#@Mb(flxuiOTDscu-}BPX@6arqf(#-idAc zi+n|eZ9G3S@_b)0C&lU!h2O))%{$Js59rm&+^g{Ein8K;MUFy`qpA^MwA;rsMQKwNnUp8p0c$qXdZc!ZI+2(8g zX$=73_w)|Fs}Im-d7Km&A&U~|^F>{MG z6&_^SCxxCPSYh{7Fb=L+4dzk_jl}(@u%7d2t7_C(Z~2rK*t;sR*wxmQNLMbkWLlclLCmWB4nn zUVX1z6&N5_m^{o^Nia1O85kj(Hv+&Q51@H`!ke;={NGCSz1o+x4fHX@{5X4$)o;yd z>AF`ejrRxxjt%F+dPrp*9Hd%ocG`;g%tnH7uQb+f4_9SsH;Grv2o!sHPiwgL=Sy%C z#)pOv;T!Jd+pg%0cSwzxU~Qy*zfN(9N4bWYw`>RV}x3! z-k(sh@$fb-K-qyA2M&s#R@oua>tPIFc2F3e^O>+m!`IDGw_$n1Ry;9AM1edx}?N9(1B5TfD%%>JZ^aE=uIBD3p=vQ4+ z;a%hTxWNO4_=g(BFA6EXrVr&Cc5Y=jP01s*^{kJbnC4rkYCar-I<4mWYE)mdsL93t z-zSN_ReMU?MZZEfkS7~g0OvmCDJzO@WMTBM{OzbhL|duRjRB@~2U5EGo`DP|mM*80 zIA+eYUW6)$BL=bxHT{(!Rc1Bv zq%pI_x)8-54isP0Zwa)5j|Yx0A)RJAW2 zvGwOy^k|r)8{1$lk96e&m94VU?>LwNK`D1yORS5rRJb5OMw7LaIM2O(-M ziG-|r`YExhoz3M=RX&@`YoT)j|2zl&N({ps@K+FVq1rGj-5u0KK3_rYPoGhYnYy(K z#RpYPO?SyplNGP_YfZhUB##}lI#G)o{Jfs5={2df@Gx<0yXQ$LvevNhslG{Ns@B4mVpPmatS&fOJnFSOF-=KF ztEv%DD4mH75K%_tVh;QQkI*~b0{fQ4*8d_jPqh7-LEnl$UU-_*1BQk0a`x1MOL;>f zh2~i-kQ}={gI&}Et;lmVO}_=a(JD$VWj7pHHgqoj{qC`E!V zRkzOJ|5j@)_FLM=yq#=fta-T7^YYBUg;<;(>E}IJ@6cGQ)dT5oaiyQAj#8o8k}=hLk9m?hbti@8GPxtgX&pyb&tHC4O^M6dK%l!n5|n9HoI zaFAn#!w|gLu0`R6ol9;oEJUdm%3YetddfXw^yF*Liv}(O77l#TE<5*k+qarY@RmCT$huY|nNt5DV+wgtf)P?xJQ! zo#;uGmDXlh%dErhJeyDdsfBa)w?mTTas?&WpZ84zZlpJPO+(^Mcs@n|v99&8YeRFo znHGz%Y=16>;PV?;n<)4miy6kD_W8e4^87#jTlyG%1D!%nJts;4>#zMdTXKX6FYZ-_ z@r z6V`U0B5lZTu%gyBdH$b^8nXEmsju8~=|Y^d*riPVr;<*h->LnlmcvcITggZ9Gx(UZ ztQSK-_)3%`AU#4({hu>%n_d|L(`5ND=U9j(XHE6$jqYH5_@!#{s?TQEXu5S1G#Nix z=JZfj)`*|R_A+^s_1R48MsyGLc2CA%8Ghw}JZ;ddkB1V=0Ft4@eV(_Dp5EyPr{ z_bEA}mGafdo?|w*62uxnCHNe`sf2U2BVUAJ!PJ|~wzm8mM9(Ak{~&z|H+?=yjG*{? zeq*~E;`aGi%WzmL?3h85>yLeux1$gFJ)SF( z)2-XkFJ8yWaCl4DTyg10b6K2Phy?4CGsE%k#6*h47;W;{P-}0n5{`FgSAriKX>ujn ztXse!tsa$Z#HGdwVUWSYL#0DaH>6DdXOMRh{SNK7+FjZ{ZL^l3ucx<@uLFF3Jce~h zxUor`al_r?jfAdfu?}LE#rL6lay4zui(R}Ey1tUI^1^ZTRHNPsfVspv0AAte-(@!8 zxbl+DrK>vM64%pXuRfe=9M(bblEv13T(QA<8;A9??2cLIijBoq&hrX)e7LVpS|gCl zL9a+SP9^_R)Kt}Uw>6ByN4wqWwVou(pCe z1G#@ES%_1VC1=SPd$DkxH?A6P;v&V+FyH1~MS_k93G&pWo&;GJSmT)bwXrocnN3KL zQ`or_qSba?)X%*x-oQGYo4DpGotrFXSVf^ronC1m4A2a#0A}FFjXk-Vrb}JdH+&`F zaDW{e`J}Ya8Us7<{RgrMcDF>`;?75gu;qU*(f?k19Q%L&m41Z0n(RG0hCgAQ2nr4>V3X70VbL2Ws*dYNqj|f*~ZpmOg5CSBNA?4xMbRz z8ds)@t!~0iDJYsLtug1OE9cr2!zu?D12((PcSt7xQ|Jn!AJj8iJN*H@5kFpdyggu8 z2sgz)?>dr`s@tttB|)4i`zwzpSJULp<1dB_**&++^6Yt@>c4Qlbka@~G zAFZZg-4S33ShhNnX3n=xLIv|BYo|Mrt7$ADRj@RcVVuF_zlB^uv~Ot-X|w4!@MnWh zrM(itXX=Z+IyfWQW0KuN#aRRYP7IBWv2z=NE9ks$8c@C7hdyZS~6%zh`94nlQH?9Mka~=cly=(Ecz?@ zBu!HapqY<3tuhNMA9r|1rdx~*l*I(Q=ybU3Zmr=16Vx6<6Aeht&_qpv0S%)vGax6~ z`f@V0g1}Dp;<_Uz$kjACu|r9QuZ~ov2P6X(sVf<6m1&TSR&W1jMgNPk&PQ1=DpLcj zkZFV!rUY35xthib<73>ihAYXI04ty(^;p4{|92C80^k2Ws4b!u@?-1(cy}|!|8!~3 zt6U(qwxqCKD#O+yjY?Z!sJhq0v(-1&@e8^ys363ZHIuFQI#P>V8Rt{b*}kCLqsjIS z6-JKbMlO_0UVf9K> z5crDkANKTA4ab{bM`_NgAPl8>M_}L+&XwI^1Jz8E1M|n?H}Y@Ro@U4^#69)l1JumA z*zzAG`t^Fdc1qhuFCov60rw72qq0m2nk{<`%ybr2SSS?!sne0z=FW83_8K|gIXpBz zUUmO@1rf^x|H$Ul(~;JS$`Y7M!#0;9n=qI5_hY5(^V57T4zNlC>ynEr2*YJ>-ga1} znd_3yVMDfbHkL2s1`)Ba>T&MM!T_%{urg_`t}MW(+iSeM;;c+oE1WZn%}?qi*~J@h zciqG_-Cj2tKmRv}B#Hhn`d9Q%>JRI$*G=u8wToyUc?BtwTgYa-^gpeYOIvW^1iNt} z9Z$wnM%qZVR$_h(oA6sJt6VIBkHYDA_mWCy3%(Q2<|Y{1eQ}hd+xbvzUQ<~)rOO%> zZ?o9PnoRe2d?}~@#E~)k%P8OEhxPZ);o{*n<72twkp49sEUzgP3pw1rVV{aBu|(G+ zL3BqE_dZ1XhldIX4vzO@hzdT5EG)rsgvGmY%cj0fQAv2>D5vWq%J0MtrQ2z4sdS(j zM}o~T9NT%en$e$QoZEzU4D5;8v^&kKDwj;@2o8zZwQ{!Fv178FA8tZ3INeTjS!KnP znC0+X7W<`*6t*Wk%SL#4CU-hKBMw_sk?!sce4?jje%<`IT1u3RX#V5G20X)wqUI%fZ;le>ui6aCHlZat#?T+`@1 zbQYlIKjzFzatiyh%=AGzjux=1aG1o0MSpSlEvUPzM_{RzgT>X6CR>JYj7?S&sLi%u zZDimcUx@!|w0SrhJ1#p50#hv+kAGz+i``K%rm$@=zFs)p9&mNK9RR0R!QQkn^I#=D zrK8g86pz@e>2yLA9~!2jiqCUK(TZ$ZqmwMmQ6S{K9HG#+?rp=J(Ggs!;tjCxZJ+O5 zY;9`=(N-Meg|JQ#x8%;snwG9pPW#!0rWD`ovVQvjF8i>%pcCu5ED|A`m2BJ??L074 zK7e)I@u710Sg{nS{52KC{>TRj8b&RGWqi-`cfroeYOqC%pG+8AI8|e;R~R}hE|zdm zHY^;CwN@_kv>nGry5lJ(|1&A}{~gxu)sASlYFo85RsnuPzeWEF@C(nm?|~(ib?}*{ z+u9+Gh?3X@>8S4|m0spgF<&f+v-mha<*N4f%9SlRL&V-8W&?#9WAGphCA)3X$~sNE!?G9hDqrFHt3hNPil|gez1F>BW}~SY28|fHlO~U{scFMf0llPzMcLNJxNFD z09{Yl&~`eF{EB>+e2IL5JWL)S6%-(z`Fe~pw;#GEi)FY>DifDbCIR!GOeT!Wy-+-p z279e>Aq2tc!H&dumxP$((38#>$<-1{;s~5!^d!13lMp`@m(IkKmkNk;ZakYxB~vj6 zig#meFm7bi#wrPA5?RzNo9ga#A$B!*swb6M8H5tu9Ra92Wn3bm6gDuUiOHT7E(BTz zTt8#E2TH~>fKwMs2;G9_B$Jt_3mH)0iBu~4A|HgyF5=x6xe#1FR%H4@2_+KUiFi7j zPAzjGBbi8~kgDASam8WuEOjAtPXZP*y+lI%Fn&6jN-q`=1{bsp3~hXogis?SL^~IH zAn1-%#xNF02pu0!rl2S;a3I`h2(K88>~51#n$;eS>Ygv5WCF%4olbVQx)8H(sZ6?O zUJy!U=1K_Vfg6ov&zt}hPh@A?5bo<>%C#q*PGx5KAw;8$&vYRW$|B5Ta)uvDrjy2W z2Ld%rdsA?Br+J}xHknNJO!Yv}sqwUtnW8}P78hctWs~sfBLOIx%IHBTnbCq!B0;76 zH&y!ep9bU~!_KagOv5DIY}X2Iml22PvF9cagjo%HUMwL9rwtu*ATT9-HYT^Xxe(U% zIW#DtY@*wSZk15RK06za@9{v)j%HGc8zqziM{`1zd)!k|IF;qu(nMi)XoS?_1B@k2~eZ}33qg+w}$UN506AB;>o zd$kLp0HjMNuaZ#4fRat6Q}Im_NUgbyZ0`mo#^YDG5IP!q1E<<01l|I9=%#K5LPep+vDlT(x)3BgjrwOY63SwRoKC?C zr6mMog7MB^kOTxyLKh-0Wl9!NZK%y|I2aNZyo#pCG8X1!`cH{ zMH|N);W{m=U82pS|3!a9zfM0xKa9wM_tQx_M0e00+Cf{%f02J9Un74_K0w|??)BXz z+@{Ags9c;VfN*f(CV%8&s6O*!?wO7!Ga|TWg%w#IU=D9 zc$Yup5`s0gp`r`HZ{SZsR3AM9mylP2{E1A)dW-kiVF|HVF&r8bP!>%T{d&lO;He6e zbI=3v*;G8fUqTsC`*_}kn4ij?11<#e{K^Gz`Cmgu*!tg7`e*bH>2J~R(6huJ=%e%j+#67!d+8RMqEW0J{+4{7e33js z9wM(IC&|bHy$d3bu0~CnaI;Mnn1M&&KQoHVr*SzAQ0j!HhJ0u8!`8$banHR%YgM41pn9T}M9XskG`CCa(pyYEdVsj|@8%Zq#^<@jd zXC=lz*6+HmD>0@` zZ0sS4u_XcF!a5{X|HuLsBF8hUc=;nH90`^AL(D!Kczpa zKcK$^X8~@)?0>bs5Z?oShI@fNt$j#)5Yk_O^k1vRwWZoL`tS5<%={mtZ=?6o61|=7 zq*u^YxIN%^MCj&RFhIH=u&F8 z5>hGeji$uS%TS>$ey^g?7XPiH&=&vYmSa;Ozmw&_Rfki|M)v>8R2kSnltX?iku*yM zhhl|in{!VOOwr^K=W6=bg-D5<}XzgG=HI@p!x4Un#}3>Ki+h3 z(`}kRS5eS>MnysMXI`3&0{N*wUDBrc6BPx`AFC*6{>V==87KedPbb>`Llp(he^pV? z{DGe)+Ws#xT?+FI2qW*$@2ecC~ev`@nrA+>r^uJGkjee)TAA5nWfbE~7{aX93#?A%4U3fHv_96v^N}?C3DB5qXTdbmJ+aeW3+ZL)Q+O|MJVI=7VDvGwXsVLeuUq#WjRux6t=BX&!HdjT_wmB+_ zw#`;iv~8A(qHQx36iS}XP*JpPx{9K0(^M2~o9dvB1hT!sG(H1j%KiVZ>YoSpSQJ_5ZxE{u6W`y`EkP9k3X21AmEi|1XnIkw?>4bHl*QqFIZdFmx+~T7N3UsqCo$#dSwJHjln^Y7uH~MIT0=>qQj(<(yZQr1x zpt)W}LGx-4O-_Mc_Wwot1bv9U3Sa(4Xdg7d zN;*$^0mA>+f5xmoaXfHmyE8vyLti0k>Os-Ym#Zk+dB3Q;OiS+zq~nJ*=*v_TG+(Ns zpm}eAW`^DqNXO62(Ta+Krlq2wX$EMf=}Q9X_~~JKN<~5QZWRU1y8<**^v*y!zA2mD zp`xI9Qbj@YM1W?J9uK7ByLag^6$QsBf@VoYLGws}ra{L8 z>1_Tkswij{R1`E12WZCWm`Eq1EpeGSq@tjCP(?vAFK9{%^nj!1*@6;VmV<1L%2Xms z65a1X_+~wta}Yjv$MPy22_W5cIDlm7z5tS;LjfdBZx@IoL*4Y1%>H+gg5Uoi5VLfz`hm@BqF|K1UwM8KT$VKJkL1 z0hksL<;zVY^e+V>w~Wvy90XrnSjWZbM_mLi3qu~4h}aH8KPAS*vxyKs+Fz(BH1=aE zic$TDiegm%T$Us@C(;kQh`m#ee#nFH{bclmE-g0h_HHuzXDW&kKH%oI)6z%12-~AY z-!Bod-I_k)L$KIEAC`#NYE9oK5PW0<|6!vweXpniKB=?iaeH$$eMm)7ulLB@A}xKl zi`d&#sk71sdd{|5`YxGDY+R-9a1ndkDt)^|*ar}-snS1{h}g19-{wL1j#c_rSxn_<|@~6vac{&+PwF`Z;_3&zS)n)Ccr+ z`YL@sR{wv1y+0qr%^-iQ9Y=J)?OFzF|1;<>>9>*Th39$G18mGaBWtXIh?4)QqF4#~ zjEZ6<=zpka+#sJ;P|UQ+U#n=hL7r66tU>-tMKcEB`r21tEX$Kms%cXO`Gkt1Z68-r zwC!UminjfwilS{#C@5yykD_hdzW7nJ?ax)ZXxoQX z6m9#EilS{F49K)WxSjEo1pf%RKM=?b6uBQ|`+q4d5d8mzr|CU#?_4^UkTjh=dv+v3 z?(d&Xb|L2d;rz+mNOXU(gp*18@?*J64@Q6SE%x6X%gd!J>;w7Nmx}xGYWWq*cNg;P zddHzLk$U-RmWuDA@6Sz4u#=BSH8gUR-4Hv{Ke=xrKY=jPz56Chg_T2-6UFr-2N9zE zhDlt4Fma+c?!lbI0QVJ(<%x~?p|Rp9e%Tk1UOzT;qSp{V`g!=^z|ZxQBl#k*La}rh zoCrVXtg2+X`SKPPMWr`*$Bs1CLFzdjWdc z`pI$Z^g)Ah*8|#EE_Ec=`?{xBc1}kkZg=KNp32ufy-MeFBsa3|=}2Uh4#KOr4|h6A zyzq3CK-|s(U?8sz*c}!E@lF%C(s6>O>^%HtRRmRU2LfeX=%At#fo4+<=5{1t*_C(M z@_(Gr<4tG&7Ygw7z`ZRRG(nf62{s2c!N8tIwZOohKLicHHpTcgKu?dV0Wgs{&L#tm zs(^t#=ZpBW{&Pg#75|_;L0za#W_9_D=E&-0=O?xDIz2fgen=%7*_aogZp z2p0N7*FopI9$C)izZIMG^tb7U^C%A@*X5P%TKH| z(tb^w2sf24jO30FiXZG8BfP`H1dE+lGNMLeUgYxLMdjfGxxs4-eEDzT3 zFvuW+D|xESf6DP;=j=h7{jY6mBu3`)aNn3tlm`pNk(@DmO5{Q^*EuU|%x;OalU5OA z%Sc`riS&}W`zOk&LEH&2XwP2;^TU&a?9`vJMvq*)xors7CLhgDAQpqo8}4t;Swkhe zx~XXDaxHT4);j4yxMZImOhps7)0V9!tv2w3qov~HxF}V&*w3#b4X;Tlk1It^czP}s zHJJZDoAeX?oqA4Rudl%OzJJvILc5WEoNgvxAaBR3(|xvG6uD|}QF%N!HU^>dcHB`! zE#6o41 zbTqMdeoNYHX%9QndLPHdy>#t?; z7DQkcoM!fujBePpdF#&T)}8&E`UddNz^-tzsLQI6;&6Usb(B|C{4-cCmJkfIC_G$S zm&c-e)^Fdvsee@=cWh0mh!B0NqwG(SQT{11v)=&%YonWXZZvN-k4jRTvC|m^~a+rBPvy0=0%d?ptbd zUFND7znuwVV3{Js_(4wYY)DRAz0Wu$tQZfIHK6Djm1iv{%>L{25u$IE8CygV&2tATU;4! SxGioL#h+|aTmHY6|NjSf!Lf+| diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.imdb/Movies.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.imdb/Movies.xml deleted file mode 100644 index 9cbb6df1e..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.imdb/Movies.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - com.plexapp.agents.localmedia - com.plexapp.agents.imdb - - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Albums.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Albums.xml deleted file mode 100644 index 09b3fcd86..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Albums.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - com.plexapp.agents.localmedia - com.plexapp.agents.lastfm - com.plexapp.agents.lyricfind - - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Artists.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Artists.xml deleted file mode 100644 index 03ee6820d..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Artists.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - com.plexapp.agents.localmedia - com.plexapp.agents.lastfm - com.plexapp.agents.htbackdrops - - \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Albums.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Albums.xml deleted file mode 100644 index d0dc832f9..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Albums.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - com.plexapp.agents.localmedia - - \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Artists.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Artists.xml deleted file mode 100644 index 0247d6e46..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Artists.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - com.plexapp.agents.localmedia - - \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Movies.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Movies.xml deleted file mode 100644 index f913b9414..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Movies.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - com.plexapp.agents.localmedia - - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/TV Shows.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/TV Shows.xml deleted file mode 100644 index 19ec6b072..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/TV Shows.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - com.plexapp.agents.localmedia - - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Albums.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Albums.xml deleted file mode 100644 index d57f81e9e..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Albums.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - com.plexapp.agents.none - com.plexapp.agents.localmedia - - \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Artists.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Artists.xml deleted file mode 100644 index 3c6382ba6..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Artists.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - com.plexapp.agents.none - com.plexapp.agents.localmedia - - \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Movies.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Movies.xml deleted file mode 100644 index 096584624..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Movies.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - com.plexapp.agents.none - com.plexapp.agents.localmedia - - \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/TV Shows.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/TV Shows.xml deleted file mode 100644 index f9b8c7002..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/TV Shows.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - com.plexapp.agents.none - com.plexapp.agents.localmedia - - \ No newline at end of file diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.themoviedb/Movies.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.themoviedb/Movies.xml deleted file mode 100644 index 718fa2651..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.themoviedb/Movies.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - com.plexapp.agents.localmedia - com.plexapp.agents.themoviedb - - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.thetvdb/TV Shows.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.thetvdb/TV Shows.xml deleted file mode 100644 index 8db7aa792..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.thetvdb/TV Shows.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - com.plexapp.agents.localmedia - com.plexapp.agents.thetvdb - com.plexapp.agents.plexthememusic - - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Albums.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Albums.xml deleted file mode 100644 index 112132a84..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Albums.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - org.musicbrainz.agents.music - com.plexapp.agents.localmedia - - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Artists.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Artists.xml deleted file mode 100644 index 112132a84..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Artists.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - org.musicbrainz.agents.music - com.plexapp.agents.localmedia - - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Albums.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Albums.xml deleted file mode 100644 index cd6e029e3..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Albums.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - tv.plex.agents.music - com.plexapp.agents.localmedia - com.plexapp.agents.lyricfind - - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Artists.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Artists.xml deleted file mode 100644 index 8494ba7ea..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Artists.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - tv.plex.agents.music - com.plexapp.agents.localmedia - - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.imdb.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.imdb.xml deleted file mode 100644 index ec362f1ac..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.imdb.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - false - false - - - true - - true - false - false - false - false - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.localmedia.xml b/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.localmedia.xml deleted file mode 100644 index 58f96a8cf..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Plug-in Support/Preferences/com.plexapp.agents.localmedia.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Preferences.xml b/test-data/config/Library/Application Support/Plex Media Server/Preferences.xml deleted file mode 100644 index f5b09b077..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Preferences.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/test-data/config/Library/Application Support/Plex Media Server/Setup Plex.html b/test-data/config/Library/Application Support/Plex Media Server/Setup Plex.html deleted file mode 100644 index 20138dc9b..000000000 --- a/test-data/config/Library/Application Support/Plex Media Server/Setup Plex.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - Launch Plex - - - - -
- - - - - - - - - Launch Plex -
- - From 2240187728b6143fc8b297a579e64f8992cbc0eb Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 3 Jun 2026 23:54:21 -0500 Subject: [PATCH 24/26] docs: Add comprehensive descriptions, examples, and documentation - Add descriptions to all 701 response codes across 404 operations - Add examples to all 112 schemas (up from 6) - Add examples to all 366 JSON response bodies - Add examples to all 8 request bodies - Add descriptions to all 123 parameters missing documentation - 0 speakeasy errors, 0 warnings; vacuum score 25/100 - arbiter validate-schemas reports 0 gaps --- plex-api-spec.yaml | 35791 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 35693 insertions(+), 98 deletions(-) diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index 159c46f0f..c90cab082 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -272,14 +272,96 @@ paths: type: array items: $ref: "#/components/schemas/Directory" + example: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + allowCameraUpload: true + allowChannelAccess: true + allowMediaDeletion: true + allowSharing: true + allowSync: true + allowTuners: true + backgroundProcessing: true + certificate: true + companionProxy: true + countryCode: example + diagnostics: + - example + eventStream: true + friendlyName: example + hubSearch: true + itemClusters: true + livetv: 7 + machineIdentifier: 0123456789abcdef0123456789abcdef012345678 + mediaProviders: true + multiuser: true + musicAnalysis: 2 + myPlex: true + myPlexMappingState: mapped + myPlexSigninState: ok + myPlexSubscription: true + myPlexUsername: example + offlineTranscode: 1 + ownerFeatures: + - example + platform: example + platformVersion: example + pluginHost: true + pushNotifications: true + readOnlyLibraries: true + streamingBrainABRVersion: 1 + streamingBrainVersion: 1 + sync: true + transcoderActiveVideoSessions: 1 + transcoderAudio: true + transcoderLyrics: true + transcoderPhoto: true + transcoderSubtitles: true + transcoderVideo: true + transcoderVideoBitrates: + - example + transcoderVideoQualities: + - example + transcoderVideoResolutions: + - example + updatedAt: 1 + updater: true + version: example + voiceSearch: true + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -326,12 +408,14 @@ paths: format: binary '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -350,14 +434,33 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSettings" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -381,6 +484,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: prefs + description: The preference key to retrieve or set in: query required: true schema: @@ -392,10 +496,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated set preferences content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Attempt to set a preferences that doesn't exist content: @@ -439,6 +546,23 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSettings" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value '404': description: No preference with the provided name found. content: @@ -486,14 +610,335 @@ paths: application/json: schema: $ref: "#/components/schemas/ProgressResponse" + example: + MediaContainer: + size: 1 + Video: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -548,10 +993,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated rate an item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Bad Request. Can occur when parameters are of the wrong type, missing, or if the `ratedAt` is in the future content: @@ -606,10 +1054,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated mark an item as played content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Bad Request. Can occur when parameters are of the wrong type, or missing content: @@ -791,8 +1242,67 @@ paths: terminationText: description: A user friendly and localized text describing why the session was terminated by the server. type: string - '400': - $ref: "#/components/responses/400" + example: + MediaContainer: + allowCameraUpload: true + allowChannelAccess: true + allowMediaDeletion: true + allowSharing: true + allowSync: true + allowTuners: true + backgroundProcessing: true + certificate: true + companionProxy: true + countryCode: example + diagnostics: [] + eventStream: true + friendlyName: example + hubSearch: true + itemClusters: true + livetv: 7 + machineIdentifier: 0123456789abcdef0123456789abcdef012345678 + mediaProviders: true + multiuser: true + musicAnalysis: 2 + myPlex: true + myPlexMappingState: mapped + myPlexSigninState: ok + myPlexSubscription: true + myPlexUsername: example + offlineTranscode: 1 + ownerFeatures: [] + platform: example + platformVersion: example + pluginHost: true + pushNotifications: true + readOnlyLibraries: true + streamingBrainABRVersion: 1 + streamingBrainVersion: 1 + sync: true + transcoderActiveVideoSessions: 1 + transcoderAudio: true + transcoderLyrics: true + transcoderPhoto: true + transcoderSubtitles: true + transcoderVideo: true + transcoderVideoBitrates: [] + transcoderVideoQualities: [] + transcoderVideoResolutions: [] + updatedAt: 1 + updater: true + version: example + voiceSearch: true + Bandwidths: + Bandwidth: + - bandwidth: 1 + resolution: string value + time: 1 + playQueueID: 1 + terminationCode: 1 + terminationText: example + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -839,10 +1349,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated mark an item as unplayed content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Bad Request. Can occur when parameters are of the wrong type, or missing content: @@ -897,12 +1410,14 @@ paths: format: binary '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -937,12 +1452,14 @@ paths: $ref: "#/components/schemas/NotificationContainer" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -976,14 +1493,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1010,6 +1557,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: uri + description: The URI of the item to add or remove in: query required: true schema: @@ -1021,14 +1569,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1068,14 +1620,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1102,6 +1658,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: uri + description: The URI of the item to add or remove in: query required: true schema: @@ -1113,14 +1670,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1147,14 +1708,28 @@ paths: type: array items: $ref: "#/components/schemas/Activity" + example: + MediaContainer: + Activity: + - title: string value + type: string value + cancellable: true + Context: {} + progress: 1 + Response: {} + subtitle: string value + userID: 1 + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1177,12 +1752,14 @@ paths: $ref: "#/components/schemas/MediaContainerWithDevice" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1205,12 +1782,14 @@ paths: $ref: "#/components/schemas/MediaContainerWithDirectory" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1231,14 +1810,33 @@ paths: application/json: schema: $ref: "#/components/schemas/WebhookPayload" + example: + Account: + title: string value + id: 1 + thumb: string value + event: media.play + Metadata: {} + owner: true + Player: + title: string value + local: true + publicAddress: string value + uuid: string value + Server: + title: string value + uuid: string value + user: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1270,14 +1868,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1306,6 +1908,13 @@ paths: requestBody: content: application/json: + example: + jwk: + crv: string value + kid: string value + kty: string value + x: string value + strong: false schema: $ref: "#/components/schemas/JWKRegistrationRequest" responses: @@ -1315,14 +1924,20 @@ paths: application/json: schema: $ref: "#/components/schemas/AuthTokenResponse" + example: + authToken: string value + clientIdentifier: string value + jwt: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1355,14 +1970,24 @@ paths: application/json: schema: $ref: "#/components/schemas/AuthKeysResponse" + example: + keys: + - alg: string value + e: string value + kid: string value + kty: string value + n: string value + use: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1395,14 +2020,18 @@ paths: application/json: schema: $ref: "#/components/schemas/AuthNonceResponse" + example: + nonce: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1441,6 +2070,10 @@ paths: requestBody: content: application/json: + example: + clientIdentifier: string value + jwt: string value + scope: string value schema: $ref: "#/components/schemas/TokenExchangeRequest" responses: @@ -1450,14 +2083,20 @@ paths: application/json: schema: $ref: "#/components/schemas/AuthTokenResponse" + example: + authToken: string value + clientIdentifier: string value + jwt: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1485,18 +2124,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted stop all butler tasks content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1525,14 +2169,25 @@ paths: type: array items: $ref: "#/components/schemas/ButlerTask" + example: + ButlerTasks: + ButlerTask: + - title: string value + description: string value + enabled: true + interval: 1 + name: string value + scheduleRandomized: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1555,18 +2210,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed start all butler tasks content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1599,14 +2259,18 @@ paths: application/json: schema: $ref: "#/components/schemas/ClaimTokenResponse" + example: + token: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1654,14 +2318,46 @@ paths: type: array items: $ref: "#/components/schemas/PlexDevice" + example: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Server: + - accessToken: string value + clientIdentifier: string value + connections: + - address: string value + IPv6: true + local: true + port: 1 + protocol: http + relay: true + uri: string value + dnsRebindingProtection: true + home: true + httpsRequired: true + name: string value + natLoopbackSupported: true + owned: true + presence: true + product: string value + productVersion: string value + provides: string value + publicAddress: string value + publicAddressMatches: true + relay: true + synced: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1694,14 +2390,21 @@ paths: application/json: schema: $ref: "#/components/schemas/CloudServerResponse" + example: + address: string value + name: string value + port: 1 + scheme: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1735,14 +2438,49 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1776,14 +2514,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1817,14 +2585,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1858,14 +2630,17 @@ paths: application/json: schema: $ref: "#/components/schemas/BinaryResponse" + example: '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1897,14 +2672,26 @@ paths: type: array items: $ref: "#/components/schemas/DownloadQueue" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + DownloadQueue: + - id: 1 + itemCount: 1 + status: deciding '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1927,14 +2714,41 @@ paths: allOf: - type: object - $ref: "#/components/schemas/Feature" + example: + type: string value + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + key: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -1985,14 +2799,24 @@ paths: type: string uuid: type: string + example: + users: + - title: example + email: example + id: 1 + thumb: example + username: example + uuid: example '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2025,14 +2849,23 @@ paths: application/json: schema: $ref: "#/components/schemas/GeoIPResponse" + example: + city: string value + coordinates: string value + country: string value + country_code: string value + subdivisions: string value + timezone: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2053,14 +2886,355 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" - '400': - $ref: "#/components/responses/400" - content: - text/html: - schema: - type: string - '401': - $ref: "#/components/responses/401" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2093,14 +3267,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2132,14 +3336,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2188,14 +3396,355 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" - '400': - $ref: "#/components/responses/400" - content: - text/html: - schema: - type: string - '401': - $ref: "#/components/responses/401" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2232,14 +3781,355 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" - '400': - $ref: "#/components/responses/400" - content: - text/html: - schema: - type: string - '401': - $ref: "#/components/responses/401" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2273,14 +4163,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2314,14 +4528,355 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" - '400': - $ref: "#/components/responses/400" - content: - text/html: - schema: - type: string - '401': - $ref: "#/components/responses/401" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2369,6 +4924,12 @@ paths: properties: MediaContainer: $ref: "#/components/schemas/MediaContainer" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 '404': description: The specified hub could not be found content: @@ -2407,14 +4968,355 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" - '400': - $ref: "#/components/responses/400" - content: - text/html: - schema: - type: string - '401': - $ref: "#/components/responses/401" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2486,6 +5388,345 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 '400': description: A required parameter was not given, the wrong type, or wrong value content: @@ -2551,6 +5792,345 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 '400': description: A required parameter was not given, the wrong type, or wrong value content: @@ -2588,14 +6168,22 @@ paths: version: description: The full version string of the PMS type: string + example: + MediaContainer: + claimed: true + machineIdentifier: example + size: 1 + version: example '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2628,14 +6216,18 @@ paths: application/json: schema: $ref: "#/components/schemas/IPResponse" + example: + ip: 192.168.1.1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2657,14 +6249,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2705,14 +6327,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2730,18 +6676,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete library caches content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2759,18 +6710,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated clean bundles content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2815,6 +6771,15 @@ paths: application/json: schema: $ref: "#/components/schemas/Collection" + example: + artBlurHash: string value + collectionFilterBasedOnUser: true + collectionMode: default + collectionPublished: true + collectionSort: string value + lastRatedAt: 1 + thumbBlurHash: string value + userRating: 1 '400': description: The uri is missing for a smart collection or the section could not be found content: @@ -2883,14 +6848,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -2922,16 +7211,19 @@ paths: - $ref: "#/components/parameters/type" - $ref: "#/components/parameters/title" - name: includeFullMetadata + description: Include full metadata in the response in: query schema: $ref: "#/components/schemas/BoolInt" description: Whether or not to include full metadata on a positive match. When set, and the best match exceeds a score threshold of 85, metadata as rich as possible is sent back. - name: includeAncestorMetadata + description: Include ancestor metadata in the response in: query schema: $ref: "#/components/schemas/BoolInt" description: Whether or not to include metadata for the item's ancestor (e.g. show and season data for an episode). - name: includeAlternateMetadataSources + description: Include alternate metadata sources in the response in: query schema: $ref: "#/components/schemas/BoolInt" @@ -2997,14 +7289,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3038,14 +7654,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3078,14 +7698,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3119,18 +7743,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated optimize the database content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3175,14 +7804,24 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithArtwork" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - {} '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3216,14 +7855,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3250,25 +8213,30 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: query + description: The search query string in: query schema: type: string - name: limit + description: Maximum number of items to return in: query schema: type: integer default: 10 - name: searchTypes + description: Types of content to search for in: query schema: type: string example: movies,tv - name: searchProviders + description: Providers to include in the search in: query schema: type: string example: discover,PLEXAVOD,PLEXTVOD - name: includeMetadata + description: Include metadata in the search results in: query schema: type: integer @@ -3280,14 +8248,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3309,14 +8601,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3357,14 +8679,47 @@ paths: title1: description: Typically just "Plex Library" type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + allowSync: true + Directory: + - title: string value + type: movie + agent: string value + allowSync: true + art: string value + composite: string value + content: true + contentChangedAt: 1 + createdAt: 1 + directory: true + filters: true + hidden: true + key: string value + language: string value + Location: + - id: 1 + refreshing: true + scannedAt: 1 + scanner: string value + thumb: string value + updatedAt: 1 + uuid: string value + title1: example '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3457,10 +8812,13 @@ paths: responses: '200': $ref: "#/components/responses/slash-get-responses-200" + description: Successfully created/executed add a library section content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Section cannot be created due to bad parameters in request content: @@ -3480,18 +8838,23 @@ paths: responses: '200': $ref: "#/components/responses/LibrarySections" + description: Successfully deleted stop refresh content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3533,10 +8896,28 @@ paths: responses: '200': $ref: "#/components/responses/LibrarySections" + description: Successfully retrieved get section prefs content: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSettings" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value '400': description: type not provided or not an integer content: @@ -3573,10 +8954,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed refresh all sections content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '503': description: Server cannot refresh a music library when not signed in content: @@ -3611,14 +8995,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3678,14 +9386,29 @@ paths: thumb: description: The URL to a thumbnail for this tag type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - filter: example + id: 1 + tag: example + tagKey: example + tagType: 1 + thumb: example '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3724,14 +9447,50 @@ paths: application/json: schema: $ref: "#/components/schemas/DVRResponse" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3780,18 +9539,23 @@ paths: responses: '200': $ref: "#/components/responses/dvrRequestHandler_slash-get-responses-200" + description: Successfully created/executed create a dvr content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3864,6 +9628,17 @@ paths: lineupIdentifier: description: The channel identifier in the lineup type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + ChannelMapping: + - channelKey: example + deviceIdentifier: example + favorite: true + lineupIdentifier: example '404': description: No device or provider with the identifier was found content: @@ -3917,6 +9692,25 @@ paths: application/json: schema: $ref: "#/components/schemas/ChannelResponse" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Channel: + - title: string value + callSign: string value + channelVcn: string value + drm: true + favorite: true + hd: true + identifier: string value + key: string value + language: string value + signalQuality: 1 + signalStrength: 1 + thumb: string value '404': description: No provider with the identifier was found content: @@ -3956,14 +9750,31 @@ paths: type: array items: $ref: "#/components/schemas/EPGCountry" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Country: + - title: string value + type: string value + example: string value + code: string value + flavor: 1 + key: string value + language: string value + languageTitle: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -3985,14 +9796,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" - '400': - $ref: "#/components/responses/400" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -4030,14 +10165,25 @@ paths: type: array items: $ref: "#/components/schemas/EPGLanguage" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Language: + - title: string value + code: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -4085,6 +10231,21 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithLineup" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Lineup: + - title: string value + type: string value + identifier: string value + key: string value + lineupType: 1 + location: string value + uuid: string value + uuid: example '404': description: No device or provider with the identifier was found content: @@ -4148,6 +10309,20 @@ paths: type: array items: $ref: "#/components/schemas/Channel" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Lineup: + - title: string value + type: string value + identifier: string value + key: string value + lineupType: 1 + location: string value + uuid: string value '404': description: No provider with the identifier was found content: @@ -4183,14 +10358,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -4224,14 +10723,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -4270,14 +11093,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -4297,17 +11444,25 @@ paths: required: true content: text/plain: + example: + level: DEBUG + message: string value + source: string value schema: $ref: "#/components/schemas/LogMessageRequest" responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed logging a multi-line message to the plex media server log content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -4366,18 +11521,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated logging a single-line message to the plex media server log content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -4415,10 +11575,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed enabling papertrail content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '403': description: User doesn't have permission content: @@ -4476,14 +11639,26 @@ paths: type: array items: $ref: "#/components/schemas/MediaGrabber" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaGrabber: + - title: string value + identifier: string value + protocol: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -4514,14 +11689,49 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -4560,8 +11770,42 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" - '400': - $ref: "#/components/responses/400" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -4598,14 +11842,49 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -4634,14 +11913,26 @@ paths: items: $ref: "#/components/schemas/Provider" - $ref: "#/components/schemas/ProviderFeature" + example: + MediaContainer: + Provider: + - title: string value + identifier: string value + Protocol: string value + types: string value + title: string value + type: string value + key: search '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -4673,12 +11964,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed add a media provider content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -4693,18 +11988,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed refresh media providers content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -4764,6 +12064,365 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSubscription" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaSubscription: + - title: string value + type: 1 + airingsType: New Airings Only + createdAt: 1 + Directory: {} + durationTotal: 1 + key: string value + librarySectionTitle: string value + locationPath: string value + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + Playlist: {} + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + storageTotal: 1 + targetLibrarySectionID: 1 + targetSectionLocationID: 1 + Video: {} '403': description: User cannot access DVR on this server content: @@ -4860,8 +12519,368 @@ paths: type: array items: $ref: "#/components/schemas/MediaSubscription" - '400': - $ref: "#/components/responses/400" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaSubscription: + - title: string value + type: 1 + airingsType: New Airings Only + createdAt: 1 + Directory: {} + durationTotal: 1 + key: string value + librarySectionTitle: string value + locationPath: string value + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + Playlist: {} + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + storageTotal: 1 + targetLibrarySectionID: 1 + targetSectionLocationID: 1 + Video: {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -4926,6 +12945,339 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMediaGrabOperation" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive '403': description: User cannot access DVR on this server content: @@ -5023,6 +13375,14 @@ paths: targetLibrarySectionID: description: Where this subscription will record to type: integer + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + SubscriptionTemplate: + - MediaSubscription: [] '403': description: User cannot access DVR on this server content: @@ -5058,14 +13418,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5087,14 +13451,67 @@ paths: application/json: schema: $ref: "#/components/schemas/UserPlexAccount" - '400': - $ref: "#/components/responses/400" - content: - text/html: - schema: - type: string - '401': - $ref: "#/components/responses/401" + example: + title: string value + adsConsentReminderAt: 1 + adsConsentSetAt: 1 + authToken: string value + backupCodesCreated: false + confirmed: false + country: string value + email: user@example.com + emailOnlyAuth: false + entitlements: + - string value + experimentalFeatures: false + friendlyName: string value + guest: false + hasPassword: true + home: false + homeAdmin: false + homeSize: 1 + id: 1 + joinedAt: 1 + mailingListActive: false + mailingListStatus: active + maxHomeSize: 1 + pin: string value + profile: + autoSelectAudio: true + protected: false + rememberExpiresAt: 1 + restricted: false + roles: + - string value + scrobbleTypes: string value + services: + - endpoint: https://plex.tv + identifier: string value + status: online + subscription: + active: true + features: + - string value + status: Inactive + subscriptions: + - active: true + features: + - string value + status: Inactive + thumb: https://plex.tv + twoFactorEnabled: false + username: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5125,14 +13542,18 @@ paths: application/json: schema: $ref: "#/components/schemas/ClaimTokenResponse" + example: + token: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5154,14 +13575,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5309,18 +13734,21 @@ paths: format: binary '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '403': $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource content: text/html: schema: type: string '404': $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: text/html: schema: @@ -5342,14 +13770,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5409,14 +13841,27 @@ paths: type: string trusted: type: boolean + example: + clientIdentifier: example + code: example + createdAt: example + expiresAt: example + expiresIn: 1 + id: 1 + newRegistration: true + product: example + qr: example + trusted: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5449,12 +13894,14 @@ paths: $ref: "#/components/schemas/LegacyPinResponse" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5481,6 +13928,9 @@ paths: requestBody: content: application/json: + example: + authToken: example + pin: example schema: type: object properties: @@ -5489,6 +13939,9 @@ paths: pin: type: string application/x-www-form-urlencoded: + example: + authToken: example + pin: example schema: type: object properties: @@ -5503,14 +13956,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5550,6 +14007,7 @@ paths: schema: type: string - name: streamID + description: The unique identifier of the stream in: query schema: type: integer @@ -5562,12 +14020,14 @@ paths: $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5603,14 +14063,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5646,14 +14110,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5689,14 +14157,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5731,10 +14203,12 @@ paths: schema: type: string - name: offset + description: The byte offset for stream seeking in: query schema: type: integer - name: machineIdentifier + description: The machine identifier of the target device in: query schema: type: string @@ -5745,14 +14219,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5788,14 +14266,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5836,14 +14318,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5873,6 +14359,7 @@ paths: schema: type: string - name: shuffle + description: Whether to enable shuffle mode in: query schema: type: integer @@ -5880,6 +14367,7 @@ paths: - 0 - 1 - name: repeat + description: The repeat mode to set in: query schema: type: integer @@ -5888,6 +14376,7 @@ paths: - 1 - 2 - name: volume + description: The volume level to set in: query schema: type: integer @@ -5900,14 +14389,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5937,6 +14430,7 @@ paths: schema: type: string - name: rating + description: The rating value to set in: query schema: type: integer @@ -5947,14 +14441,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -5984,6 +14482,7 @@ paths: schema: type: string - name: state + description: The desired playback state in: query schema: type: string @@ -5998,14 +14497,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6035,14 +14538,17 @@ paths: schema: type: string - name: audioStreamID + description: The unique identifier of the audiostream in: query schema: type: integer - name: subtitleStreamID + description: The unique identifier of the subtitlestream in: query schema: type: integer - name: videoStreamID + description: The unique identifier of the videostream in: query schema: type: integer @@ -6055,12 +14561,14 @@ paths: $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6090,6 +14598,7 @@ paths: schema: type: string - name: streamID + description: The unique identifier of the stream in: query schema: type: integer @@ -6102,12 +14611,14 @@ paths: $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6137,6 +14648,7 @@ paths: schema: type: string - name: offset + description: The byte offset for stream seeking in: query schema: type: integer @@ -6147,14 +14659,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6195,14 +14711,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6243,14 +14763,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6286,14 +14810,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6329,14 +14857,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6372,14 +14904,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6409,6 +14945,7 @@ paths: schema: type: string - name: streamID + description: The unique identifier of the stream in: query schema: type: integer @@ -6421,12 +14958,14 @@ paths: $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6462,14 +15001,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6499,6 +15042,7 @@ paths: schema: type: string - name: streamID + description: The unique identifier of the stream in: query schema: type: integer @@ -6511,12 +15055,14 @@ paths: $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6546,6 +15092,7 @@ paths: schema: type: string - name: level + description: The level in: query schema: type: integer @@ -6558,14 +15105,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6601,14 +15152,49 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6644,14 +15230,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6691,14 +15281,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6753,14 +15347,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -6800,8 +15718,331 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -6842,12 +16083,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed upload media art content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '403': $ref: "#/components/responses/200" + description: Forbidden - User does not have permission to access this resource content: text/html: schema: @@ -6951,8 +16196,23 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithPlayQueue" + example: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + playQueueID: 42 + playQueueLastAddedItemID: 123 + playQueueSelectedItemID: 1 + playQueueSelectedItemOffset: 0 + playQueueSelectedMetadataItemID: 456 + playQueueShuffled: false + playQueueSourceURI: library://abc123/item/%2Flibrary%2Fmetadata%2F1 + playQueueTotalCount: 50 + playQueueVersion: 3 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -6986,14 +16246,30 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithPlayQueue" + example: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + playQueueID: 42 + playQueueLastAddedItemID: 123 + playQueueSelectedItemID: 1 + playQueueSelectedItemOffset: 0 + playQueueSelectedMetadataItemID: 456 + playQueueShuffled: false + playQueueSourceURI: library://abc123/item/%2Flibrary%2Fmetadata%2F1 + playQueueTotalCount: 50 + playQueueVersion: 3 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -7048,8 +16324,34 @@ paths: type: array items: $ref: "#/components/schemas/PlexDevice" - '400': - $ref: "#/components/responses/400" + example: + - accessToken: string value + clientIdentifier: string value + connections: + - address: string value + IPv6: true + local: true + port: 1 + protocol: http + relay: true + uri: string value + dnsRebindingProtection: true + home: true + httpsRequired: true + name: string value + natLoopbackSupported: true + owned: true + presence: true + product: string value + productVersion: string value + provides: string value + publicAddress: string value + publicAddressMatches: true + relay: true + synced: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -7060,6 +16362,11 @@ paths: application/json: schema: $ref: "#/components/schemas/UnauthorizedErrorResponse" + example: + errors: + - code: 1001 + message: User could not be authenticated + status: 401 /security/resources: get: operationId: getSourceConnectionInformation @@ -7102,6 +16409,23 @@ paths: allOf: - $ref: "#/components/schemas/MediaContainer" - $ref: "#/components/schemas/ConnectionInfoWrapper" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + accessToken: string value + clientIdentifier: string value + Connection: + - address: string value + local: true + port: 1 + protocol: string value + relay: true + uri: string value + name: string value '400': description: A query param is missing or the wrong value content: @@ -7168,6 +16492,13 @@ paths: token: description: The transient token type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + token: example '400': description: A query param is missing or the wrong value content: @@ -7208,14 +16539,27 @@ paths: application/json: schema: $ref: "#/components/schemas/ConnectionInfo" + example: + accessToken: string value + clientIdentifier: string value + Connection: + - address: string value + local: true + port: 1 + protocol: string value + relay: true + uri: string value + name: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -7248,14 +16592,21 @@ paths: application/json: schema: $ref: "#/components/schemas/ServerAccessTokensResponse" + example: + accessTokens: + - expiresAt: string value + scope: string value + token: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -7288,14 +16639,42 @@ paths: application/json: schema: $ref: "#/components/schemas/ServerUserFeaturesResponse" + example: + features: + - type: string value + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + key: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -7326,14 +16705,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -7372,14 +16781,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -7426,6 +16865,17 @@ paths: type: array items: $ref: "#/components/schemas/UltraBlurColors" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + UltraBlurColors: + - bottomLeft: string value + bottomRight: string value + topLeft: string value + topRight: string value '404': description: The image url could not be found. content: @@ -7545,14 +16995,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -7608,14 +17062,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -7649,14 +17133,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -7706,14 +17220,338 @@ paths: User: $ref: "#/components/schemas/User" - $ref: "#/components/schemas/Metadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -7745,14 +17583,34 @@ paths: type: array items: $ref: "#/components/schemas/TranscodeJob" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + TranscodeJob: + - title: string value + type: transcode + generatorID: 1 + key: string value + progress: 1 + ratingKey: string value + remaining: 1 + size: 1 + speed: 1 + targetTagID: 1 + thumb: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -7877,14 +17735,39 @@ paths: type: array items: $ref: "#/components/schemas/PlaybackHistoryMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + accountID: 1 + deviceID: 1 + grandparentRatingKey: string value + grandparentTitle: string value + historyKey: string value + index: 1 + key: string value + librarySectionID: string value + originallyAvailableAt: string value + parentIndex: 1 + parentTitle: string value + ratingKey: string value + thumb: string value + viewedAt: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -7927,10 +17810,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed terminate a session content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '401': description: Server does not have the feature enabled content: @@ -7975,14 +17861,23 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithStatus" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + status: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8013,14 +17908,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8051,14 +17976,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8089,14 +18044,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8127,14 +18086,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8165,14 +18128,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8206,14 +18199,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8247,14 +18270,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8288,14 +18315,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8317,14 +18348,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8410,18 +18765,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated checking for updates content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8468,14 +18828,40 @@ paths: description: The current error code (`0` means no error) type: integer - $ref: "#/components/schemas/UpdaterStatus" + example: + MediaContainer: + autoUpdateVersion: 1 + canInstall: true + checkedAt: 1 + downloadURL: example + Release: + - added: string value + downloadURL: string value + fixed: string value + key: string value + state: available + version: string value + status: 1 + checkedAt: 1 + downloadURL: string value + Release: + - added: string value + downloadURL: string value + fixed: string value + key: string value + state: available + version: string value + status: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8508,18 +18894,79 @@ paths: application/json: schema: $ref: "#/components/schemas/UserPlexAccount" + example: + title: string value + adsConsentReminderAt: 1 + adsConsentSetAt: 1 + authToken: string value + backupCodesCreated: false + confirmed: false + country: string value + email: user@example.com + emailOnlyAuth: false + entitlements: + - string value + experimentalFeatures: false + friendlyName: string value + guest: false + hasPassword: true + home: false + homeAdmin: false + homeSize: 1 + id: 1 + joinedAt: 1 + mailingListActive: false + mailingListStatus: active + maxHomeSize: 1 + pin: string value + profile: + autoSelectAudio: true + protected: false + rememberExpiresAt: 1 + restricted: false + roles: + - string value + scrobbleTypes: string value + services: + - endpoint: https://plex.tv + identifier: string value + status: online + subscription: + active: true + features: + - string value + status: Inactive + subscriptions: + - active: true + features: + - string value + status: Inactive + thumb: https://plex.tv + twoFactorEnabled: false + username: string value + uuid: string value '400': description: Bad Request - A parameter was not specified, or was specified incorrectly. content: application/json: schema: $ref: "#/components/schemas/BadRequestErrorResponse" + example: + errors: + - code: 1000 + message: X-Plex-Client-Identifier is missing + status: 400 '401': description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. content: application/json: schema: $ref: "#/components/schemas/UnauthorizedErrorResponse" + example: + errors: + - code: 1001 + message: User could not be authenticated + status: 401 /user/view_state_sync: put: operationId: updateViewStateSync @@ -8548,14 +18995,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8875,18 +19326,35 @@ paths: - totalSize - size - User + example: + MediaContainer: + friendlyName: myPlex + identifier: com.plexapp.plugins.myplex + machineIdentifier: 3dff4c4da3b1229a649aa574a9e2b419a684a20e + size: 30 + totalSize: 30 '400': description: Bad Request - A parameter was not specified, or was specified incorrectly. content: application/json: schema: $ref: "#/components/schemas/BadRequestErrorResponse" + example: + errors: + - code: 1000 + message: X-Plex-Client-Identifier is missing + status: 400 '401': description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. content: application/json: schema: $ref: "#/components/schemas/UnauthorizedErrorResponse" + example: + errors: + - code: 1001 + message: User could not be authenticated + status: 401 /users/account: get: operationId: getAccountXML @@ -8917,12 +19385,14 @@ paths: $ref: "#/components/schemas/UserPlexAccount" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8955,14 +19425,67 @@ paths: application/json: schema: $ref: "#/components/schemas/UserPlexAccount" - '400': - $ref: "#/components/responses/400" - content: - text/html: - schema: - type: string - '401': - $ref: "#/components/responses/401" + example: + title: string value + adsConsentReminderAt: 1 + adsConsentSetAt: 1 + authToken: string value + backupCodesCreated: false + confirmed: false + country: string value + email: user@example.com + emailOnlyAuth: false + entitlements: + - string value + experimentalFeatures: false + friendlyName: string value + guest: false + hasPassword: true + home: false + homeAdmin: false + homeSize: 1 + id: 1 + joinedAt: 1 + mailingListActive: false + mailingListStatus: active + maxHomeSize: 1 + pin: string value + profile: + autoSelectAudio: true + protected: false + rememberExpiresAt: 1 + restricted: false + roles: + - string value + scrobbleTypes: string value + services: + - endpoint: https://plex.tv + identifier: string value + status: online + subscription: + active: true + features: + - string value + status: Inactive + subscriptions: + - active: true + features: + - string value + status: Inactive + thumb: https://plex.tv + twoFactorEnabled: false + username: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -8995,14 +19518,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -9033,6 +19560,11 @@ paths: description: Login credentials content: application/x-www-form-urlencoded: + example: + login: username@email.com + password: password123 + rememberMe: true + verificationCode: '123456' schema: type: object properties: @@ -9161,18 +19693,95 @@ paths: required: - pastSubscriptions - trials + example: + title: string value + adsConsentReminderAt: 1 + adsConsentSetAt: 1 + authToken: string value + backupCodesCreated: false + confirmed: false + country: string value + email: user@example.com + emailOnlyAuth: false + entitlements: + - string value + experimentalFeatures: false + friendlyName: string value + guest: false + hasPassword: true + home: false + homeAdmin: false + homeSize: 1 + id: 1 + joinedAt: 1 + mailingListActive: false + mailingListStatus: active + maxHomeSize: 1 + pin: string value + profile: + autoSelectAudio: true + protected: false + rememberExpiresAt: 1 + restricted: false + roles: + - string value + scrobbleTypes: string value + services: + - endpoint: https://plex.tv + identifier: string value + status: online + subscription: + active: true + features: + - string value + status: Inactive + subscriptions: + - active: true + features: + - string value + status: Inactive + thumb: https://plex.tv + twoFactorEnabled: false + username: string value + uuid: string value + pastSubscriptions: + - type: plexpass + billing: + internalPaymentMethod: {} + canceled: false + canConvert: false + canDowngrade: false + canReactivate: false + canUpgrade: false + endsAt: 1556281940 + gracePeriod: false + onHold: false + renewsAt: 1556281940 + state: ended + trials: + - {} '400': description: Bad Request - A parameter was not specified, or was specified incorrectly. content: application/json: schema: $ref: "#/components/schemas/BadRequestErrorResponse" + example: + errors: + - code: 1000 + message: X-Plex-Client-Identifier is missing + status: 400 '401': description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. content: application/json: schema: $ref: "#/components/schemas/UnauthorizedErrorResponse" + example: + errors: + - code: 1001 + message: User could not be authenticated + status: 401 /users/signout: delete: operationId: signOut @@ -9201,8 +19810,11 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -9235,14 +19847,33 @@ paths: application/json: schema: $ref: "#/components/schemas/WebhookPayload" + example: + Account: + title: string value + id: 1 + thumb: string value + event: media.play + Metadata: {} + owner: true + Player: + title: string value + local: true + publicAddress: string value + uuid: string value + Server: + title: string value + uuid: string value + user: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -9274,14 +19905,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -9552,14 +20187,347 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDecision" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + availableBandwidth: 1 + directPlayDecisionCode: 1 + directPlayDecisionText: example + generalDecisionCode: 1 + generalDecisionText: example + mdeDecisionCode: 1 + mdeDecisionText: example + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + transcodeDecisionCode: 1 + transcodeDecisionText: example '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -9588,10 +20556,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed manually trigger a transcoder fallback content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '404': description: Session ID does not exist content: @@ -9928,18 +20899,21 @@ paths: [BUNNY SNORES] '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '403': $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource content: text/html: schema: type: string '404': $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: text/html: schema: @@ -9976,10 +20950,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted cancel a running activity content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Activity is not cancellable content: @@ -10046,10 +21023,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted stop a single butler task content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '404': description: No task with this name was found or no task with this name was running content: @@ -10170,14 +21150,26 @@ paths: type: array items: $ref: "#/components/schemas/DownloadQueue" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + DownloadQueue: + - id: 1 + itemCount: 1 + status: deciding '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -10265,14 +21257,25 @@ paths: type: array items: $ref: "#/components/schemas/AddedQueueItem" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + AddedQueueItems: + - id: 1 + key: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -10322,14 +21325,54 @@ paths: type: array items: $ref: "#/components/schemas/DownloadQueueItem" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + DownloadQueueItem: + - DecisionResult: + availableBandwidth: 1 + directPlayDecisionCode: 1 + directPlayDecisionText: string value + generalDecisionCode: 1 + generalDecisionText: string value + mdeDecisionCode: 1 + mdeDecisionText: string value + transcodeDecisionCode: 1 + transcodeDecisionText: string value + error: string value + id: 1 + key: string value + queueId: 1 + status: deciding + transcode: {} + TranscodeSession: + complete: true + context: string value + duration: 1 + error: true + key: string value + progress: 1 + protocol: string value + size: 1 + sourceAudioCodec: string value + sourceVideoCodec: string value + speed: 1 + throttled: true + transcodeHwFullPipeline: true + transcodeHwRequested: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -10356,6 +21399,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: channel + description: The channel identifier in: path required: true schema: @@ -10367,14 +21411,41 @@ paths: application/json: schema: $ref: "#/components/schemas/PlexDownloadsResponse" + example: + MediaContainer: + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + size: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -10401,6 +21472,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: id + description: The unique identifier of the item in: path required: true schema: @@ -10412,14 +21484,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -10446,6 +21522,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: userId + description: The unique identifier of the user in: path required: true schema: @@ -10457,14 +21534,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -10490,6 +21571,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: userId + description: The unique identifier of the user in: path required: true schema: @@ -10501,14 +21583,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -10535,6 +21621,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: userId + description: The unique identifier of the user in: path required: true schema: @@ -10546,14 +21633,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -10592,10 +21683,350 @@ paths: responses: '200': $ref: "#/components/responses/responses-200" + description: Successfully retrieved get hubs for section by metadata item content: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 '400': description: No metadata with that id or permission is denied content: @@ -10636,10 +22067,350 @@ paths: responses: '200': $ref: "#/components/responses/responses-200" + description: Successfully retrieved get postplay hubs content: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 '400': description: No metadata with that id or permission is denied content: @@ -10680,10 +22451,350 @@ paths: responses: '200': $ref: "#/components/responses/responses-200" + description: Successfully retrieved get related hubs content: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 '400': description: No metadata with that id or permission is denied content: @@ -10737,6 +22848,345 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 '400': description: No section with that id or permission is denied content: @@ -10774,12 +23224,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted reset hubs to defaults content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '403': $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource content: text/html: schema: @@ -10848,8 +23302,23 @@ paths: type: array items: $ref: "#/components/schemas/ManagedHub" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + homeVisibility: all + identifier: string value + promotedToOwnHome: true + promotedToRecommended: true + promotedToSharedHome: true + recommendationsVisibility: all '403': $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource content: text/html: schema: @@ -10911,10 +23380,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed create a custom hub content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: A hub could not be created with this metadata item content: @@ -10923,6 +23395,7 @@ paths: type: string '403': $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource content: text/html: schema: @@ -10975,12 +23448,16 @@ paths: responses: '200': $ref: "#/components/responses/get-responses-200" + description: Successfully updated move hub content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '403': $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource content: text/html: schema: @@ -11023,6 +23500,328 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '404': description: Collection not found content: @@ -11069,6 +23868,328 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '404': description: Collection not found content: @@ -11098,6 +24219,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: id + description: The unique identifier of the item in: path required: true schema: @@ -11105,6 +24227,8 @@ paths: requestBody: content: multipart/form-data: + example: + file: example schema: type: object properties: @@ -11118,14 +24242,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11153,6 +24281,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: id + description: The unique identifier of the item in: path required: true schema: @@ -11164,14 +24293,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11199,6 +24652,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: id + description: The unique identifier of the item in: path required: true schema: @@ -11210,14 +24664,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11245,6 +25023,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: id + description: The unique identifier of the item in: path required: true schema: @@ -11256,14 +25035,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11291,6 +25394,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: id + description: The unique identifier of the item in: path required: true schema: @@ -11302,14 +25406,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11337,26 +25765,31 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: id + description: The unique identifier of the item in: path required: true schema: type: integer - name: excludeParentID + description: The unique identifier of the excludeparent in: query required: false schema: type: integer - name: excludeGrandparentID + description: The unique identifier of the excludegrandparent in: query required: false schema: type: integer - name: limit + description: Maximum number of items to return in: query required: false schema: type: integer - name: maxDistance + description: The maxDistance in: query required: false schema: @@ -11368,14 +25801,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11403,6 +26160,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: id + description: The unique identifier of the item in: path required: true schema: @@ -11414,14 +26172,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11449,6 +26531,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: id + description: The unique identifier of the item in: path required: true schema: @@ -11460,14 +26543,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11495,6 +26902,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: id + description: The unique identifier of the item in: path required: true schema: @@ -11502,6 +26910,8 @@ paths: requestBody: content: multipart/form-data: + example: + file: example schema: type: object properties: @@ -11515,14 +26925,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11550,6 +26964,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: id + description: The unique identifier of the item in: path required: true schema: @@ -11561,14 +26976,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11609,10 +27348,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete a metadata item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Media items could not be deleted content: @@ -11761,14 +27503,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11810,10 +27876,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated edit a metadata item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Media items could not be deleted content: @@ -11851,18 +27920,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated ad-detect an item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11908,14 +27982,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -11963,18 +28361,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated analyze an item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12008,6 +28411,7 @@ paths: schema: type: string - name: force + description: Force the operation even if conditions are not met in: query required: false schema: @@ -12015,18 +28419,21 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated generate thumbs of chapters for an item content: application/octet-stream: schema: $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12060,11 +28467,13 @@ paths: schema: type: string - name: force + description: Force the operation even if conditions are not met in: query required: false schema: $ref: "#/components/schemas/BoolInt" - name: manual + description: Whether to perform the operation manually in: query required: false schema: @@ -12072,18 +28481,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated credit detect a metadata item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12129,14 +28543,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12180,10 +28918,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed add to an item's extras content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '404': description: Either the metadata item is not present or the extra could not be added content: @@ -12234,12 +28975,14 @@ paths: format: binary '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12273,6 +29016,7 @@ paths: schema: type: string - name: force + description: Force the operation even if conditions are not met in: query required: false schema: @@ -12280,18 +29024,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated start bif generation of an item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12339,18 +29088,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated intro detect an item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12418,6 +29172,18 @@ paths: allOf: - $ref: "#/components/schemas/MediaContainer" - $ref: "#/components/schemas/Marker" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + title: string value + type: intro + color: string value + endTimeOffset: 1 + id: 1 + startTimeOffset: 1 '400': description: Request parameters are bad, such as an `endTimeOffset` prior to the `startTimeOffset` content: @@ -12453,15 +29219,18 @@ paths: schema: type: string - name: guid + description: The guid in: query schema: type: string - name: name + description: The name in: query required: false schema: type: string - name: year + description: The year to filter by in: query required: false schema: @@ -12469,18 +29238,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated match a metadata item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12514,30 +29288,36 @@ paths: schema: type: string - name: title + description: The title to filter by in: query schema: type: string - name: parentTitle + description: The parentTitle in: query required: false schema: type: string - name: agent + description: The identifier of the metadata agent to use in: query required: false schema: type: string - name: language + description: The language code to use in: query required: false schema: type: string - name: year + description: The year to filter by in: query required: false schema: type: integer - name: manual + description: Whether to perform the operation manually in: query required: false schema: @@ -12549,14 +29329,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12590,6 +29694,7 @@ paths: schema: type: string - name: ids + description: Comma-separated list of item identifiers in: query explode: false schema: @@ -12599,18 +29704,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated merge a metadata item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12644,24 +29754,30 @@ paths: schema: type: string - name: args + description: The args in: query schema: type: object responses: '200': $ref: "#/components/responses/200" + description: Successfully updated set metadata preferences content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12695,11 +29811,13 @@ paths: schema: type: string - name: agent + description: The identifier of the metadata agent to use in: query required: false schema: type: string - name: markUpdated + description: The markUpdated in: query required: false schema: @@ -12712,18 +29830,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated refresh a metadata item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12760,14 +29883,355 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" - '400': - $ref: "#/components/responses/400" - content: - text/html: - schema: - type: string - '401': - $ref: "#/components/responses/401" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12805,14 +30269,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12848,18 +30636,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated split a metadata item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12893,16 +30686,19 @@ paths: schema: type: string - name: title + description: The title to filter by in: query required: false schema: type: string - name: language + description: The language code to use in: query required: false schema: type: string - name: mediaItemID + description: The unique identifier of the mediaitem in: query required: false schema: @@ -12914,16 +30710,19 @@ paths: schema: type: string - name: format + description: The format in: query required: false schema: type: string - name: forced + description: The forced in: query required: false schema: $ref: "#/components/schemas/BoolInt" - name: hearingImpaired + description: The hearingImpaired in: query required: false schema: @@ -12931,18 +30730,343 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully retrieved get subtitles content: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -12979,14 +31103,24 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithNestedMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MetadataItem: + - {} '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -13022,18 +31156,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated unmatch a metadata item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -13083,14 +31222,25 @@ paths: type: array items: $ref: "#/components/schemas/TopUserAccount" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Account: + - globalViewCount: 1 + id: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -13138,18 +31288,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated detect voice activity content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -13187,6 +31342,7 @@ paths: responses: '204': $ref: "#/components/responses/204" + description: Successfully completed get augmentation status '401': description: This augmentation is not owned by the requesting user content: @@ -13242,10 +31398,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated set stream selection content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: One of the audio or subtitle streams does not belong to this part content: @@ -13284,8 +31443,26 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithTags" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value '404': $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: text/html: schema: @@ -13322,8 +31499,331 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '404': $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: text/html: schema: @@ -13364,18 +31864,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete a library section content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -13460,14 +31965,30 @@ paths: type: string viewMode: type: integer + example: + MediaContainer: + art: example + content: example + identifier: example + librarySectionID: 1 + mediaTagPrefix: example + mediaTagVersion: 1 + size: 1 + sortAsc: true + thumb: example + title1: example + viewGroup: example + viewMode: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -13547,10 +32068,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated edit a library section content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Section cannot be created due to bad parameters in request content: @@ -13580,6 +32104,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -13591,14 +32116,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -13682,12 +32237,14 @@ paths: viewGroup: album '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -13938,14 +32495,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14020,6 +32901,7 @@ paths: schema: type: string - name: type + description: The media type to filter by in: query schema: type: string @@ -14087,10 +32969,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated set the fields of the filtered items content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: The set of parameters are inconsistent or invalid values content: @@ -14222,12 +33107,14 @@ paths: viewGroup: show '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14263,18 +33150,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated analyze a section content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14314,14 +33206,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14358,14 +33574,24 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithArtwork" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - {} '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14425,6 +33651,328 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': description: A paramater is either invalid or missing content: @@ -14454,6 +34002,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -14465,14 +34014,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14500,6 +34373,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -14511,14 +34385,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14546,6 +34744,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -14557,14 +34756,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14592,6 +35115,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -14603,14 +35127,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14638,6 +35486,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -14649,14 +35498,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14693,14 +35866,24 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithArtwork" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - {} '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14740,14 +35923,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14784,14 +36291,24 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithArtwork" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - {} '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14838,14 +36355,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14900,14 +36741,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '404': $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: text/html: schema: @@ -14962,14 +37127,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -14997,6 +37486,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -15008,14 +37498,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15042,6 +37536,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -15053,14 +37548,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15088,6 +37587,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -15099,14 +37599,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15133,6 +37637,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -15144,14 +37649,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15186,18 +37695,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated empty section trash content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15237,14 +37751,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15284,14 +38122,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15358,14 +38226,26 @@ paths: size: description: The number of items starting with this character type: integer + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: example + key: example + size: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15393,6 +38273,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -15404,14 +38285,355 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithHubs" - '400': - $ref: "#/components/responses/400" - content: - text/html: - schema: - type: string - '401': - $ref: "#/components/responses/401" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15447,18 +38669,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete section indexes content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15494,18 +38721,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete section intro markers content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15533,6 +38765,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -15544,14 +38777,33 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithTags" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15605,14 +38857,26 @@ paths: type: string key: type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: example + fastKey: example + key: example '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15640,6 +38904,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -15651,14 +38916,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15695,14 +38964,24 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithArtwork" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - {} '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15730,6 +39009,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -15741,14 +39021,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15788,14 +39072,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15859,14 +39467,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15894,6 +39826,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -15905,14 +39838,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15937,6 +40194,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -15948,14 +40206,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -15983,6 +40565,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -15994,14 +40577,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16028,6 +40615,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -16039,14 +40627,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16086,14 +40678,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16121,6 +41037,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -16132,14 +41049,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16170,6 +41411,7 @@ paths: schema: type: integer - name: agent + description: The identifier of the metadata agent to use in: query schema: type: string @@ -16180,14 +41422,33 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSettings" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16220,6 +41481,7 @@ paths: schema: type: integer - name: prefs + description: The preference key to retrieve or set in: query required: true schema: @@ -16230,18 +41492,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated set section prefs content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16266,6 +41533,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -16277,14 +41545,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16320,18 +41912,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted cancel section refresh content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16370,14 +41967,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16422,18 +42023,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed refresh section content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16461,6 +42067,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -16472,14 +42079,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16507,6 +42438,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -16518,14 +42450,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16565,14 +42501,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16609,14 +42869,23 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSorts" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: [] '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16644,6 +42913,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -16655,14 +42925,33 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithTags" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16690,6 +42979,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -16701,14 +42991,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16736,6 +43056,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -16747,14 +43068,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16782,6 +43107,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -16793,14 +43119,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -16855,14 +43505,25 @@ paths: totalSamples: description: The total number of samples (as a string) type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Level: + - v: 1 + totalSamples: example '403': $ref: "#/components/responses/responses-403" + description: Forbidden - User does not have permission to access this resource content: text/html: schema: type: string '404': $ref: "#/components/responses/responses-404" + description: Not Found - The requested resource does not exist content: text/html: schema: @@ -16947,18 +43608,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete a single dvr content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17003,14 +43669,50 @@ paths: application/json: schema: $ref: "#/components/schemas/DVRResponse" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17049,14 +43751,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17095,14 +43801,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17142,14 +43852,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17189,14 +44223,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17251,14 +44609,50 @@ paths: application/json: schema: $ref: "#/components/schemas/DVRResponse" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17312,14 +44706,50 @@ paths: application/json: schema: $ref: "#/components/schemas/DVRResponse" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17378,14 +44808,50 @@ paths: application/json: schema: $ref: "#/components/schemas/DVRResponse" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17425,14 +44891,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17468,18 +45258,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted tell a dvr to stop reloading program guide content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17525,12 +45320,14 @@ paths: $ref: "#/components/schemas/SuccessResponse" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17570,14 +45367,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17622,14 +45423,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17688,6 +45813,14 @@ paths: type: string status: type: integer + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + message: example + status: 1 '404': description: Device not found content: @@ -17728,6 +45861,39 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value '404': description: Device not found content: @@ -17792,6 +45958,14 @@ paths: type: string status: type: integer + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + message: example + status: 1 '404': description: Device not found content: @@ -17856,14 +46030,49 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -17922,6 +46131,21 @@ paths: type: array items: $ref: "#/components/schemas/DeviceChannel" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + DeviceChannel: + - drm: true + favorite: true + hd: true + identifier: string value + key: string value + name: string value + signalQuality: 1 + signalStrength: 1 '404': description: Device not found content: @@ -17969,18 +46193,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated set device preferences content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -18017,14 +46246,49 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -18071,14 +46335,49 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -18113,10 +46412,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted cancel an existing grab content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '403': description: User is not owner of the grab and not the admin content: @@ -18125,6 +46427,7 @@ paths: type: string '404': $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: text/html: schema: @@ -18157,12 +46460,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete a media provider content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -18193,6 +46500,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: subscriptionId + description: The unique identifier of the subscription in: path required: true schema: @@ -18200,12 +46508,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete a subscription content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -18218,6 +46530,7 @@ paths: type: string '404': $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: text/html: schema: @@ -18241,6 +46554,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: subscriptionId + description: The unique identifier of the subscription in: path required: true schema: @@ -18262,8 +46576,368 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSubscription" - '400': - $ref: "#/components/responses/400" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaSubscription: + - title: string value + type: 1 + airingsType: New Airings Only + createdAt: 1 + Directory: {} + durationTotal: 1 + key: string value + librarySectionTitle: string value + locationPath: string value + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + Playlist: {} + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + storageTotal: 1 + targetLibrarySectionID: 1 + targetSectionLocationID: 1 + Video: {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -18276,6 +46950,7 @@ paths: type: string '404': $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: text/html: schema: @@ -18299,11 +46974,13 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: subscriptionId + description: The unique identifier of the subscription in: path required: true schema: type: integer - name: prefs + description: The preference key to retrieve or set in: query style: deepObject schema: @@ -18317,8 +46994,368 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSubscription" - '400': - $ref: "#/components/responses/400" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaSubscription: + - title: string value + type: 1 + airingsType: New Airings Only + createdAt: 1 + Directory: {} + durationTotal: 1 + key: string value + librarySectionTitle: string value + locationPath: string value + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + Playlist: {} + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + storageTotal: 1 + targetLibrarySectionID: 1 + targetSectionLocationID: 1 + Video: {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -18331,6 +47368,7 @@ paths: type: string '404': $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: text/html: schema: @@ -18358,6 +47396,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: subscriptionId + description: The unique identifier of the subscription in: path required: true schema: @@ -18374,8 +47413,368 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithSubscription" - '400': - $ref: "#/components/responses/400" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaSubscription: + - title: string value + type: 1 + airingsType: New Airings Only + createdAt: 1 + Directory: {} + durationTotal: 1 + key: string value + librarySectionTitle: string value + locationPath: string value + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + Playlist: {} + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + storageTotal: 1 + targetLibrarySectionID: 1 + targetSectionLocationID: 1 + Video: {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -18388,6 +47787,7 @@ paths: type: string '404': $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: text/html: schema: @@ -18416,6 +47816,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: pinId + description: The unique identifier of the pin in: path required: true schema: @@ -18460,14 +47861,27 @@ paths: type: string trusted: type: boolean + example: + clientIdentifier: example + code: example + createdAt: example + expiresAt: example + expiresIn: 1 + id: 1 + newRegistration: true + product: example + qr: example + trusted: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -18500,6 +47914,7 @@ paths: responses: '204': $ref: "#/components/responses/204" + description: Successfully completed delete a playlist '404': description: Playlist not found (or user may not have permission to access playlist) content: @@ -18539,6 +47954,328 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '404': description: Playlist not found (or user may not have permission to access playlist) content: @@ -18572,6 +48309,7 @@ paths: responses: '204': $ref: "#/components/responses/204" + description: Successfully completed editing a playlist '404': description: Playlist not found (or user may not have permission to access playlist) content: @@ -18644,6 +48382,20 @@ paths: uri: description: The URI indicating the search for this generator type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + PlayQueueGenerator: + - type: 1 + changedAt: 1 + createdAt: 1 + id: 1 + playlistID: 1 + updatedAt: 1 + uri: example '404': description: Playlist not found (or user may not have permission to access playlist) or generator not found content: @@ -18678,12 +48430,16 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + description: Successfully deleted clearing a playlist content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -18743,6 +48499,328 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '404': description: Playlist not found (or user may not have permission to access playlist) content: @@ -18786,12 +48864,16 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated adding to a playlist content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -18859,8 +48941,19 @@ paths: application/json: schema: $ref: "#/components/schemas/PlayQueueResponse" + example: + playQueueID: 1 + playQueueLastAddedItemID: string value + playQueueSelectedItemID: 1 + playQueueSelectedItemOffset: 1 + playQueueSelectedMetadataItemID: 1 + playQueueShuffled: true + playQueueSourceURI: string value + playQueueTotalCount: 1 + playQueueVersion: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -18913,12 +49006,16 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated add a generator or playlist to a play queue content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -18961,14 +49058,338 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -19001,12 +49422,16 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated reset a play queue content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -19049,8 +49474,331 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -19089,12 +49837,16 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated unshuffle a play queue content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -19127,6 +49879,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: machineId + description: The unique machine identifier of the server in: path required: true schema: @@ -19138,14 +49891,74 @@ paths: application/json: schema: $ref: "#/components/schemas/ServerConfiguration" - '400': - $ref: "#/components/responses/400" - content: - text/html: - schema: - type: string - '401': - $ref: "#/components/responses/401" + example: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + allowCameraUpload: true + allowChannelAccess: true + allowMediaDeletion: true + allowSharing: true + allowSync: true + allowTuners: true + backgroundProcessing: true + certificate: true + companionProxy: true + countryCode: example + diagnostics: + - example + eventStream: true + friendlyName: example + hubSearch: true + itemClusters: true + livetv: 7 + machineIdentifier: 0123456789abcdef0123456789abcdef012345678 + mediaProviders: true + multiuser: true + musicAnalysis: 2 + myPlex: true + myPlexMappingState: mapped + myPlexSigninState: ok + myPlexSubscription: true + myPlexUsername: example + offlineTranscode: 1 + ownerFeatures: + - example + platform: example + platformVersion: example + pluginHost: true + pushNotifications: true + readOnlyLibraries: true + streamingBrainABRVersion: 1 + streamingBrainVersion: 1 + sync: true + transcoderActiveVideoSessions: 1 + transcoderAudio: true + transcoderLyrics: true + transcoderPhoto: true + transcoderSubtitles: true + transcoderVideo: true + transcoderVideoBitrates: + - example + transcoderVideoQualities: + - example + transcoderVideoResolutions: + - example + updatedAt: 1 + updater: true + version: example + voiceSearch: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -19172,6 +49985,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: machineId + description: The unique machine identifier of the server in: path required: true schema: @@ -19183,14 +49997,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -19218,6 +50036,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: base64path + description: The base64path in: path required: true schema: @@ -19229,14 +50048,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -19263,6 +50112,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: userId + description: The unique identifier of the user in: path required: true schema: @@ -19274,14 +50124,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -19307,6 +50161,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: userId + description: The unique identifier of the user in: path required: true schema: @@ -19318,14 +50173,18 @@ paths: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -19374,6 +50233,11 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainer" + example: + identifier: example + offset: 1 + size: 1 + totalSize: 1 '404': description: History item not found content: @@ -19410,10 +50274,28 @@ paths: responses: '200': $ref: "#/components/responses/historyAll-get-responses-200" + description: Successfully retrieved get single history item content: application/json: schema: $ref: "#/components/schemas/PlaybackHistoryMetadata" + example: + title: string value + type: string value + accountID: 1 + deviceID: 1 + grandparentRatingKey: string value + grandparentTitle: string value + historyKey: string value + index: 1 + key: string value + librarySectionID: string value + originallyAvailableAt: string value + parentIndex: 1 + parentTitle: string value + ratingKey: string value + thumb: string value + viewedAt: 1 '404': description: History item not found content: @@ -19440,6 +50322,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: syncId + description: The unique identifier of the sync item in: path required: true schema: @@ -19451,14 +50334,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -19486,6 +50399,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: agentId + description: The unique identifier of the metadata agent in: path required: true schema: @@ -19497,14 +50411,44 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -19531,6 +50475,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: uuid + description: The universally unique identifier in: path required: true schema: @@ -19542,14 +50487,21 @@ paths: application/json: schema: $ref: "#/components/schemas/UserOptOutsResponse" + example: + optOuts: + - type: string value + id: string value + value: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -19870,18 +50822,21 @@ paths: format: binary '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '403': $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource content: text/html: schema: type: string '404': $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: text/html: schema: @@ -19928,6 +50883,337 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithDecision" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + availableBandwidth: 1 + directPlayDecisionCode: 1 + directPlayDecisionText: example + generalDecisionCode: 1 + generalDecisionText: example + mdeDecisionCode: 1 + mdeDecisionText: example + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + transcodeDecisionCode: 1 + transcodeDecisionText: example '400': description: The item is not in a state where a decision is available content: @@ -20031,18 +51317,21 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete download queue items content: application/octet-stream: schema: $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -20104,14 +51393,54 @@ paths: type: array items: $ref: "#/components/schemas/DownloadQueueItem" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + DownloadQueueItem: + - DecisionResult: + availableBandwidth: 1 + directPlayDecisionCode: 1 + directPlayDecisionText: string value + generalDecisionCode: 1 + generalDecisionText: string value + mdeDecisionCode: 1 + mdeDecisionText: string value + transcodeDecisionCode: 1 + transcodeDecisionText: string value + error: string value + id: 1 + key: string value + queueId: 1 + status: deciding + transcode: {} + TranscodeSession: + complete: true + context: string value + duration: 1 + error: true + key: string value + progress: 1 + protocol: string value + size: 1 + sourceAudioCodec: string value + sourceVideoCodec: string value + speed: 1 + throttled: true + transcodeHwFullPipeline: true + transcodeHwRequested: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -20160,18 +51489,21 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed restart processing of items from the decision content: application/octet-stream: schema: $ref: "#/components/schemas/BinaryResponse" '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -20213,10 +51545,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete a custom hub content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: The hub is not a custom hub content: @@ -20225,6 +51560,7 @@ paths: type: string '403': $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource content: text/html: schema: @@ -20286,12 +51622,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated change hub visibility content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '403': $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource content: text/html: schema: @@ -20389,6 +51729,328 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': description: Item not found content: @@ -20447,6 +52109,328 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': description: Item not found content: @@ -20532,6 +52516,7 @@ paths: schema: type: string - name: element + description: The type of artwork element (e.g., art, poster, thumb) in: path required: true schema: @@ -20551,18 +52536,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully created/executed set an item's artwork, theme, etc content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -20594,6 +52584,7 @@ paths: schema: type: string - name: element + description: The type of artwork element (e.g., art, poster, thumb) in: path required: true schema: @@ -20613,18 +52604,23 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated set an item's artwork, theme, etc content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -20655,6 +52651,7 @@ paths: schema: type: string - name: marker + description: The marker identifier in: path required: true schema: @@ -20662,10 +52659,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete a marker content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Marker is not a bookmark content: @@ -20737,12 +52737,16 @@ paths: responses: '200': $ref: "#/components/responses/post-responses-200" + description: Successfully updated edit a marker content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/responses-400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -20782,6 +52786,7 @@ paths: schema: type: string - name: mediaItem + description: The mediaItem in: path required: true schema: @@ -20794,10 +52799,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete a media item content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Media item could not be deleted content: @@ -20899,10 +52907,13 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete a collection content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '404': description: Collection not found content: @@ -20948,18 +52959,22 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully retrieved get a section composite image content: application/json: schema: $ref: "#/components/schemas/BinaryResponse" + example: '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -20998,6 +53013,7 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully deleted delete a stream content: application/octet-stream: schema: @@ -21184,6 +53200,328 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '500': description: Tuning failed content: @@ -21250,14 +53588,50 @@ paths: type: array items: $ref: "#/components/schemas/DVR" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -21321,14 +53695,50 @@ paths: type: array items: $ref: "#/components/schemas/DVR" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -21376,6 +53786,21 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithLineup" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Lineup: + - title: string value + type: string value + identifier: string value + key: string value + lineupType: 1 + location: string value + uuid: string value + uuid: example '404': description: No provider with the identifier was found content: @@ -21439,6 +53864,17 @@ paths: type: array items: $ref: "#/components/schemas/EPGRegion" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Country: + - title: string value + type: string value + key: string value + national: true '404': description: No provider with the identifier was found content: @@ -21576,12 +54012,16 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + description: Successfully deleted delete a generator content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -21762,8 +54202,27 @@ paths: targetTagID: description: The tag of this generator's settings type: integer + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Item: + - title: example + type: 1 + composite: example + Device: {} + id: 1 + Location: {} + MediaSettings: {} + Policy: {} + Status: {} + target: example + targetTagID: 1 '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -21857,12 +54316,16 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated modify a generator content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -21948,8 +54411,333 @@ paths: - accessDenied - cannotTranscode - codecInstallError - '400': - $ref: "#/components/responses/400" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + processingState: processed + processingStateContext: good + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -21999,12 +54787,16 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated moving items in a playlist content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -22049,12 +54841,16 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + description: Successfully deleted delete an item from a play queue content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -22104,12 +54900,16 @@ paths: responses: '200': $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated move an item in a play queue content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -22143,16 +54943,19 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: transcodeType + description: The type of transcoding (e.g., video, audio) in: path required: true schema: type: string - name: sessionId + description: The unique identifier of the session in: path required: true schema: type: string - name: segmentId + description: The unique identifier of the media segment in: path required: true schema: @@ -22167,12 +54970,14 @@ paths: format: binary '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -22200,16 +55005,19 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: transcodeType + description: The type of transcoding (e.g., video, audio) in: path required: true schema: type: string - name: sessionId + description: The unique identifier of the session in: path required: true schema: type: string - name: segmentId + description: The unique identifier of the media segment in: path required: true schema: @@ -22224,12 +55032,14 @@ paths: format: binary '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -22260,6 +55070,7 @@ paths: schema: type: string - name: element + description: The type of artwork element (e.g., art, poster, thumb) in: path required: true schema: @@ -22291,12 +55102,14 @@ paths: format: binary '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: type: string '401': $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: text/html: schema: @@ -22488,6 +55301,21 @@ paths: application/json: schema: $ref: "#/components/schemas/MediaContainerWithLineup" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Lineup: + - title: string value + type: string value + identifier: string value + key: string value + lineupType: 1 + location: string value + uuid: string value + uuid: example '404': description: No provider with the identifier was found content: @@ -22594,12 +55422,16 @@ paths: responses: '200': $ref: "#/components/responses/200" + description: Successfully updated reprocess a generator content: application/json: schema: $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: text/html: schema: @@ -23321,6 +56153,16 @@ components: schemas: Activity: type: object + example: + title: string value + type: string value + cancellable: true + Context: {} + progress: 1 + Response: {} + subtitle: string value + userID: 1 + uuid: string value additionalProperties: true properties: title: @@ -23357,6 +56199,9 @@ components: x-speakeasy-unknown-fields: true AddedQueueItem: type: object + example: + id: 1 + key: string value properties: id: description: The queue item id that was added or the existing one if an item already exists in this queue with the same parameters @@ -23365,6 +56210,7 @@ components: description: The key added to the queue type: string AllowSync: + example: true oneOf: - type: boolean - type: string @@ -23373,6 +56219,14 @@ components: - '1' AuthKeysResponse: type: object + example: + keys: + - alg: string value + e: string value + kid: string value + kty: string value + n: string value + use: string value properties: keys: type: array @@ -23393,12 +56247,18 @@ components: type: string AuthNonceResponse: type: object + example: + nonce: string value properties: nonce: description: A random nonce string for authentication type: string AuthTokenResponse: type: object + example: + authToken: string value + clientIdentifier: string value + jwt: string value properties: authToken: description: The Plex authentication token @@ -23410,6 +56270,11 @@ components: type: string BadRequestErrorResponse: type: object + example: + errors: + - code: 400 + message: Bad Request + status: 400 properties: errors: type: array @@ -23431,6 +56296,10 @@ components: x-speakeasy-name-override: BadRequest Bandwidth: type: object + example: + bandwidth: 1 + resolution: string value + time: 1 properties: bandwidth: description: The bandwidth at this time in kbps @@ -23445,6 +56314,7 @@ components: description: A binary data response (image, audio, video, or other media) type: string format: binary + example: BoolInt: type: integer format: int32 @@ -23458,6 +56328,13 @@ components: - true ButlerTask: type: object + example: + title: string value + description: string value + enabled: true + interval: 1 + name: string value + scheduleRandomized: true properties: title: description: A user-friendly title of the task @@ -23479,6 +56356,19 @@ components: type: boolean Channel: type: object + example: + title: string value + callSign: string value + channelVcn: string value + drm: true + favorite: true + hd: true + identifier: string value + key: string value + language: string value + signalQuality: 1 + signalStrength: 1 + thumb: string value properties: title: type: string @@ -23514,6 +56404,11 @@ components: type: string ChannelMapping: type: object + example: + channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value properties: channelKey: type: string @@ -23525,6 +56420,12 @@ components: type: string ChannelResponse: type: object + example: + MediaContainer: + size: 1 + Channel: + - id: 1 + title: Example Channel properties: MediaContainer: allOf: @@ -23537,12 +56438,19 @@ components: $ref: "#/components/schemas/Channel" ClaimTokenResponse: type: object + example: + token: string value properties: token: description: The claim token for server authentication type: string CloudServerResponse: type: object + example: + address: string value + name: string value + port: 1 + scheme: string value properties: address: type: string @@ -23555,6 +56463,15 @@ components: Collection: description: A collection of related media items. type: object + example: + artBlurHash: string value + collectionFilterBasedOnUser: true + collectionMode: default + collectionPublished: true + collectionSort: string value + lastRatedAt: 1 + thumbBlurHash: string value + userRating: 1 properties: artBlurHash: description: Blur hash for collection art. @@ -23594,6 +56511,13 @@ components: example: 8.5 Connection: type: object + example: + address: string value + local: true + port: 1 + protocol: string value + relay: true + uri: string value properties: address: type: string @@ -23611,6 +56535,17 @@ components: type: string ConnectionInfo: type: object + example: + accessToken: string value + clientIdentifier: string value + Connection: + - address: string value + local: true + port: 1 + protocol: string value + relay: true + uri: string value + name: string value properties: accessToken: type: string @@ -23624,11 +56559,25 @@ components: type: string ConnectionInfoWrapper: type: object + example: + Device: + Connection: + - uri: http://192.168.1.1:32400 properties: Device: $ref: "#/components/schemas/ConnectionInfo" DecisionResult: type: object + example: + availableBandwidth: 1 + directPlayDecisionCode: 1 + directPlayDecisionText: string value + generalDecisionCode: 1 + generalDecisionText: string value + mdeDecisionCode: 1 + mdeDecisionText: string value + transcodeDecisionCode: 1 + transcodeDecisionText: string value properties: availableBandwidth: description: The maximum bitrate set when item was added @@ -23653,6 +56602,33 @@ components: type: string Device: type: object + example: + title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value properties: title: description: Display title for the device. @@ -23720,6 +56696,15 @@ components: type: string DeviceChannel: type: object + example: + drm: true + favorite: true + hd: true + identifier: string value + key: string value + name: string value + signalQuality: 1 + signalStrength: 1 properties: drm: description: Indicates the channel is DRMed and thus may not be playable @@ -23740,6 +56725,28 @@ components: type: integer Directory: type: object + example: + title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value additionalProperties: true properties: title: @@ -23789,6 +56796,10 @@ components: type: string DownloadQueue: type: object + example: + id: 1 + itemCount: 1 + status: deciding properties: id: type: integer @@ -23811,6 +56822,38 @@ components: - error DownloadQueueItem: type: object + example: + DecisionResult: + availableBandwidth: 1 + directPlayDecisionCode: 1 + directPlayDecisionText: string value + generalDecisionCode: 1 + generalDecisionText: string value + mdeDecisionCode: 1 + mdeDecisionText: string value + transcodeDecisionCode: 1 + transcodeDecisionText: string value + error: string value + id: 1 + key: string value + queueId: 1 + status: deciding + transcode: {} + TranscodeSession: + complete: true + context: string value + duration: 1 + error: true + key: string value + progress: 1 + protocol: string value + size: 1 + sourceAudioCodec: string value + sourceVideoCodec: string value + speed: 1 + throttled: true + transcodeHwFullPipeline: true + transcodeHwRequested: true properties: DecisionResult: $ref: "#/components/schemas/DecisionResult" @@ -23847,6 +56890,38 @@ components: $ref: "#/components/schemas/TranscodeSession" DVR: type: object + example: + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value properties: Device: type: array @@ -23862,6 +56937,12 @@ components: type: string DVRResponse: type: object + example: + MediaContainer: + size: 1 + DVR: + - key: /tv.plex.provider.epg + title: HDHomerun properties: MediaContainer: allOf: @@ -23874,6 +56955,15 @@ components: $ref: "#/components/schemas/DVR" EPGCountry: type: object + example: + title: string value + type: string value + example: string value + code: string value + flavor: 1 + key: string value + language: string value + languageTitle: string value properties: title: type: string @@ -23904,6 +56994,9 @@ components: type: string EPGLanguage: type: object + example: + title: string value + code: string value properties: title: type: string @@ -23912,6 +57005,11 @@ components: type: string EPGRegion: type: object + example: + title: string value + type: string value + key: string value + national: true properties: title: type: string @@ -23923,6 +57021,11 @@ components: type: boolean Error: type: object + example: + errors: + - code: 1 + message: string value + status: 1 properties: errors: type: array @@ -23943,6 +57046,31 @@ components: example: 401 Feature: type: object + example: + type: string value + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + key: string value properties: type: type: string @@ -23953,6 +57081,9 @@ components: key: type: string Filter: + example: + filter: genre=action + filterType: string allOf: - $ref: "#/components/schemas/Directory" - description: Each `Filter` object contains a description of the filter. Note that it is not an exhaustive list of the full media query language, but an important subset useful for top-level API. @@ -23972,6 +57103,13 @@ components: type: string GeoIPResponse: type: object + example: + city: string value + coordinates: string value + country: string value + country_code: string value + subdivisions: string value + timezone: string value properties: city: type: string @@ -23987,6 +57125,339 @@ components: type: string Hub: type: object + example: + title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 additionalProperties: true properties: title: @@ -24052,6 +57523,10 @@ components: Image: description: Images such as movie posters and background artwork are represented by Image elements. type: object + example: + type: background + alt: string value + url: string value properties: type: description: Describes both the purpose and intended presentation of the image. @@ -24071,6 +57546,8 @@ components: type: string IPResponse: type: object + example: + ip: 192.168.1.1 properties: ip: description: The public IP address @@ -24078,6 +57555,9 @@ components: format: ipv4 Items: type: object + example: + size: 10 + items: [] allOf: - $ref: "#/components/schemas/Metadata" - type: object @@ -24090,6 +57570,13 @@ components: type: object JWKRegistrationRequest: type: object + example: + jwk: + crv: string value + kid: string value + kty: string value + x: string value + strong: false properties: jwk: description: JSON Web Key for device authentication @@ -24111,8 +57598,16 @@ components: default: false Key: type: string + example: /library/metadata/1 LegacyPinResponse: type: object + example: + authToken: string value + clientIdentifier: string value + code: string value + expiresIn: 1 + id: 1 + trusted: true properties: authToken: description: The authentication token @@ -24131,12 +57626,37 @@ components: type: boolean Level: type: object + example: + v: 1 properties: v: description: The level in db. type: number LibrarySection: type: object + example: + title: string value + type: movie + agent: string value + allowSync: true + art: string value + composite: string value + content: true + contentChangedAt: 1 + createdAt: 1 + directory: true + filters: true + hidden: true + key: string value + language: string value + Location: + - id: 1 + refreshing: true + scannedAt: 1 + scanner: string value + thumb: string value + updatedAt: 1 + uuid: string value properties: title: description: The title of the library @@ -24205,6 +57725,14 @@ components: - type Lineup: type: object + example: + title: string value + type: string value + identifier: string value + key: string value + lineupType: 1 + location: string value + uuid: string value properties: title: type: string @@ -24242,6 +57770,10 @@ components: type: string LogMessageRequest: type: object + example: + level: DEBUG + message: string value + source: string value properties: level: description: Log level (DEBUG, INFO, WARN, ERROR) @@ -24262,6 +57794,14 @@ components: example: PlexMediaServer ManagedHub: type: object + example: + title: string value + homeVisibility: all + identifier: string value + promotedToOwnHome: true + promotedToRecommended: true + promotedToSharedHome: true + recommendationsVisibility: all properties: title: description: The title of this hub @@ -24306,6 +57846,13 @@ components: - shared Marker: type: object + example: + title: string value + type: intro + color: string value + endTimeOffset: 1 + id: 1 + startTimeOffset: 1 additionalProperties: true properties: title: @@ -24329,6 +57876,118 @@ components: Media: description: "`Media` represents an one or more media files (parts) and is a child of a metadata item. There aren't necessarily any guaranteed attributes on media elements since the attributes will vary based on the type. The possible attributes are not documented here, but they typically have self-evident names. High-level media information that can be used for badging and flagging, such as `videoResolution` and codecs, is included on the media element." type: object + example: + aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 additionalProperties: true properties: aspectRatio: @@ -24420,6 +58079,11 @@ components: Common attributes: - identifier: Unique identifier for this container - size: Number of items in this response page - totalSize: Total number of items available (for pagination) - offset: Starting index of this page (for pagination) The container often "hoists" common attributes from its children. For example, if all tracks in a container share the same album title, the `parentTitle` attribute may appear on the MediaContainer rather than being repeated on each track. type: object + example: + identifier: com.plexapp.plugins.library + offset: 0 + size: 1 + totalSize: 100 properties: identifier: type: string @@ -24433,6 +58097,11 @@ components: type: integer MediaContainerWithArtwork: type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + artwork: [] properties: MediaContainer: allOf: @@ -24461,6 +58130,11 @@ components: It is also common for a `MediaContainer` to contain attributes "hoisted" from its children. If every element in the container would have had the same attribute, then that attribute can be present on the container instead of being repeated on every element. For example, an album's list of tracks might include `parentTitle` on the container since all of the tracks have the same album title. A container may have a `source` attribute when all of the items came from the same source. Generally speaking, when looking for an attribute on an item, if the attribute wasn't found then the container should be checked for that attribute as well. type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Decision: [] properties: MediaContainer: allOf: @@ -24553,6 +58227,11 @@ components: type: string MediaContainerWithDevice: type: object + example: + MediaContainer: + identifier: com.plexapp.system.devices + size: 1 + Device: [] properties: MediaContainer: allOf: @@ -24565,6 +58244,11 @@ components: $ref: "#/components/schemas/Device" MediaContainerWithDirectory: type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Directory: [] properties: MediaContainer: allOf: @@ -24577,6 +58261,11 @@ components: $ref: "#/components/schemas/Directory" MediaContainerWithHubs: type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Hub: [] properties: MediaContainer: allOf: @@ -24589,6 +58278,11 @@ components: $ref: "#/components/schemas/Hub" MediaContainerWithLineup: type: object + example: + MediaContainer: + identifier: tv.plex.provider.epg + size: 1 + Lineup: [] properties: MediaContainer: allOf: @@ -24604,6 +58298,11 @@ components: type: string MediaContainerWithMediaGrabOperation: type: object + example: + MediaContainer: + identifier: com.plexapp.system + size: 1 + MediaGrabOperation: [] properties: MediaContainer: allOf: @@ -24617,6 +58316,11 @@ components: MediaContainerWithMetadata: description: A MediaContainer that includes metadata items. When `includeCollections=1` is passed to endpoints such as `/library/sections/{sectionId}/all`, this container may also include `Collection` items. type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Metadata: [] properties: MediaContainer: allOf: @@ -24629,6 +58333,11 @@ components: $ref: "#/components/schemas/Metadata" MediaContainerWithNestedMetadata: type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Metadata: [] properties: MediaContainer: allOf: @@ -24651,6 +58360,11 @@ components: type: object MediaContainerWithPlaylistMetadata: type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Metadata: [] properties: MediaContainer: allOf: @@ -24702,6 +58416,11 @@ components: - $ref: "#/components/schemas/Metadata" MediaContainerWithPlayQueue: description: A media container representing a play queue. + example: + playQueueID: 1 + playQueueSelectedItemID: 1 + playQueueSelectedItemOffset: 0 + playQueueTotalCount: 10 allOf: - $ref: "#/components/schemas/MediaContainer" - type: object @@ -24735,6 +58454,11 @@ components: example: 3 MediaContainerWithSettings: type: object + example: + MediaContainer: + identifier: com.plexapp.system.settings + size: 1 + Setting: [] properties: MediaContainer: allOf: @@ -24747,6 +58471,11 @@ components: $ref: "#/components/schemas/Setting" MediaContainerWithSorts: type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Sort: [] properties: MediaContainer: allOf: @@ -24759,6 +58488,11 @@ components: $ref: "#/components/schemas/Sort" MediaContainerWithStatus: type: object + example: + MediaContainer: + identifier: com.plexapp.system + size: 1 + Status: [] properties: MediaContainer: allOf: @@ -24770,6 +58504,11 @@ components: type: integer MediaContainerWithSubscription: type: object + example: + MediaContainer: + identifier: com.plexapp.system + size: 1 + MediaSubscription: [] properties: MediaContainer: allOf: @@ -24782,6 +58521,11 @@ components: $ref: "#/components/schemas/MediaSubscription" MediaContainerWithTags: type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Tag: [] properties: MediaContainer: allOf: @@ -24794,6 +58538,10 @@ components: $ref: "#/components/schemas/Tag" MediaGrabber: type: object + example: + title: string value + identifier: string value + protocol: string value properties: title: type: string @@ -24804,6 +58552,333 @@ components: MediaGrabOperation: description: A media grab operation represents a scheduled or active recording of media type: object + example: + currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive properties: currentSize: type: integer @@ -24866,6 +58941,359 @@ components: MediaSubscription: description: A media subscription contains a representation of metadata desired to be recorded type: object + example: + title: string value + type: 1 + airingsType: New Airings Only + createdAt: 1 + Directory: {} + durationTotal: 1 + key: string value + librarySectionTitle: string value + locationPath: string value + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + Playlist: {} + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + storageTotal: 1 + targetLibrarySectionID: 1 + targetSectionLocationID: 1 + Video: {} properties: title: type: string @@ -24988,6 +59416,322 @@ components: Metadata items can often live in a hierarchy with relationships between them. For example, the metadata item for an episodes is associated with a season metadata item which is associated with a show metadata item. A similar hierarchy exists with track, album, and artist and photos and photo album. The relationships may be expressed via relative terms and absolute terms. For example, "leaves" refer to metadata items which has associated media (there is no media for a season nor show). A show will have "children" in the form of seasons and a season will have "children" in the form of episodes and episodes have "parent" in the form of a season which has a "parent" in the form of a show. Similarly, a show has "grandchildren" in the form of episodse and an episode has a "grandparent" in the form of a show. type: object + example: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 additionalProperties: true properties: title: @@ -25338,6 +60082,34 @@ components: x-speakeasy-unknown-fields: true NotificationContainer: type: object + example: + type: string value + PlaySessionStateNotification: + - controllable: string value + guid: string value + key: string value + playQueueID: 1 + playQueueItemID: 1 + ratingKey: string value + sessionKey: string value + state: playing + transcodeSession: string value + url: string value + viewOffset: 1 + ReachabilityNotification: + - status: string value + size: 1 + StatusNotification: + - title: string value + description: string value + type: string value + TimelineEntry: + - title: string value + type: 1 + itemID: 1 + metadataState: string value + playQueueItemID: 1 + state: 1 properties: type: description: The notification type @@ -25364,6 +60136,98 @@ components: Part: description: '`Part` represents a particular file or "part" of a media item. The part is the playable unit of the media hierarchy. Suppose that a movie library contains a movie that is broken up into files, reminiscent of a movie split across two BDs. The metadata item represents information about the movie, the media item represents this instance of the movie at this resolution and quality, and the part items represent the two playable files. If another media were added which contained the joining of these two parts transcoded down to a lower resolution, then this metadata would contain 2 medias, one with 2 parts and one with 1 part.' type: object + example: + accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value additionalProperties: true properties: accessible: @@ -25448,6 +60312,23 @@ components: - key PlaybackHistoryMetadata: type: object + example: + title: string value + type: string value + accountID: 1 + deviceID: 1 + grandparentRatingKey: string value + grandparentTitle: string value + historyKey: string value + index: 1 + key: string value + librarySectionID: string value + originallyAvailableAt: string value + parentIndex: 1 + parentTitle: string value + ratingKey: string value + thumb: string value + viewedAt: 1 properties: title: description: The title of the item played @@ -25500,6 +60381,22 @@ components: Player: description: Information about the player being used for playback type: object + example: + title: string value + address: string value + local: true + machineIdentifier: string value + model: string value + platform: string value + platformVersion: string value + product: string value + relayed: true + remotePublicAddress: string value + secure: true + state: string value + userID: 1 + vendor: string value + version: string value properties: title: description: The title of the client @@ -25548,6 +60445,16 @@ components: type: string PlayQueueResponse: type: object + example: + playQueueID: 1 + playQueueLastAddedItemID: string value + playQueueSelectedItemID: 1 + playQueueSelectedItemOffset: 1 + playQueueSelectedMetadataItemID: 1 + playQueueShuffled: true + playQueueSourceURI: string value + playQueueTotalCount: 1 + playQueueVersion: 1 properties: playQueueID: description: The ID of the play queue, which is used in subsequent requests. @@ -25579,6 +60486,18 @@ components: PlaySessionStateNotification: description: Real-time playback state change notification type: object + example: + controllable: string value + guid: string value + key: string value + playQueueID: 1 + playQueueItemID: 1 + ratingKey: string value + sessionKey: string value + state: playing + transcodeSession: string value + url: string value + viewOffset: 1 properties: controllable: type: string @@ -25618,6 +60537,31 @@ components: PlexDevice: title: PlexDevice type: object + example: + accessToken: string value + clientIdentifier: string value + connections: + - address: string value + IPv6: true + local: true + port: 1 + protocol: http + relay: true + uri: string value + dnsRebindingProtection: true + home: true + httpsRequired: true + name: string value + natLoopbackSupported: true + owned: true + presence: true + product: string value + productVersion: string value + provides: string value + publicAddress: string value + publicAddressMatches: true + relay: true + synced: true properties: accessToken: type: string @@ -25743,6 +60687,31 @@ components: - connections PlexDownloadsResponse: type: object + example: + MediaContainer: + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + size: 1 properties: MediaContainer: type: object @@ -25755,6 +60724,325 @@ components: type: integer ProgressResponse: type: object + example: + MediaContainer: + size: 1 + Video: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 properties: MediaContainer: type: object @@ -25768,6 +61056,11 @@ components: Provider: description: A media provider registered with the PMS. type: object + example: + title: string value + identifier: string value + Protocol: string value + types: string value properties: title: description: Human-readable provider title. @@ -25788,6 +61081,10 @@ components: ProviderFeature: description: A feature supported by a media provider. type: object + example: + title: string value + type: string value + key: search properties: title: description: Human-readable feature title. @@ -25822,11 +61119,20 @@ components: ReachabilityNotification: description: Server reachability status change notification type: object + example: + status: string value properties: status: type: string Release: type: object + example: + added: string value + downloadURL: string value + fixed: string value + key: string value + state: available + version: string value properties: added: description: A list of what has been added in this version @@ -25869,6 +61175,11 @@ components: type: string ServerAccessTokensResponse: type: object + example: + accessTokens: + - expiresAt: string value + scope: string value + token: string value properties: accessTokens: type: array @@ -25882,6 +61193,9 @@ components: token: type: string ServerConfiguration: + example: + friendlyName: My Plex Server + machineIdentifier: abc123 allOf: - $ref: "#/components/schemas/MediaContainer" - type: object @@ -26003,6 +61317,32 @@ components: type: boolean ServerUserFeaturesResponse: type: object + example: + features: + - type: string value + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + key: string value properties: features: type: array @@ -26011,6 +61351,14 @@ components: Session: description: Information about the playback session type: object + example: + title: string value + bandwidth: 1 + id: string value + location: lan + sessionKey: string value + userID: 1 + uuid: string value additionalProperties: true properties: title: @@ -26045,6 +61393,17 @@ components: Setting: description: A configuration setting or preference type: object + example: + type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value properties: type: description: The type of the value of this setting @@ -26088,6 +61447,11 @@ components: - type: number - type: boolean Sort: + example: + default: asc + defaultDirection: asc + descKey: titleSort:desc + key: titleSort allOf: - $ref: "#/components/schemas/Directory" - description: Each `Sort` object contains a description of the sort field. @@ -26120,6 +61484,10 @@ components: StatusNotification: description: Server status notification (e.g. library scan complete) type: object + example: + title: string value + description: string value + type: string value properties: title: type: string @@ -26130,6 +61498,78 @@ components: Stream: description: '`Stream` represents a particular stream from a media item, such as the video stream, audio stream, or subtitle stream. The stream may either be part of the file represented by the parent `Part` or, especially for subtitles, an external file. The stream contains more detailed information about the specific stream. For example, a video may include the `aspectRatio` at the `Media` level, but detailed information about the video stream like the color space will be included on the `Stream` for the video stream. Note that photos do not have streams (mostly as an optimization).' type: object + example: + title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 additionalProperties: true properties: title: @@ -26464,6 +61904,8 @@ components: SuccessResponse: description: A simple success indicator for operations that return no meaningful data type: object + example: + success: true properties: success: type: boolean @@ -26471,6 +61913,17 @@ components: Tag: description: A variety of extra information about a metadata item is included as tags. These tags use their own element names such as `Genre`, `Writer`, `Directory`, and `Role`. Individual tag types may introduce their own extra attributes. type: object + example: + confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value properties: confidence: description: Measure of the confidence of an automatic tag @@ -26510,9 +61963,17 @@ components: - tag Thumb: type: string + example: /library/metadata/1/thumb/1234567890 TimelineEntry: description: A timeline update entry delivered via WebSocket or EventSource type: object + example: + title: string value + type: 1 + itemID: 1 + metadataState: string value + playQueueItemID: 1 + state: 1 properties: title: type: string @@ -26528,6 +61989,10 @@ components: type: integer TokenExchangeRequest: type: object + example: + clientIdentifier: string value + jwt: string value + scope: string value properties: clientIdentifier: description: Unique client identifier @@ -26540,6 +62005,9 @@ components: type: string TopUserAccount: type: object + example: + globalViewCount: 1 + id: 1 properties: globalViewCount: type: integer @@ -26547,6 +62015,18 @@ components: type: integer TranscodeJob: type: object + example: + title: string value + type: transcode + generatorID: 1 + key: string value + progress: 1 + ratingKey: string value + remaining: 1 + size: 1 + speed: 1 + targetTagID: 1 + thumb: string value properties: title: type: string @@ -26581,6 +62061,21 @@ components: TranscodeSession: description: The transcode session if item is currently being transcoded type: object + example: + complete: true + context: string value + duration: 1 + error: true + key: string value + progress: 1 + protocol: string value + size: 1 + sourceAudioCodec: string value + sourceVideoCodec: string value + speed: 1 + throttled: true + transcodeHwFullPipeline: true + transcodeHwRequested: true properties: complete: type: boolean @@ -26614,6 +62109,11 @@ components: type: boolean UltraBlurColors: type: object + example: + bottomLeft: string value + bottomRight: string value + topLeft: string value + topRight: string value properties: bottomLeft: description: The color (hex) for the bottom left quadrant. @@ -26629,6 +62129,11 @@ components: type: string UnauthorizedErrorResponse: type: object + example: + errors: + - code: 401 + message: Unauthorized + status: 401 properties: errors: type: array @@ -26651,6 +62156,17 @@ components: UpdaterStatus: description: Status of the PMS updater. type: object + example: + checkedAt: 1 + downloadURL: string value + Release: + - added: string value + downloadURL: string value + fixed: string value + key: string value + state: available + version: string value + status: 1 properties: checkedAt: description: Timestamp of the last update check. @@ -26668,6 +62184,10 @@ components: User: description: The user playing the content type: object + example: + title: string value + id: string value + thumb: string value properties: title: description: The username @@ -26680,6 +62200,11 @@ components: type: string UserOptOutsResponse: type: object + example: + optOuts: + - type: string value + id: string value + value: true properties: optOuts: type: array @@ -26695,6 +62220,57 @@ components: UserPlexAccount: title: UserPlexAccount type: object + example: + title: string value + adsConsentReminderAt: 1 + adsConsentSetAt: 1 + authToken: string value + backupCodesCreated: false + confirmed: false + country: string value + email: user@example.com + emailOnlyAuth: false + entitlements: + - string value + experimentalFeatures: false + friendlyName: string value + guest: false + hasPassword: true + home: false + homeAdmin: false + homeSize: 1 + id: 1 + joinedAt: 1 + mailingListActive: false + mailingListStatus: active + maxHomeSize: 1 + pin: string value + profile: + autoSelectAudio: true + protected: false + rememberExpiresAt: 1 + restricted: false + roles: + - string value + scrobbleTypes: string value + services: + - endpoint: https://plex.tv + identifier: string value + status: online + subscription: + active: true + features: + - string value + status: Inactive + subscriptions: + - active: true + features: + - string value + status: Inactive + thumb: https://plex.tv + twoFactorEnabled: false + username: string value + uuid: string value additionalProperties: true properties: title: @@ -27208,6 +62784,8 @@ components: UserProfile: title: UserProfile type: object + example: + autoSelectAudio: true properties: autoSelectAudio: description: If the account has automatically select audio and subtitle tracks enabled @@ -27362,6 +62940,23 @@ components: WebhookPayload: description: Payload delivered by Plex to configured webhook URLs. type: object + example: + Account: + title: string value + id: 1 + thumb: string value + event: media.play + Metadata: {} + owner: true + Player: + title: string value + local: true + publicAddress: string value + uuid: string value + Server: + title: string value + uuid: string value + user: true properties: Account: type: object From 809cebbf99bd6d0e57c62a2a4e7322e665253ee1 Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Thu, 4 Jun 2026 08:43:01 -0500 Subject: [PATCH 25/26] feat: Add Arazzo 1.0.0 workflow documents Add 6 Arazzo workflow documents for testing common Plex API interactions: - server-health-check.yaml: Verify identity, features, server info - browse-library.yaml: List sections and section items - search-and-discover.yaml: Search hubs, Discover, recently added - manage-playlists.yaml: List, create playlists and watchlist - live-tv-guide.yaml: DVRs, EPG search, recordings - user-management.yaml: Account, home users, server resources Includes README with usage docs and extension guide. All files formatted with prettier. --- workflows/README.md | 65 ++++++++++++++++++++ workflows/browse-library.yaml | 86 +++++++++++++++++++++++++++ workflows/live-tv-guide.yaml | 92 +++++++++++++++++++++++++++++ workflows/manage-playlists.yaml | 95 ++++++++++++++++++++++++++++++ workflows/search-and-discover.yaml | 87 +++++++++++++++++++++++++++ workflows/server-health-check.yaml | 85 ++++++++++++++++++++++++++ workflows/user-management.yaml | 86 +++++++++++++++++++++++++++ 7 files changed, 596 insertions(+) create mode 100644 workflows/README.md create mode 100644 workflows/browse-library.yaml create mode 100644 workflows/live-tv-guide.yaml create mode 100644 workflows/manage-playlists.yaml create mode 100644 workflows/search-and-discover.yaml create mode 100644 workflows/server-health-check.yaml create mode 100644 workflows/user-management.yaml diff --git a/workflows/README.md b/workflows/README.md new file mode 100644 index 000000000..3024e33b6 --- /dev/null +++ b/workflows/README.md @@ -0,0 +1,65 @@ +# Plex API Arazzo Workflows + +This directory contains [Arazzo 1.0.0](https://spec.openapis.org/arazzo/latest.html) workflow documents that describe common multi-step API interactions against a Plex Media Server. These workflows are designed for testing, documentation, and automation use cases. + +## Prerequisites + +- A running Plex Media Server (local or remote) +- A valid `X-Plex-Token` for authentication +- The [Plex API OpenAPI specification](../plex-api-spec.yaml) in the parent directory + +## Workflow Files + +| Workflow | File | Description | Steps | +|----------|------|-------------|-------| +| **Server Health Check** | `server-health-check.yaml` | Verifies server identity, features, and info | 3 | +| **Browse Library** | `browse-library.yaml` | Lists library sections then items within a section | 2 | +| **Search & Discover** | `search-and-discover.yaml` | Searches hubs, Discover, and recently added | 3 | +| **Manage Playlists** | `manage-playlists.yaml` | Lists playlists, creates new ones, gets watchlist | 3 | +| **Live TV Guide** | `live-tv-guide.yaml` | Lists DVRs, searches EPG, lists recordings | 3 | +| **User Management** | `user-management.yaml` | Gets account, home users, and server resources | 3 | + +## Common Inputs + +All workflows accept these inputs: + +| Input | Type | Required | Description | +|-------|------|----------|-------------| +| `plexToken` | `string` | Yes | X-Plex-Token for authenticated requests | +| `baseUrl` | `string` | No | Plex server base URL (default: `http://localhost:32400`) | + +## Usage with Arbiter + +These workflows can be executed using the [Arbiter](https://github.com/LukasParke/arbiter) proxy's replay capabilities or any Arazzo-compatible test runner: + +```bash +# Example: run the health check workflow +# (requires an Arazzo-compatible test runner) +``` + +## Workflow Structure + +Each workflow follows the Arazzo specification: + +- **`sourceDescriptions`** — References the Plex API OpenAPI spec +- **`workflows`** — Array of workflow definitions + - **`workflowId`** — Unique identifier + - **`inputs`** — JSON Schema for workflow parameters + - **`steps`** — Ordered sequence of API operations + - **`operationId`** — References an operation in the OpenAPI spec + - **`parameters`** — Maps inputs to operation parameters + - **`successCriteria`** — Runtime expressions for validation + - **`outputs`** — Captures response data for downstream steps + - **`outputs`** — Final workflow results + +## Extending Workflows + +To create a new workflow: + +1. Copy an existing workflow file as a template +2. Define your `workflowId`, `summary`, and `description` +3. Specify required `inputs` +4. Add `steps` referencing operations from the Plex API spec +5. Use `$steps..outputs.` to pass data between steps + +See the [Arazzo specification](https://spec.openapis.org/arazzo/latest.html) for full syntax details. diff --git a/workflows/browse-library.yaml b/workflows/browse-library.yaml new file mode 100644 index 000000000..29b0e7536 --- /dev/null +++ b/workflows/browse-library.yaml @@ -0,0 +1,86 @@ +arazzo: '1.0.0' +info: + title: Browse Plex Library + version: 1.0.0 + description: | + Navigates a Plex Media Server library by listing available sections + and then retrieving the items within a specific section. This workflow + demonstrates the common pattern of discovering content hierarchies. + +sourceDescriptions: + - name: plex-api + url: ../plex-api-spec.yaml + type: openapi + +workflows: + - workflowId: browseLibrary + summary: Discover library sections and list their contents + description: | + Two-step workflow: + 1. Retrieve all library sections (Movies, TV Shows, Music, etc.) + 2. List all items within a selected section + inputs: + type: object + properties: + plexToken: + type: string + description: X-Plex-Token for authenticated requests + baseUrl: + type: string + description: Base URL of the Plex server + default: http://localhost:32400 + sectionKey: + type: integer + description: Optional specific section key to browse (if omitted, uses first available) + required: + - plexToken + - baseUrl + steps: + - stepId: listSections + description: Retrieve all library sections from the server + operationId: $sourceDescriptions.plex-api.getSections + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body.MediaContainer.size > 0 + outputs: + sections: $response.body.MediaContainer.Directory + firstSectionKey: $response.body.MediaContainer.Directory[0].key + firstSectionTitle: $response.body.MediaContainer.Directory[0].title + + - stepId: listSectionItems + description: List all items in the selected or first available section + operationId: $sourceDescriptions.plex-api.getLibraryItems + parameters: + - name: sectionKey + in: path + value: > + ${ + $inputs.sectionKey != null + ? $inputs.sectionKey + : $steps.listSections.outputs.firstSectionKey + } + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + itemCount: $response.body.MediaContainer.size + items: $response.body.MediaContainer.Metadata + sectionTitle: $steps.listSections.outputs.firstSectionTitle + + outputs: + sections: $steps.listSections.outputs.sections + selectedSectionKey: > + ${ + $inputs.sectionKey != null + ? $inputs.sectionKey + : $steps.listSections.outputs.firstSectionKey + } + selectedSectionTitle: $steps.listSectionItems.outputs.sectionTitle + itemCount: $steps.listSectionItems.outputs.itemCount + items: $steps.listSectionItems.outputs.items diff --git a/workflows/live-tv-guide.yaml b/workflows/live-tv-guide.yaml new file mode 100644 index 000000000..d00906492 --- /dev/null +++ b/workflows/live-tv-guide.yaml @@ -0,0 +1,92 @@ +arazzo: '1.0.0' +info: + title: Live TV and DVR Workflow + version: 1.0.0 + description: | + Manages Live TV and DVR functionality including retrieving DVR devices, + browsing the electronic program guide (EPG), and listing recordings. + +sourceDescriptions: + - name: plex-api + url: ../plex-api-spec.yaml + type: openapi + +workflows: + - workflowId: liveTvGuide + summary: Browse Live TV guide and DVR recordings + description: | + Three-step workflow: + 1. List available DVR devices + 2. Search the EPG for upcoming programs + 3. List existing DVR recordings + inputs: + type: object + properties: + plexToken: + type: string + description: X-Plex-Token for authenticated requests + baseUrl: + type: string + description: Base URL of the Plex server + default: http://localhost:32400 + epgQuery: + type: string + description: Optional search term for EPG (channel name, show title) + required: + - plexToken + - baseUrl + steps: + - stepId: listDVRs + description: Retrieve all configured DVR devices + operationId: $sourceDescriptions.plex-api.listDVRs + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + dvrs: $response.body.MediaContainer.Dvr + dvrCount: $response.body.MediaContainer.size + + - stepId: searchEPG + description: Search the electronic program guide + operationId: $sourceDescriptions.plex-api.searchEPG + parameters: + - name: query + in: query + value: > + ${ + $inputs.epgQuery != null + ? $inputs.epgQuery + : '' + } + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + epgResults: $response.body.MediaContainer.Hub + epgResultCount: $response.body.MediaContainer.size + + - stepId: getRecordings + description: List all DVR recordings + operationId: $sourceDescriptions.plex-api.getDVRRecordings + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + recordings: $response.body.MediaContainer.Video + recordingCount: $response.body.MediaContainer.size + + outputs: + dvrs: $steps.listDVRs.outputs.dvrs + dvrCount: $steps.listDVRs.outputs.dvrCount + epgResults: $steps.searchEPG.outputs.epgResults + epgResultCount: $steps.searchEPG.outputs.epgResultCount + recordings: $steps.getRecordings.outputs.recordings + recordingCount: $steps.getRecordings.outputs.recordingCount diff --git a/workflows/manage-playlists.yaml b/workflows/manage-playlists.yaml new file mode 100644 index 000000000..379b65ed0 --- /dev/null +++ b/workflows/manage-playlists.yaml @@ -0,0 +1,95 @@ +arazzo: '1.0.0' +info: + title: Manage Plex Playlists + version: 1.0.0 + description: | + Demonstrates playlist management operations including listing existing + playlists, creating a new playlist, and retrieving playlist details. + +sourceDescriptions: + - name: plex-api + url: ../plex-api-spec.yaml + type: openapi + +workflows: + - workflowId: managePlaylists + summary: List, create, and inspect playlists + description: | + Three-step workflow: + 1. List all existing playlists + 2. Create a new playlist (if title is provided) + 3. Retrieve watchlist for the user + inputs: + type: object + properties: + plexToken: + type: string + description: X-Plex-Token for authenticated requests + baseUrl: + type: string + description: Base URL of the Plex server + default: http://localhost:32400 + newPlaylistTitle: + type: string + description: Optional title for a new playlist to create + required: + - plexToken + - baseUrl + steps: + - stepId: listPlaylists + description: Retrieve all playlists for the current user + operationId: $sourceDescriptions.plex-api.listPlaylists + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + playlists: $response.body.MediaContainer.Playlist + playlistCount: $response.body.MediaContainer.size + + - stepId: createPlaylist + description: Create a new playlist if a title is provided + operationId: $sourceDescriptions.plex-api.createPlaylist + parameters: + - name: title + in: query + value: $inputs.newPlaylistTitle + - name: type + in: query + value: video + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + - condition: $inputs.newPlaylistTitle != null + onFailure: + - name: skipIfNoTitle + type: goto + stepId: getWatchlist + criteria: + - condition: $inputs.newPlaylistTitle == null + outputs: + newPlaylistKey: $response.body.MediaContainer.Playlist[0].ratingKey + + - stepId: getWatchlist + description: Retrieve the user's watchlist + operationId: $sourceDescriptions.plex-api.getWatchlist + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + watchlistItems: $response.body.MediaContainer.Metadata + watchlistCount: $response.body.MediaContainer.size + + outputs: + playlists: $steps.listPlaylists.outputs.playlists + playlistCount: $steps.listPlaylists.outputs.playlistCount + newPlaylistKey: $steps.createPlaylist.outputs.newPlaylistKey + watchlistItems: $steps.getWatchlist.outputs.watchlistItems + watchlistCount: $steps.getWatchlist.outputs.watchlistCount diff --git a/workflows/search-and-discover.yaml b/workflows/search-and-discover.yaml new file mode 100644 index 000000000..7200ae095 --- /dev/null +++ b/workflows/search-and-discover.yaml @@ -0,0 +1,87 @@ +arazzo: '1.0.0' +info: + title: Search and Discover Content + version: 1.0.0 + description: | + Searches for content across Plex hubs and the Discover service, + then retrieves detailed metadata for the first matching result. + +sourceDescriptions: + - name: plex-api + url: ../plex-api-spec.yaml + type: openapi + +workflows: + - workflowId: searchAndDiscover + summary: Search for media and retrieve metadata + description: | + Three-step workflow: + 1. Search across all hubs for a query term + 2. Search the Discover service for broader results + 3. Retrieve detailed metadata for the first result + inputs: + type: object + properties: + plexToken: + type: string + description: X-Plex-Token for authenticated requests + baseUrl: + type: string + description: Base URL of the Plex server + default: http://localhost:32400 + query: + type: string + description: Search query term (movie title, show name, artist, etc.) + required: + - plexToken + - baseUrl + - query + steps: + - stepId: searchHubs + description: Search across all Plex hubs + operationId: $sourceDescriptions.plex-api.searchHubs + parameters: + - name: query + in: query + value: $inputs.query + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + hubResults: $response.body.MediaContainer.Hub + totalResults: $response.body.MediaContainer.size + + - stepId: searchDiscover + description: Search the Discover service for additional results + operationId: $sourceDescriptions.plex-api.searchDiscover + parameters: + - name: query + in: query + value: $inputs.query + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + discoverResults: $response.body.MediaContainer.SearchResult + + - stepId: getRecentlyAdded + description: Get recently added content as a fallback discovery method + operationId: $sourceDescriptions.plex-api.getRecentlyAddedGlobal + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + recentlyAdded: $response.body.MediaContainer.Metadata + + outputs: + hubResults: $steps.searchHubs.outputs.hubResults + totalResults: $steps.searchHubs.outputs.totalResults + discoverResults: $steps.searchDiscover.outputs.discoverResults + recentlyAdded: $steps.getRecentlyAdded.outputs.recentlyAdded diff --git a/workflows/server-health-check.yaml b/workflows/server-health-check.yaml new file mode 100644 index 000000000..a7c92454d --- /dev/null +++ b/workflows/server-health-check.yaml @@ -0,0 +1,85 @@ +arazzo: '1.0.0' +info: + title: Plex Server Health Check + version: 1.0.0 + description: | + Verifies that a Plex Media Server is online and accessible by checking + its identity, capabilities, and features. This workflow is useful for + monitoring, CI/CD health checks, and onboarding validation. + +sourceDescriptions: + - name: plex-api + url: ../plex-api-spec.yaml + type: openapi + +workflows: + - workflowId: healthCheck + summary: Check Plex server health and capabilities + description: | + Performs a lightweight health check against a Plex Media Server. + Steps: + 1. Verify the server identity (name, version, machine ID) + 2. Retrieve server features and capabilities + 3. Verify the server responds with valid data + inputs: + type: object + properties: + plexToken: + type: string + description: X-Plex-Token for authenticated requests + baseUrl: + type: string + description: Base URL of the Plex server (e.g., http://localhost:32400) + default: http://localhost:32400 + required: + - plexToken + - baseUrl + steps: + - stepId: checkIdentity + description: Verify the server identity endpoint responds + operationId: $sourceDescriptions.plex-api.getIdentity + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body.machineIdentifier != null + outputs: + serverName: $response.body.MediaContainer.friendlyName + serverVersion: $response.body.MediaContainer.version + machineIdentifier: $response.body.MediaContainer.machineIdentifier + + - stepId: checkFeatures + description: Retrieve server features to validate capability set + operationId: $sourceDescriptions.plex-api.getFeatures + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + featuresCount: $response.body.MediaContainer.size + + - stepId: checkServerInfo + description: Get detailed server information + operationId: $sourceDescriptions.plex-api.getServerInfo + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body.MediaContainer.machineIdentifier == $steps.checkIdentity.outputs.machineIdentifier + outputs: + platform: $response.body.MediaContainer.platform + platformVersion: $response.body.MediaContainer.platformVersion + + outputs: + healthy: true + serverName: $steps.checkIdentity.outputs.serverName + serverVersion: $steps.checkIdentity.outputs.serverVersion + machineIdentifier: $steps.checkIdentity.outputs.machineIdentifier + platform: $steps.checkServerInfo.outputs.platform + featuresCount: $steps.checkFeatures.outputs.featuresCount diff --git a/workflows/user-management.yaml b/workflows/user-management.yaml new file mode 100644 index 000000000..496494b73 --- /dev/null +++ b/workflows/user-management.yaml @@ -0,0 +1,86 @@ +arazzo: '1.0.0' +info: + title: Plex User and Account Management + version: 1.0.0 + description: | + Manages Plex user accounts, home users, and server access including + retrieving account details, listing home users, and checking server resources. + +sourceDescriptions: + - name: plex-api + url: ../plex-api-spec.yaml + type: openapi + +workflows: + - workflowId: userManagement + summary: Inspect user accounts and server access + description: | + Three-step workflow: + 1. Get the authenticated user's MyPlex account details + 2. List all home users associated with the account + 3. Retrieve available server resources + inputs: + type: object + properties: + plexToken: + type: string + description: X-Plex-Token for authenticated requests + baseUrl: + type: string + description: Base URL of the Plex server + default: http://localhost:32400 + required: + - plexToken + - baseUrl + steps: + - stepId: getAccount + description: Retrieve the current user's MyPlex account + operationId: $sourceDescriptions.plex-api.getMyPlexAccount + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body.user.id != null + outputs: + accountId: $response.body.user.id + accountUsername: $response.body.user.username + accountEmail: $response.body.user.email + accountSubscription: $response.body.user.subscription.active + + - stepId: listHomeUsers + description: List all home users managed by this account + operationId: $sourceDescriptions.plex-api.getHomeUsers + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + homeUsers: $response.body.MediaContainer.User + homeUserCount: $response.body.MediaContainer.size + + - stepId: getServerResources + description: Retrieve available Plex server resources + operationId: $sourceDescriptions.plex-api.getServerResources + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + servers: $response.body + serverCount: $response.body.length + + outputs: + accountId: $steps.getAccount.outputs.accountId + accountUsername: $steps.getAccount.outputs.accountUsername + accountEmail: $steps.getAccount.outputs.accountEmail + accountSubscription: $steps.getAccount.outputs.accountSubscription + homeUsers: $steps.listHomeUsers.outputs.homeUsers + homeUserCount: $steps.listHomeUsers.outputs.homeUserCount + servers: $steps.getServerResources.outputs.servers + serverCount: $steps.getServerResources.outputs.serverCount From be041fab782442b37c0bc5d8b324f0f2b3fd0f7e Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Thu, 4 Jun 2026 08:49:12 -0500 Subject: [PATCH 26/26] feat: Arazzo validation CI workflow with dual validation Add GitHub Actions workflow that runs Arazzo tests against arbiter proxy: - Starts real Plex Media Server from docker-compose - Starts arbiter proxy with --validate --spec for real-time spec validation - Runs all Arazzo workflows via Redocly Respect CLI against the proxy - Double validation: Arazzo tests workflow logic + arbiter validates spec compliance - Uploads arbiter validation logs and summary as artifacts - Triggers on workflow changes, spec changes, and manual dispatch Also update docker-compose proxy service to use --validate --spec instead of --diff-against --exit-on-gap for alignment with CI behavior. --- .github/workflows/arazzo-validation.yml | 175 ++++++++++++++++++++++++ docker-compose.yml | 4 +- 2 files changed, 177 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/arazzo-validation.yml diff --git a/.github/workflows/arazzo-validation.yml b/.github/workflows/arazzo-validation.yml new file mode 100644 index 000000000..8f046a3fd --- /dev/null +++ b/.github/workflows/arazzo-validation.yml @@ -0,0 +1,175 @@ +name: Arazzo Workflow Validation + +on: + push: + branches: [main, feature/arbiter-discovery-pipeline] + paths: + - "workflows/**" + - "plex-api-spec.yaml" + - ".github/workflows/arazzo-validation.yml" + pull_request: + branches: [main] + paths: + - "workflows/**" + - "plex-api-spec.yaml" + - ".github/workflows/arazzo-validation.yml" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: arazzo-validation-${{ github.ref }} + cancel-in-progress: true + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - name: Checkout plex-api-spec + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + + - name: Clone Arbiter + run: | + git clone https://github.com/LukasParke/arbiter.git ../arbiter + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '24' + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: latest + + - name: Build Arbiter + run: | + cd ../arbiter + pnpm install --frozen-lockfile + pnpm run build + + - name: Set up Docker Compose + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2320ee5c88db75466b73 # v3.10.0 + + - name: Start Plex Media Server + run: | + docker compose up -d pms + for i in {1..60}; do + if curl -sf http://localhost:32400/identity > /dev/null 2>&1; then + echo "PMS is ready" + break + fi + echo "Waiting for PMS... ($i/60)" + sleep 5 + done + env: + PLEX_CLAIM_TOKEN: ${{ secrets.PLEX_CLAIM_TOKEN }} + + - name: Extract Plex Token + id: plex-token + run: | + # Wait for Plex to finish initialization and generate token + for i in {1..30}; do + TOKEN=$(docker exec plex-api-test cat /config/Library/Application\ Support/Plex\ Media\ Server/Preferences.xml 2>/dev/null | grep -oP 'PlexOnlineToken="\K[^"]+' || true) + if [ -n "$TOKEN" ]; then + echo "token=$TOKEN" >> $GITHUB_OUTPUT + echo "Found Plex token" + break + fi + echo "Waiting for Plex token... ($i/30)" + sleep 5 + done + + # Fallback: use a test token if available + if [ -z "${{ steps.plex-token.outputs.token }}" ]; then + echo "token=test-token" >> $GITHUB_OUTPUT + echo "Using fallback test token" + fi + + - name: Start Arbiter Proxy with Validation + run: | + cd ../arbiter + node dist/src/cli.js start \ + --target http://localhost:32400 \ + --port 8080 \ + --docs-port 9000 \ + --db-path /tmp/arbiter.db \ + --validate \ + --spec "$GITHUB_WORKSPACE/plex-api-spec.yaml" \ + --verbose > /tmp/arbiter.log 2>&1 & + PROXY_PID=$! + echo "PROXY_PID=$PROXY_PID" >> $GITHUB_ENV + + for i in {1..30}; do + if curl -sf http://localhost:8080/identity > /dev/null 2>&1; then + echo "Arbiter proxy is ready (with validation enabled)" + break + fi + echo "Waiting for arbiter proxy... ($i/30)" + sleep 1 + done + + - name: Install Redocly Respect + run: | + npm install -g @redocly/cli@latest + npx @redocly/cli@latest --version + + - name: Lint Arazzo Workflows + run: | + for wf in workflows/*.yaml; do + echo "=== Linting $(basename $wf) ===" + npx @redocly/cli@latest lint "$wf" || exit 1 + done + + - name: Run Arazzo Tests via Arbiter Proxy + run: | + FAILED=0 + for wf in workflows/*.yaml; do + echo "" + echo "========================================" + echo "=== Running $(basename $wf) ===" + echo "========================================" + npx @redocly/cli@latest respect "$wf" \ + --input plexToken=${{ steps.plex-token.outputs.token }} \ + --input baseUrl=http://localhost:8080 \ + || FAILED=1 + done + exit $FAILED + + - name: Collect Arbiter Validation Log + if: always() + run: | + echo "=== Arbiter Proxy Validation Log ===" > /tmp/validation-summary.log + if [ -f /tmp/arbiter.log ]; then + grep -E "\[VALIDATE\]|Proxy error|Diff Report|Missing endpoints|Query param gaps" /tmp/arbiter.log >> /tmp/validation-summary.log || true + cat /tmp/validation-summary.log + fi + + - name: Stop Arbiter Proxy + if: always() + run: | + kill $PROXY_PID 2>/dev/null || true + sleep 2 + + - name: Stop Plex Media Server + if: always() + run: docker compose down + + - name: Upload Arbiter Log + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: arbiter-validation-log + path: /tmp/arbiter.log + retention-days: 7 + + - name: Upload Validation Summary + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: validation-summary + path: /tmp/validation-summary.log + retention-days: 7 diff --git a/docker-compose.yml b/docker-compose.yml index 5fc56ad3d..62dfa5f66 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -44,9 +44,9 @@ services: - "9000" - "--db-path" - "/data/arbiter.db" - - "--diff-against" + - "--validate" + - "--spec" - "/spec/plex-api-spec.yaml" - - "--exit-on-gap" - "--verbose" volumes: - ./test-data/capture:/data