Repository: hassio-addons/addon-plex
Branch: main
Commit: 14ac5a612cb8
Files: 37
Total size: 46.7 KB
Directory structure:
gitextract_yl1mmqzr/
├── .github/
│ ├── CODEOWNERS
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── SECURITY.md
│ ├── labels.yml
│ ├── release-drafter.yml
│ ├── renovate.json
│ └── workflows/
│ ├── ci.yaml
│ ├── deploy.yaml
│ ├── labels.yaml
│ ├── lock.yaml
│ ├── pr-labels.yaml
│ ├── release-drafter.yaml
│ └── stale.yaml
├── .mdlrc
├── .yamllint
├── LICENSE.md
├── README.md
└── plex/
├── .README.j2
├── DOCS.md
├── Dockerfile
├── build.yaml
├── config.yaml
├── rootfs/
│ └── etc/
│ └── s6-overlay/
│ └── s6-rc.d/
│ ├── init-plex/
│ │ ├── dependencies.d/
│ │ │ └── base
│ │ ├── run
│ │ ├── type
│ │ └── up
│ ├── plex/
│ │ ├── dependencies.d/
│ │ │ └── init-plex
│ │ ├── finish
│ │ ├── run
│ │ └── type
│ └── user/
│ └── contents.d/
│ ├── init-plex
│ └── plex
└── translations/
└── en.yaml
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/CODEOWNERS
================================================
.github/* @frenck
================================================
FILE: .github/CODE_OF_CONDUCT.md
================================================
# Contributor Covenant 3.0 Code of Conduct
## Our Pledge
We pledge to make our community welcoming, safe, and equitable for all.
We are committed to fostering an environment that respects and promotes the
dignity, rights, and contributions of all individuals, regardless of
characteristics including race, ethnicity, caste, color, age, physical
characteristics, neurodiversity, disability, sex or gender, gender identity or
expression, sexual orientation, language, philosophy or religion, national or
social origin, socio-economic position, level of education, or other status.
The same privileges of participation are extended to everyone who participates
in good faith and in accordance with this Covenant.
## Encouraged Behaviors
While acknowledging differences in social norms, we all strive to meet our
community's expectations for positive behavior. We also understand that our
words and actions may be interpreted differently than we intend based on
culture, background, or native language.
With these considerations in mind, we agree to behave mindfully toward each
other and act in ways that center our shared values, including:
1. Respecting the **purpose of our community**, our activities, and our ways of
gathering.
2. Engaging **kindly and honestly** with others.
3. Respecting **different viewpoints** and experiences.
4. **Taking responsibility** for our actions and contributions.
5. Gracefully giving and accepting **constructive feedback**.
6. Committing to **repairing harm** when it occurs.
7. Behaving in other ways that promote and sustain the **well-being of our
community**.
## Restricted Behaviors
We agree to restrict the following behaviors in our community. Instances,
threats, and promotion of these behaviors are violations of this Code of
Conduct.
1. **Harassment.** Violating explicitly expressed boundaries or engaging in
unnecessary personal attention after any clear request to stop.
2. **Character attacks.** Making insulting, demeaning, or pejorative comments
directed at a community member or group of people.
3. **Stereotyping or discrimination.** Characterizing anyone's personality or
behavior on the basis of immutable identities or traits.
4. **Sexualization.** Behaving in a way that would generally be considered
inappropriately intimate in the context or purpose of the community.
5. **Violating confidentiality**. Sharing or acting on someone's personal or
private information without their permission.
6. **Endangerment.** Causing, encouraging, or threatening violence or other
harm toward any person or group.
7. Behaving in other ways that **threaten the well-being** of our community.
### Other Restrictions
1. **Misleading identity.** Impersonating someone else for any reason, or
pretending to be someone else to evade enforcement actions.
2. **Failing to credit sources.** Not properly crediting the sources of content
you contribute.
3. **Promotional materials**. Sharing marketing or other commercial content in
a way that is outside the norms of the community.
4. **Irresponsible communication.** Failing to responsibly present content
which includes, links or describes any other restricted behaviors.
## Reporting an Issue
Tensions can occur between community members even when they are trying their
best to collaborate. Not every conflict represents a code of conduct violation,
and this Code of Conduct reinforces encouraged behaviors and norms that can
help avoid conflicts and minimize harm.
When an incident does occur, it is important to report it promptly. To report a
possible violation, send an email to `opensource@frenck.dev`.
Community Moderators take reports of violations seriously and will make every
effort to respond in a timely manner. They will investigate all reports of code
of conduct violations, reviewing messages, logs, and recordings, or interviewing
witnesses and other participants. Community Moderators will keep investigation
and enforcement actions as transparent as possible while prioritizing safety and
confidentiality. In order to honor these values, enforcement actions are carried
out in private with the involved parties, but communicating to the whole
community may be part of a mutually agreed upon resolution.
## Addressing and Repairing Harm
If an investigation by the Community Moderators finds that this Code of Conduct
has been violated, the following enforcement ladder may be used to determine how
best to repair harm, based on the incident's impact on the individuals involved
and the community as a whole. Depending on the severity of a violation, lower
rungs on the ladder may be skipped.
1. Warning
1. Event: A violation involving a single incident or series of incidents.
2. Consequence: A private, written warning from the Community Moderators.
3. Repair: Examples of repair include a private written apology,
acknowledgement of responsibility, and seeking clarification on
expectations.
2. Temporarily Limited Activities
1. Event: A repeated incidence of a violation that previously resulted in a
warning, or the first incidence of a more serious violation.
2. Consequence: A private, written warning with a time-limited cooldown
period designed to underscore the seriousness of the situation and give
the community members involved time to process the incident. The cooldown
period may be limited to particular communication channels or interactions
with particular community members.
3. Repair: Examples of repair may include making an apology, using the
cooldown period to reflect on actions and impact, and being thoughtful
about re-entering community spaces after the period is over.
3. Temporary Suspension
1. Event: A pattern of repeated violation which the Community Moderators have
tried to address with warnings, or a single serious violation.
2. Consequence: A private written warning with conditions for return from
suspension. In general, temporary suspensions give the person being
suspended time to reflect upon their behavior and possible corrective
actions.
3. Repair: Examples of repair include respecting the spirit of the
suspension, meeting the specified conditions for return, and being
thoughtful about how to reintegrate with the community when the suspension
is lifted.
4. Permanent Ban
1. Event: A pattern of repeated code of conduct violations that other steps
on the ladder have failed to resolve, or a violation so serious that the
Community Moderators determine there is no way to keep the community safe
with this person as a member.
2. Consequence: Access to all community spaces, tools, and communication
channels is removed. In general, permanent bans should be rarely used,
should have strong reasoning behind them, and should only be resorted to
if working through other remedies has failed to change the behavior.
3. Repair: There is no possible repair in cases of this severity.
This enforcement ladder is intended as a guideline. It does not limit the
ability of Community Managers to use their discretion and judgment, in keeping
with the best interests of our community.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public or other spaces.
Examples of representing our community include using an official email address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Attribution
This Code of Conduct is adapted from the Contributor Covenant, version 3.0,
permanently available at
[https://www.contributor-covenant.org/version/3/0/](https://www.contributor-covenant.org/version/3/0/).
Contributor Covenant is stewarded by the Organization for Ethical Source and
licensed under CC BY-SA 4.0. To view a copy of this license, visit
[https://creativecommons.org/licenses/by-sa/4.0/](https://creativecommons.org/licenses/by-sa/4.0/)
For answers to common questions about Contributor Covenant, see the FAQ at
[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq).
Translations are provided at
[https://www.contributor-covenant.org/translations](https://www.contributor-covenant.org/translations).
Additional enforcement and community guideline resources can be found at
[https://www.contributor-covenant.org/resources](https://www.contributor-covenant.org/resources).
The enforcement ladder was inspired by the work of
[Mozilla's code of conduct team](https://github.com/mozilla/inclusion).
================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing
When contributing to this repository, please first discuss the change you wish
to make via issue, email, or any other method with the owners of this repository
before making a change.
Please note we have a code of conduct, please follow it in all your interactions
with the project.
## Issues and feature requests
You've found a bug in the source code, a mistake in the documentation or maybe
you'd like a new feature? You can help us by submitting an issue to our
[GitHub Repository][github]. Before you create an issue, make sure you search
the archive, maybe your question was already answered.
Even better: You could submit a pull request with a fix / new feature!
## Pull request process
1. Search our repository for open or closed [pull requests][prs] that relates
to your submission. You don't want to duplicate effort.
1. You may merge the pull request in once you have the sign-off of two other
developers, or if you do not have permission to do that, you may request
the second reviewer to merge it for you.
[github]: https://github.com/hassio-addons/app-plex/issues
[prs]: https://github.com/hassio-addons/app-plex/pulls
================================================
FILE: .github/FUNDING.yml
================================================
---
github: frenck
patreon: frenck
custom: https://frenck.dev/donate/
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
# Problem/Motivation
> (Why the issue was filed)
## Expected behavior
> (What you expected to happen)
## Actual behavior
> (What actually happened)
## Steps to reproduce
> (How can someone else make/see it happen)
## Proposed changes
> (If you have a proposed change, workaround or fix,
> describe the rationale behind it)
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
# Proposed Changes
> (Describe the changes and rationale behind them)
## Related Issues
> ([Github link][autolink-references] to related issues or pull requests)
[autolink-references]: https://help.github.com/articles/autolinked-references-and-urls/
================================================
FILE: .github/SECURITY.md
================================================
# Security Policy
We take the security of this project seriously. We appreciate your efforts to responsibly disclose your findings and will make every effort to acknowledge your contributions.
## Reporting a Vulnerability
**Please do not report security vulnerabilities through public GitHub issues.**
If you discover a security vulnerability, please report it via GitHub's private vulnerability reporting:
1. Navigate to the Security tab of this repository
2. Click "Report a vulnerability"
3. Provide a description of the vulnerability and steps to reproduce
After the initial report, we will keep you informed of the progress towards a fix and may ask for additional information or guidance.
We aim to address reported vulnerabilities within 90 days.
Thank you for helping keep this project secure!
================================================
FILE: .github/labels.yml
================================================
---
- name: "breaking-change"
color: ee0701
description: "A breaking change for existing users."
- name: "bugfix"
color: ee0701
description: "Inconsistencies or issues which will cause a problem for users or implementors."
- name: "documentation"
color: 0052cc
description: "Solely about the documentation of the project."
- name: "enhancement"
color: 1d76db
description: "Enhancement of the code, not introducing new features."
- name: "refactor"
color: 1d76db
description: "Improvement of existing code, not introducing new features."
- name: "performance"
color: 1d76db
description: "Improving performance, not introducing new features."
- name: "new-feature"
color: 0e8a16
description: "New features or options."
- name: "maintenance"
color: 2af79e
description: "Generic maintenance tasks."
- name: "ci"
color: 1d76db
description: "Work that improves the continue integration."
- name: "dependencies"
color: 1d76db
description: "Upgrade or downgrade of project dependencies."
- name: "in-progress"
color: fbca04
description: "Issue is currently being resolved by a developer."
- name: "stale"
color: fef2c0
description: "There has not been activity on this issue or PR for quite some time."
- name: "no-stale"
color: fef2c0
description: "This issue or PR is exempted from the stable bot."
- name: "security"
color: ee0701
description: "Marks a security issue that needs to be resolved asap."
- name: "incomplete"
color: fef2c0
description: "Marks a PR or issue that is missing information."
- name: "invalid"
color: fef2c0
description: "Marks a PR or issue that is missing information."
- name: "beginner-friendly"
color: 0e8a16
description: "Good first issue for people wanting to contribute to the project."
- name: "help-wanted"
color: 0e8a16
description: "We need some extra helping hands or expertise in order to resolve this."
- name: "hacktoberfest"
description: "Issues/PRs are participating in the Hacktoberfest."
color: fbca04
- name: "hacktoberfest-accepted"
description: "Issues/PRs are participating in the Hacktoberfest."
color: fbca04
- name: "priority-critical"
color: ee0701
description: "This should be dealt with ASAP. Not fixing this issue would be a serious error."
- name: "priority-high"
color: b60205
description: "After critical issues are fixed, these should be dealt with before any further issues."
- name: "priority-medium"
color: 0e8a16
description: "This issue may be useful, and needs some attention."
- name: "priority-low"
color: e4ea8a
description: "Nice addition, maybe... someday..."
- name: "major"
color: b60205
description: "This PR causes a major version bump in the version number."
- name: "minor"
color: 0e8a16
description: "This PR causes a minor version bump in the version number."
================================================
FILE: .github/release-drafter.yml
================================================
---
name-template: "v$RESOLVED_VERSION"
tag-template: "v$RESOLVED_VERSION"
change-template: "- $TITLE @$AUTHOR (#$NUMBER)"
sort-direction: ascending
categories:
- title: "🚨 Breaking changes"
labels:
- "breaking-change"
- title: "✨ New features"
labels:
- "new-feature"
- title: "🐛 Bug fixes"
labels:
- "bugfix"
- title: "🚀 Enhancements"
labels:
- "enhancement"
- "refactor"
- "performance"
- title: "🧰 Maintenance"
labels:
- "maintenance"
- "ci"
- title: "📚 Documentation"
labels:
- "documentation"
- title: "⬆️ Dependency updates"
labels:
- "dependencies"
collapse-after: 5
version-resolver:
major:
labels:
- "major"
- "breaking-change"
minor:
labels:
- "minor"
- "new-feature"
patch:
labels:
- "bugfix"
- "chore"
- "ci"
- "dependencies"
- "documentation"
- "enhancement"
- "performance"
- "refactor"
default: patch
template: |
## What’s changed
$CHANGES
================================================
FILE: .github/renovate.json
================================================
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["helpers:pinGitHubActionDigests"],
"rebaseWhen": "behind-base-branch",
"dependencyDashboard": true,
"labels": ["dependencies", "no-stale"],
"commitMessagePrefix": "⬆️",
"commitMessageTopic": "{{depName}}",
"customDatasources": {
"plex": {
"defaultRegistryUrlTemplate": "https://plex.tv/api/downloads/5.json",
"transformTemplates": [
"{\"releases\": [{\"version\": $.computer.Linux.version}]}"
]
}
},
"customManagers": [
{
"customType": "regex",
"managerFilePatterns": ["//Dockerfile$/", "//build.yaml$/"],
"matchStringsStrategy": "any",
"matchStrings": [
"ARG BUILD_FROM=(?<depName>.*?):(?<currentValue>.*?)\\s+",
"(aarch64|amd64):\\s[\"']?(?<depName>.*?):(?<currentValue>.*?)[\"']?\\s"
],
"datasourceTemplate": "docker"
},
{
"customType": "regex",
"managerFilePatterns": ["//Dockerfile$/"],
"matchStrings": ["ARG PLEX_VERSION=(?<currentValue>[^\\s]+)\\s+"],
"depNameTemplate": "plexmediaserver",
"datasourceTemplate": "custom.plex",
"versioningTemplate": "loose"
},
{
"customType": "regex",
"managerFilePatterns": ["//Dockerfile$/"],
"matchStringsStrategy": "any",
"matchStrings": [
"\\s\\s(?<depName>[a-z0-9][a-z0-9-]+)=(?<currentValue>[a-z0-9-:_+~.]+)\\s+"
],
"versioningTemplate": "deb",
"datasourceTemplate": "repology",
"depNameTemplate": "debian_13/{{depName}}"
}
],
"packageRules": [
{
"matchDatasources": ["repology"],
"automerge": true
},
{
"groupName": "App base image",
"matchDatasources": ["docker"]
},
{
"groupName": "App base image",
"matchDatasources": ["docker"],
"matchUpdateTypes": ["minor", "patch"],
"automerge": true
},
{
"matchManagers": ["github-actions"],
"addLabels": ["github_actions"],
"rangeStrategy": "pin"
},
{
"matchManagers": ["github-actions"],
"matchUpdateTypes": ["minor", "patch"],
"automerge": true
}
]
}
================================================
FILE: .github/workflows/ci.yaml
================================================
---
name: CI
# yamllint disable-line rule:truthy
on:
pull_request:
types:
- opened
- reopened
- synchronize
workflow_dispatch:
permissions:
actions: read
contents: write
pull-requests: read
packages: read
security-events: write
jobs:
workflows:
uses: hassio-addons/workflows/.github/workflows/app-ci.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
================================================
FILE: .github/workflows/deploy.yaml
================================================
---
name: Deploy
# yamllint disable-line rule:truthy
on:
push:
branches:
- main
release:
types:
- published
permissions: {}
jobs:
ci:
permissions:
actions: read
contents: write
pull-requests: read
packages: read
security-events: write
uses: hassio-addons/workflows/.github/workflows/app-ci.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
deploy:
needs: ci
permissions:
contents: read
packages: write
uses: hassio-addons/workflows/.github/workflows/app-deploy.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
secrets:
DISPATCH_TOKEN: ${{ secrets.DISPATCH_TOKEN }}
================================================
FILE: .github/workflows/labels.yaml
================================================
---
name: Sync labels
# yamllint disable-line rule:truthy
on:
schedule:
- cron: "34 5 * * *"
workflow_dispatch:
permissions:
issues: write
jobs:
workflows:
uses: hassio-addons/workflows/.github/workflows/labels.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
================================================
FILE: .github/workflows/lock.yaml
================================================
---
name: Lock
# yamllint disable-line rule:truthy
on:
schedule:
- cron: "0 9 * * *"
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
workflows:
uses: hassio-addons/workflows/.github/workflows/lock.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
================================================
FILE: .github/workflows/pr-labels.yaml
================================================
---
name: PR Labels
# yamllint disable-line rule:truthy
on:
pull_request:
types:
- opened
- labeled
- unlabeled
- synchronize
permissions: {}
jobs:
workflows:
uses: hassio-addons/workflows/.github/workflows/pr-labels.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
================================================
FILE: .github/workflows/release-drafter.yaml
================================================
---
name: Release Drafter
# yamllint disable-line rule:truthy
on:
push:
branches:
- main
workflow_dispatch:
permissions:
contents: read
jobs:
release-drafter:
name: ✏️ Draft release
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: 🚀 Run Release Drafter
uses: release-drafter/release-drafter@563bf132657a13ded0b01fcb723c5a58cdd824e2 # v7.2.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/stale.yaml
================================================
---
name: Stale
# yamllint disable-line rule:truthy
on:
schedule:
- cron: "0 8 * * *"
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
workflows:
uses: hassio-addons/workflows/.github/workflows/stale.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
================================================
FILE: .mdlrc
================================================
rules "~MD024"
================================================
FILE: .yamllint
================================================
---
rules:
braces:
level: error
min-spaces-inside: 0
max-spaces-inside: 1
min-spaces-inside-empty: -1
max-spaces-inside-empty: -1
brackets:
level: error
min-spaces-inside: 0
max-spaces-inside: 0
min-spaces-inside-empty: -1
max-spaces-inside-empty: -1
colons:
level: error
max-spaces-before: 0
max-spaces-after: 1
commas:
level: error
max-spaces-before: 0
min-spaces-after: 1
max-spaces-after: 1
comments:
level: error
require-starting-space: true
min-spaces-from-content: 1
comments-indentation:
level: error
document-end:
level: error
present: false
document-start:
level: error
present: true
empty-lines:
level: error
max: 1
max-start: 0
max-end: 1
hyphens:
level: error
max-spaces-after: 1
indentation:
level: error
spaces: 2
indent-sequences: true
check-multi-line-strings: false
key-duplicates:
level: error
line-length: false
new-line-at-end-of-file:
level: error
new-lines:
level: error
type: unix
trailing-spaces:
level: error
truthy:
level: error
================================================
FILE: LICENSE.md
================================================
# MIT License
Copyright (c) 2018-2026 Franck Nijhof
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# Home Assistant Community App: Plex Media Server
[![GitHub Release][releases-shield]][releases]
![Project Stage][project-stage-shield]
[![License][license-shield]](LICENSE.md)
![Supports aarch64 Architecture][aarch64-shield]
![Supports amd64 Architecture][amd64-shield]
[![Github Actions][github-actions-shield]][github-actions]
![Project Maintenance][maintenance-shield]
[![GitHub Activity][commits-shield]][commits]
[![Discord][discord-shield]][discord]
[![Community Forum][forum-shield]][forum]
[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
[![Support Frenck on Patreon][patreon-shield]][patreon]
Your recorded media, live TV, online news, and podcasts, beautifully organized
and ready to stream.
[:books: Read the full app documentation][docs]
## About
The plex app brings your favorite media together in one place, making it
beautiful and easy to enjoy. The Plex Media Server provided by this app,
organizes your personal video, music, and photo collections
and streams them to all of your devices.
## Support
Got questions?
You have several options to get them answered:
- The [Home Assistant Community Apps Discord chat server][discord] for app
support and feature requests.
- The [Home Assistant Discord chat server][discord-ha] for general Home
Assistant discussions and questions.
- The Home Assistant [Community Forum][forum].
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
You could also [open an issue here][issue] GitHub.
## Contributing
This is an active open-source project. We are always open to people who want to
use the code or contribute to it.
We have set up a separate document containing our
[contribution guidelines](.github/CONTRIBUTING.md).
Thank you for being involved! :heart_eyes:
## Authors & contributors
The original setup of this repository is by [Franck Nijhof][frenck].
For a full list of all authors and contributors,
check [the contributor's page][contributors].
## We have got some Home Assistant apps for you
Want some more functionality to your Home Assistant instance?
We have created multiple apps for Home Assistant. For a full list, check out
our [GitHub Repository][repository].
## License
MIT License
Copyright (c) 2018-2026 Franck Nijhof
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
[commits-shield]: https://img.shields.io/github/commit-activity/y/hassio-addons/app-plex.svg
[commits]: https://github.com/hassio-addons/app-plex/commits/main
[contributors]: https://github.com/hassio-addons/app-plex/graphs/contributors
[discord-ha]: https://discord.gg/c5DvZ4e
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
[discord]: https://discord.me/hassioaddons
[docs]: https://github.com/hassio-addons/app-plex/blob/main/plex/DOCS.md
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-plex-media-server/54383?u=frenck
[frenck]: https://github.com/frenck
[github-actions-shield]: https://github.com/hassio-addons/app-plex/workflows/CI/badge.svg
[github-actions]: https://github.com/hassio-addons/app-plex/actions
[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
[github-sponsors]: https://github.com/sponsors/frenck
[issue]: https://github.com/hassio-addons/app-plex/issues
[license-shield]: https://img.shields.io/github/license/hassio-addons/app-plex.svg
[maintenance-shield]: https://img.shields.io/maintenance/yes/2026.svg
[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
[patreon]: https://www.patreon.com/frenck
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
[reddit]: https://reddit.com/r/homeassistant
[releases-shield]: https://img.shields.io/github/release/hassio-addons/app-plex.svg
[releases]: https://github.com/hassio-addons/app-plex/releases
[repository]: https://github.com/hassio-addons/repository
================================================
FILE: plex/.README.j2
================================================
# Home Assistant Community App: Plex Media Server
[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
[![Support Frenck on Patreon][patreon-shield]][patreon]
Your recorded media, live TV, online news, and podcasts, beautifully organized
and ready to stream.
## About
The plex app brings your favorite media together in one place, making it
beautiful and easy to enjoy. The Plex Media Server provided by this app,
organizes your personal video, music, and photo collections
and streams them to all of your devices.
{% if channel == "edge" %}
## WARNING! THIS IS AN EDGE VERSION!
This Home Assistant Apps repository contains edge builds of apps.
Edge builds apps are based upon the latest development version.
- They may not work at all.
- They might stop working at any time.
- They could have a negative impact on your system.
This repository was created for:
- Anybody willing to test.
- Anybody interested in trying out upcoming apps or app features.
- Developers.
If you are more interested in stable releases of our apps:
<https://github.com/hassio-addons/repository>
{% endif %}
{% if channel == "beta" %}
## WARNING! THIS IS A BETA VERSION!
This Home Assistant Apps repository contains beta releases of apps.
- They might stop working at any time.
- They could have a negative impact on your system.
This repository was created for:
- Anybody willing to test.
- Anybody interested in trying out upcoming apps or app features.
If you are more interested in stable releases of our apps:
<https://github.com/hassio-addons/repository>
{% endif %}
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
[discord]: https://discord.me/hassioaddons
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-plex-media-server/54383?u=frenck
[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
[github-sponsors]: https://github.com/sponsors/frenck
[maintenance-shield]: https://img.shields.io/maintenance/yes/2026.svg
[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
[patreon]: https://www.patreon.com/frenck
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
[release-shield]: https://img.shields.io/badge/version-{{ version }}-blue.svg
[release]: {{ repo }}/tree/{{ version }}
================================================
FILE: plex/DOCS.md
================================================
# Home Assistant Community App: Plex Media Server
The plex app brings your favorite media together in one place, making it
beautiful and easy to enjoy. The Plex Media Server provided by this app,
organizes your personal video, music, and photo collections
and streams them to all of your devices.
## Installation
The installation of this app is pretty straightforward and not different in
comparison to installing any other Home Assistant app.
1. Click the Home Assistant My button below to open the app on your Home
Assistant instance.
[![Open this app in your Home Assistant instance.][app-badge]][app]
1. Click the "Install" button to install the app.
1. Surf to <https://www.plex.tv/claim> and get your claim token.
1. Update the app config with the claim code you've got in the previous step.
1. Save the app configuration.
1. Start the "Plex Media Server" app.
1. Check the logs of the "Plex Media Server" to see if everything went well.
1. Login to the Plex admin interface and complete the setup process.
**NOTE**: When adding media locations, please use `/share` and `/media`
as the base directories.
## Configuration
**Note**: _Remember to restart the app when the configuration is changed._
Example app configuration:
```yaml
log_level: info
claim_code: claim-cAMrqFrenckFU4x445Tn
```
**Note**: _This is just an example, don't copy and paste it! Create your own!_
### Option: `log_level`
The `log_level` option controls the level of log output by the app and can
be changed to be more or less verbose, which might be useful when you are
dealing with an unknown issue. Possible values are:
- `trace`: Show every detail, like all called internal functions.
- `debug`: Shows detailed debug information.
- `info`: Normal (usually) interesting events.
- `warning`: Exceptional occurrences that are not errors.
- `error`: Runtime errors that do not require immediate action.
- `fatal`: Something went terribly wrong. App becomes unusable.
Please note that each level automatically includes log messages from a
more severe level, e.g., `debug` also shows `info` messages. By default,
the `log_level` is set to `info`, which is the recommended setting unless
you are troubleshooting.
### Option: `claim_code`
To allow your server to sign-in to your Plex account, it needs a so-called
"Claim Code". Sign-ing into Plex allows Plex to locate and connect to
your server and unlocks all kinds of features as well.
In order to get your code surf to <https://www.plex.tv/claim>.
This code is only used once by the app. As soon as the
server is successfully authenticated with Plex, the code may be removed.
## Solving connection issues with Plex
Plex is pretty straightforward and pretty easy to set up. Most of the
settings are detected automatically. Nevertheless, it fails to recognize
its IP on your home network. This may cause connection issues with some
Plex apps, e.g., the Samsung Tizen Plex app.
This is not Plex its fault but is because of the Docker ecosystem, in
which this app runs. Luckily, there is an option in Plex to help
with that, but it is a little hidden.
- Login to the Plex web interface.
- Goto setting.
- Click the server tab.
- On the left side, choose "Network".
- Be sure you are looking at the advanced view.
There is a button "Show Advanced" in the top right.
- Add your custom URLs to "Custom server access URLs" field.
The custom URLs are additional URLs Plex clients will use to try to connect
to Plex. You can list multiple if you'd like, separated by a comma.
Example:
```txt
http://homeassistant.local:32400,http://192.168.1.88:32400,http://mydomain.duckdns.org:32400
```
## Known issues and limitations
- This app will be able to run on a Raspberry Pi. While it still can be
useful, don't expect too much. In general, the Pi lacks the processing power
and is probably not able to stream your media; therefore it is not
recommended using this app on such a device.
- This app cannot add/mount any additional USB or other devices for you.
This is a Home Assistant limitation. In case you'd like to use extra devices,
you'll have to modify the host system yourself and is not supported by the
Home Assistant project or Community Apps team.
- A Plex Pass gives you exclusive access to new features, which are
available through a Beta version channel of the media server. At this
time, running this "Beta" version, is not supported by this app.
- This app does not support Plex over DLNA.
## Changelog & Releases
This repository keeps a change log using [GitHub's releases][releases]
functionality.
Releases are based on [Semantic Versioning][semver], and use the format
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
based on the following:
- `MAJOR`: Incompatible or major changes.
- `MINOR`: Backwards-compatible new features and enhancements.
- `PATCH`: Backwards-compatible bugfixes and package updates.
## Support
Got questions?
You have several options to get them answered:
- The [Home Assistant Community Apps Discord chat server][discord] for app
support and feature requests.
- The [Home Assistant Discord chat server][discord-ha] for general Home
Assistant discussions and questions.
- The Home Assistant [Community Forum][forum].
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
You could also [open an issue here][issue] GitHub.
## Authors & contributors
The original setup of this repository is by [Franck Nijhof][frenck].
For a full list of all authors and contributors,
check [the contributor's page][contributors].
## License
MIT License
Copyright (c) 2018-2026 Franck Nijhof
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
[app-badge]: https://my.home-assistant.io/badges/supervisor_addon.svg
[app]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=a0d7b954_plex&repository_url=https%3A%2F%2Fgithub.com%2Fhassio-addons%2Frepository
[contributors]: https://github.com/hassio-addons/app-plex/graphs/contributors
[discord-ha]: https://discord.gg/c5DvZ4e
[discord]: https://discord.me/hassioaddons
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-plex-media-server/54383?u=frenck
[frenck]: https://github.com/frenck
[issue]: https://github.com/hassio-addons/app-plex/issues
[reddit]: https://reddit.com/r/homeassistant
[releases]: https://github.com/hassio-addons/app-plex/releases
[semver]: https://semver.org/spec/v2.0.0.html
================================================
FILE: plex/Dockerfile
================================================
ARG BUILD_FROM=ghcr.io/hassio-addons/debian-base:9.3.0
# hadolint ignore=DL3006
FROM ${BUILD_FROM}
# Set shell
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# Setup base system
ARG BUILD_ARCH=amd64
ARG PLEX_VERSION=1.43.1.10611-1e34174b1
# hadolint ignore=DL3008
RUN \
echo "deb http://deb.debian.org/debian trixie contrib non-free" \
>> /etc/apt/sources.list \
&& apt-get update \
\
&& apt-get install -y --no-install-recommends \
xmlstarlet>="1.6.1-4" \
uuid-runtime=2.41-5 \
unrar=1:7.1.8-1 \
\
&& if [ "${BUILD_ARCH}" = "aarch64" ]; then ARCH="arm64"; fi \
&& if [ "${BUILD_ARCH}" = "amd64" ]; then ARCH="amd64"; fi \
\
&& curl -J -L -o /tmp/plexmediaserver.deb \
"https://downloads.plex.tv/plex-media-server-new/${PLEX_VERSION}/debian/plexmediaserver_${PLEX_VERSION}_${ARCH}.deb" \
\
&& dpkg --install /tmp/plexmediaserver.deb \
\
&& apt-get -y clean \
&& rm -fr \
/tmp/* \
/var/{cache,log}/* \
/var/lib/apt/lists/*
# Copy root filesystem
COPY rootfs /
# Build arguments
ARG BUILD_ARCH
ARG BUILD_DATE
ARG BUILD_DESCRIPTION
ARG BUILD_NAME
ARG BUILD_REF
ARG BUILD_REPOSITORY
ARG BUILD_VERSION
# Labels
LABEL \
io.hass.name="${BUILD_NAME}" \
io.hass.description="${BUILD_DESCRIPTION}" \
io.hass.arch="${BUILD_ARCH}" \
io.hass.type="addon" \
io.hass.version=${BUILD_VERSION} \
maintainer="Franck Nijhof <opensource@frenck.dev>" \
org.opencontainers.image.title="${BUILD_NAME}" \
org.opencontainers.image.description="${BUILD_DESCRIPTION}" \
org.opencontainers.image.vendor="Home Assistant Community Apps" \
org.opencontainers.image.authors="Franck Nijhof <opensource@frenck.dev>" \
org.opencontainers.image.licenses="MIT" \
org.opencontainers.image.url="https://frenck.dev/home-assistant-apps" \
org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \
org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \
org.opencontainers.image.created=${BUILD_DATE} \
org.opencontainers.image.revision=${BUILD_REF} \
org.opencontainers.image.version=${BUILD_VERSION}
================================================
FILE: plex/build.yaml
================================================
---
build_from:
aarch64: ghcr.io/hassio-addons/debian-base:9.3.0
amd64: ghcr.io/hassio-addons/debian-base:9.3.0
================================================
FILE: plex/config.yaml
================================================
---
name: Plex Media Server
version: dev
slug: plex
description: Recorded media, live TV, online news, and podcasts ready to stream.
url: https://github.com/hassio-addons/app-plex
webui: http://[HOST]:[PORT:32400]/web
startup: services
init: false
arch:
- aarch64
- amd64
map:
- media:rw
- share:rw
- ssl
devices:
- /dev/dri
- /dev/dri/card0
- /dev/dri/card1
- /dev/dri/renderD128
- /dev/vchiq
ports:
3005/tcp: 3005
8324/tcp: 8324
32400/tcp: 32400
32410/udp: 32410
32412/udp: 32412
32413/udp: 32413
32414/udp: 32414
32469/tcp: 32469
ports_description:
3005/tcp: Plex Home Theater via Plex Companion
8324/tcp: Plex for Roku via Plex Companion
32400/tcp: Plex Media Server Interface
32410/udp: GDM network discovery
32412/udp: GDM network discovery
32413/udp: GDM network discovery
32414/udp: GDM network discovery
32469/tcp: Plex DLNA Server
hassio_api: true
backup_exclude:
- "**/Plex Media Server/Cache/**"
- "**/Plex Media Server/Plug-in Support/Caches/**"
- "**/Plex Media Server/Logs/**"
- "**/Plex Media Server/Crash Reports/**"
- "**/Plex Media Server/Diagnostics/**"
- "**/Plex Media Server/Media/**"
- "**/Plex Media Server/Metadata/**"
options:
claim_code: ""
schema:
log_level: list(trace|debug|info|notice|warning|error|fatal)?
claim_code: str
================================================
FILE: plex/rootfs/etc/s6-overlay/s6-rc.d/init-plex/dependencies.d/base
================================================
================================================
FILE: plex/rootfs/etc/s6-overlay/s6-rc.d/init-plex/run
================================================
#!/command/with-contenv bashio
# shellcheck shell=bash
# ==============================================================================
# Home Assistant Community App: Plex Media Server
# Initializes all kinds of stuff on the first run of the Plex Media Server
# ==============================================================================
readonly prefs="/data/Plex Media Server/Preferences.xml"
readonly claim="/data/claim_code"
function getPref {
local key="$1"
xmlstarlet sel -T -t -m "/Preferences" -v "@${key}" -n "${prefs}"
}
function setPref {
local key="$1"
local value="$2"
count="$(xmlstarlet sel -t -v "count(/Preferences/@${key})" "${prefs}")"
count=$((count + 0))
if [[ $count -gt 0 ]]; then
xmlstarlet ed --inplace --update \
"/Preferences/@${key}" -v "${value}" "${prefs}"
else
xmlstarlet ed --inplace --insert \
"/Preferences" --type attr -n "${key}" -v "${value}" "${prefs}"
fi
}
if ! bashio::fs.file_exists "${claim}"; then
touch "${claim}"
fi
if ! bashio::fs.file_exists "${prefs}"; then
if ! bashio::config.has_value "claim_code"; then
bashio::log.fatal
bashio::log.fatal "App configuration is incomplete!"
bashio::log.fatal
bashio::log.fatal "Plex requires a claim code on the first run!"
bashio::log.fatal
bashio::log.fatal "Please check the installation manual of the app."
bashio::log.fatal
bashio::exit.nok
fi
bashio::log.info 'First run! Initializing configuration files...'
mkdir -p "$(dirname "${prefs}")"
cat > "${prefs}" <<-EOF
<?xml version="1.0" encoding="utf-8"?>
<Preferences/>
EOF
serial=$(uuidgen)
clientId=$(sha1sum <<< "${serial} - Home Assistant Plex app" | cut -b 1-40)
setPref "MachineIdentifier" "${serial}"
setPref "ProcessedMachineIdentifier" "${clientId}"
setPref "FriendlyName" "Home Assistant"
mkdir -p "/share/transcode"
setPref "TranscoderTempDirectory" "/share/transcode"
fi
previous_claim_code=$(<"${claim}")
claim_code=$(bashio::config 'claim_code')
if bashio::var.has_value "${claim_code}" && [[ "${previous_claim_code}" != "${claim_code}" ]]; then
bashio::log.debug "Generating unique serial & client id's..."
clientId=$(getPref "ProcessedMachineIdentifier")
if ! response=$(curl --silent --show-error \
--write-out '\n%{http_code}' --request POST \
-H "X-Plex-Client-Identifier: ${clientId}" \
-H 'X-Plex-Product: Plex Media Server' \
-H 'X-Plex-Version: 1.1' \
-H 'X-Plex-Provides: server' \
-H 'X-Plex-Platform: Linux' \
-H 'X-Plex-Platform-Version: 1.0' \
-H 'X-Plex-Device-Name: PlexMediaServer' \
-H 'X-Plex-Device: Linux' \
"https://plex.tv/api/claim/exchange?token=${claim_code}"
); then
bashio::log.debug "${response}"
bashio::log.fatal
bashio::log.fatal "Something went wrong contacting the Plex API"
bashio::log.fatal "Maybe your claim code is wrong or expired?"
bashio::log.fatal
bashio::exit.nok
fi
status=${response##*$'\n'}
response="${response%"$status"}"
if [[ "${status}" -ne 200 ]]; then
bashio::log.debug "${response}"
bashio::log.fatal
bashio::log.fatal "Something went wrong contacting the Plex API"
bashio::log.fatal "Maybe your claim code is wrong or expired?"
bashio::exit.nok
fi
bashio::log.debug "Plex API HTTP Response code: ${status}"
bashio::log.debug "Plex API Response: ${response}"
token="$(echo "${response}" | sed -n 's/.*<authentication-token>\(.*\)<\/authentication-token>.*/\1/p')"
setPref "PlexOnlineToken" "${token}"
echo "${claim_code}" > "${claim}"
fi
================================================
FILE: plex/rootfs/etc/s6-overlay/s6-rc.d/init-plex/type
================================================
oneshot
================================================
FILE: plex/rootfs/etc/s6-overlay/s6-rc.d/init-plex/up
================================================
/etc/s6-overlay/s6-rc.d/init-plex/run
================================================
FILE: plex/rootfs/etc/s6-overlay/s6-rc.d/plex/dependencies.d/init-plex
================================================
================================================
FILE: plex/rootfs/etc/s6-overlay/s6-rc.d/plex/finish
================================================
#!/command/with-contenv bashio
# shellcheck shell=bash
# ==============================================================================
# Home Assistant Community App: Plex Media Server
# Take down the S6 supervision tree when the Plex Media Server fails
# ==============================================================================
readonly exit_code_container=$(</run/s6-linux-init-container-results/exitcode)
readonly exit_code_service="${1}"
readonly exit_code_signal="${2}"
readonly service="Plex Media Server"
bashio::log.info \
"Service ${service} exited with code ${exit_code_service}" \
"(by signal ${exit_code_signal})"
if [[ "${exit_code_service}" -eq 256 ]]; then
if [[ "${exit_code_container}" -eq 0 ]]; then
echo $((128 + $exit_code_signal)) > /run/s6-linux-init-container-results/exitcode
fi
[[ "${exit_code_signal}" -eq 15 ]] && exec /run/s6/basedir/bin/halt
elif [[ "${exit_code_service}" -ne 0 ]]; then
if [[ "${exit_code_container}" -eq 0 ]]; then
echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode
fi
exec /run/s6/basedir/bin/halt
fi
================================================
FILE: plex/rootfs/etc/s6-overlay/s6-rc.d/plex/run
================================================
#!/command/with-contenv bashio
# shellcheck shell=bash
# ==============================================================================
# Home Assistant Community App: Plex Media Server
# Runs the Plex Media Server
# ==============================================================================
bashio::log.info 'Starting the Plex Media Server...'
export LD_LIBRARY_PATH=/usr/lib/plexmediaserver
export PLEX_MEDIA_SERVER_HOME=/usr/lib/plexmediaserver
export PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS=6
export PLEX_MEDIA_SERVER_INFO_DEVICE="Hass.io"
export PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR=/data
# Check if "/data/Plex Media Server/plexmediaserver.pid" exists, if so remove it
if bashio::fs.file_exists '/data/Plex Media Server/plexmediaserver.pid'; then
bashio::log.debug 'Removing stale PID file...'
rm -f /data/Plex\ Media\ Server/plexmediaserver.pid
fi
# Run the Plex Media Server
exec /usr/lib/plexmediaserver/Plex\ Media\ Server
================================================
FILE: plex/rootfs/etc/s6-overlay/s6-rc.d/plex/type
================================================
longrun
================================================
FILE: plex/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/init-plex
================================================
================================================
FILE: plex/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/plex
================================================
================================================
FILE: plex/translations/en.yaml
================================================
---
configuration:
log_level:
name: Log level
description: >-
Controls the level of log details the app provides.
claim_code:
name: Claim code
description: >-
To allow your server to sign-in to your Plex account, it needs a so-called
"Claim Code". In order to get your code surf to: https://www.plex.tv/claim
network:
3005/tcp: Plex Home Theater via Plex Companion
8324/tcp: Plex for Roku via Plex Companion
32400/tcp: Plex Media Server Interface
32410/udp: GDM network discovery
32412/udp: GDM network discovery
32413/udp: GDM network discovery
32414/udp: GDM network discovery
32469/tcp: Plex DLNA Server
gitextract_yl1mmqzr/
├── .github/
│ ├── CODEOWNERS
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── SECURITY.md
│ ├── labels.yml
│ ├── release-drafter.yml
│ ├── renovate.json
│ └── workflows/
│ ├── ci.yaml
│ ├── deploy.yaml
│ ├── labels.yaml
│ ├── lock.yaml
│ ├── pr-labels.yaml
│ ├── release-drafter.yaml
│ └── stale.yaml
├── .mdlrc
├── .yamllint
├── LICENSE.md
├── README.md
└── plex/
├── .README.j2
├── DOCS.md
├── Dockerfile
├── build.yaml
├── config.yaml
├── rootfs/
│ └── etc/
│ └── s6-overlay/
│ └── s6-rc.d/
│ ├── init-plex/
│ │ ├── dependencies.d/
│ │ │ └── base
│ │ ├── run
│ │ ├── type
│ │ └── up
│ ├── plex/
│ │ ├── dependencies.d/
│ │ │ └── init-plex
│ │ ├── finish
│ │ ├── run
│ │ └── type
│ └── user/
│ └── contents.d/
│ ├── init-plex
│ └── plex
└── translations/
└── en.yaml
Condensed preview — 37 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (52K chars).
[
{
"path": ".github/CODEOWNERS",
"chars": 18,
"preview": ".github/* @frenck\n"
},
{
"path": ".github/CODE_OF_CONDUCT.md",
"chars": 8677,
"preview": "# Contributor Covenant 3.0 Code of Conduct\n\n## Our Pledge\n\nWe pledge to make our community welcoming, safe, and equitabl"
},
{
"path": ".github/CONTRIBUTING.md",
"chars": 1165,
"preview": "# Contributing\n\nWhen contributing to this repository, please first discuss the change you wish\nto make via issue, email,"
},
{
"path": ".github/FUNDING.yml",
"chars": 70,
"preview": "---\ngithub: frenck\npatreon: frenck\ncustom: https://frenck.dev/donate/\n"
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 332,
"preview": "# Problem/Motivation\n\n> (Why the issue was filed)\n\n## Expected behavior\n\n> (What you expected to happen)\n\n## Actual beha"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 254,
"preview": "# Proposed Changes\n\n> (Describe the changes and rationale behind them)\n\n## Related Issues\n\n> ([Github link][autolink-ref"
},
{
"path": ".github/SECURITY.md",
"chars": 810,
"preview": "# Security Policy\n\nWe take the security of this project seriously. We appreciate your efforts to responsibly disclose yo"
},
{
"path": ".github/labels.yml",
"chars": 2843,
"preview": "---\n- name: \"breaking-change\"\n color: ee0701\n description: \"A breaking change for existing users.\"\n- name: \"bugfix\"\n "
},
{
"path": ".github/release-drafter.yml",
"chars": 1062,
"preview": "---\nname-template: \"v$RESOLVED_VERSION\"\ntag-template: \"v$RESOLVED_VERSION\"\nchange-template: \"- $TITLE @$AUTHOR (#$NUMBER"
},
{
"path": ".github/renovate.json",
"chars": 2173,
"preview": "{\n \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n \"extends\": [\"helpers:pinGitHubActionDigests\"],\n \""
},
{
"path": ".github/workflows/ci.yaml",
"chars": 400,
"preview": "---\nname: CI\n\n# yamllint disable-line rule:truthy\non:\n pull_request:\n types:\n - opened\n - reopened\n -"
},
{
"path": ".github/workflows/deploy.yaml",
"chars": 680,
"preview": "---\nname: Deploy\n\n# yamllint disable-line rule:truthy\non:\n push:\n branches:\n - main\n release:\n types:\n "
},
{
"path": ".github/workflows/labels.yaml",
"chars": 285,
"preview": "---\nname: Sync labels\n\n# yamllint disable-line rule:truthy\non:\n schedule:\n - cron: \"34 5 * * *\"\n workflow_dispatch:"
},
{
"path": ".github/workflows/lock.yaml",
"chars": 298,
"preview": "---\nname: Lock\n\n# yamllint disable-line rule:truthy\non:\n schedule:\n - cron: \"0 9 * * *\"\n workflow_dispatch:\n\npermis"
},
{
"path": ".github/workflows/pr-labels.yaml",
"chars": 311,
"preview": "---\nname: PR Labels\n\n# yamllint disable-line rule:truthy\non:\n pull_request:\n types:\n - opened\n - labeled\n "
},
{
"path": ".github/workflows/release-drafter.yaml",
"chars": 508,
"preview": "---\nname: Release Drafter\n\n# yamllint disable-line rule:truthy\non:\n push:\n branches:\n - main\n workflow_dispatc"
},
{
"path": ".github/workflows/stale.yaml",
"chars": 300,
"preview": "---\nname: Stale\n\n# yamllint disable-line rule:truthy\non:\n schedule:\n - cron: \"0 8 * * *\"\n workflow_dispatch:\n\npermi"
},
{
"path": ".mdlrc",
"chars": 14,
"preview": "rules \"~MD024\""
},
{
"path": ".yamllint",
"chars": 1154,
"preview": "---\nrules:\n braces:\n level: error\n min-spaces-inside: 0\n max-spaces-inside: 1\n min-spaces-inside-empty: -1\n"
},
{
"path": "LICENSE.md",
"chars": 1077,
"preview": "# MIT License\n\nCopyright (c) 2018-2026 Franck Nijhof\n\nPermission is hereby granted, free of charge, to any person obtain"
},
{
"path": "README.md",
"chars": 5111,
"preview": "# Home Assistant Community App: Plex Media Server\n\n[![GitHub Release][releases-shield]][releases]\n![Project Stage][proje"
},
{
"path": "plex/.README.j2",
"chars": 2660,
"preview": "# Home Assistant Community App: Plex Media Server\n\n[![Release][release-shield]][release] ![Project Stage][project-stage-"
},
{
"path": "plex/DOCS.md",
"chars": 7408,
"preview": "# Home Assistant Community App: Plex Media Server\n\nThe plex app brings your favorite media together in one place, making"
},
{
"path": "plex/Dockerfile",
"chars": 2214,
"preview": "ARG BUILD_FROM=ghcr.io/hassio-addons/debian-base:9.3.0\n# hadolint ignore=DL3006\nFROM ${BUILD_FROM}\n\n# Set shell\nSHELL [\""
},
{
"path": "plex/build.yaml",
"chars": 116,
"preview": "---\nbuild_from:\n aarch64: ghcr.io/hassio-addons/debian-base:9.3.0\n amd64: ghcr.io/hassio-addons/debian-base:9.3.0\n"
},
{
"path": "plex/config.yaml",
"chars": 1327,
"preview": "---\nname: Plex Media Server\nversion: dev\nslug: plex\ndescription: Recorded media, live TV, online news, and podcasts read"
},
{
"path": "plex/rootfs/etc/s6-overlay/s6-rc.d/init-plex/dependencies.d/base",
"chars": 0,
"preview": ""
},
{
"path": "plex/rootfs/etc/s6-overlay/s6-rc.d/init-plex/run",
"chars": 3785,
"preview": "#!/command/with-contenv bashio\n# shellcheck shell=bash\n# ==============================================================="
},
{
"path": "plex/rootfs/etc/s6-overlay/s6-rc.d/init-plex/type",
"chars": 8,
"preview": "oneshot\n"
},
{
"path": "plex/rootfs/etc/s6-overlay/s6-rc.d/init-plex/up",
"chars": 38,
"preview": "/etc/s6-overlay/s6-rc.d/init-plex/run\n"
},
{
"path": "plex/rootfs/etc/s6-overlay/s6-rc.d/plex/dependencies.d/init-plex",
"chars": 0,
"preview": ""
},
{
"path": "plex/rootfs/etc/s6-overlay/s6-rc.d/plex/finish",
"chars": 1108,
"preview": "#!/command/with-contenv bashio\n# shellcheck shell=bash\n# ==============================================================="
},
{
"path": "plex/rootfs/etc/s6-overlay/s6-rc.d/plex/run",
"chars": 948,
"preview": "#!/command/with-contenv bashio\n# shellcheck shell=bash\n# ==============================================================="
},
{
"path": "plex/rootfs/etc/s6-overlay/s6-rc.d/plex/type",
"chars": 8,
"preview": "longrun\n"
},
{
"path": "plex/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/init-plex",
"chars": 0,
"preview": ""
},
{
"path": "plex/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/plex",
"chars": 0,
"preview": ""
},
{
"path": "plex/translations/en.yaml",
"chars": 661,
"preview": "---\nconfiguration:\n log_level:\n name: Log level\n description: >-\n Controls the level of log details the app "
}
]
About this extraction
This page contains the full source code of the hassio-addons/addon-plex GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 37 files (46.7 KB), approximately 13.1k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.