Repository: awesome-jellyfin/awesome-jellyfin
Branch: main
Commit: 8f36acd7191f
Files: 25
Total size: 180.8 KB
Directory structure:
gitextract_mxfy2un7/
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── 009-request-theme.yaml
│ │ ├── 010-request-client.yaml
│ │ ├── 099-request-other.yaml
│ │ ├── 100-report-mistake.yaml
│ │ └── 200-remove-project.yaml
│ └── workflows/
│ ├── check-for-pending-jobs.yaml
│ ├── clients-pull-request.yaml
│ ├── clients-update-clients.yaml
│ ├── lint.yaml
│ ├── monthly-release.yaml
│ └── sorting-pull-check.yaml
├── CLIENTS.md
├── CODE-OF-CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── THEMES.md
├── assets/
│ ├── DateCheck.sh
│ └── clients/
│ ├── CLIENTS.template.md
│ ├── README.md
│ ├── clients.yaml
│ └── icons/
│ └── .gitkeep
└── snippets/
└── language-overlay/
├── README.md
└── language-overlay.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/CODEOWNERS
================================================
* @awesome-jellyfin/review
================================================
FILE: .github/ISSUE_TEMPLATE/009-request-theme.yaml
================================================
name: "🎨 Add Theme"
description: >
Do you have a theme that is not yet listed and want it to be listed in the repo?
title: "Add Theme <theme>"
labels:
- request
- theme
body:
- type: markdown
attributes:
value: |
> [!IMPORTANT]
> Before submitting, please read the **[Contribution Guidelines](https://github.com/awesome-jellyfin/awesome-jellyfin/blob/main/CONTRIBUTING.md)**.
>
> If you are familiar with GitHub and know how to create a Pull Request, please consider submitting your suggestion **directly as a PR** instead of opening an issue:
> https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request
>
> Pull Requests are usually reviewed faster. Issues are mainly intended for users who are unsure how to contribute via PR.
**Thank you so much for your help to make this list even better! 💖**
- type: input
id: theme-name
attributes:
label: Theme Name
validations:
required: true
- type: input
id: theme-website
attributes:
label: Theme Website
description: Link to the project (e.g. GitHub)
placeholder: ex. https://github.com/awesome-jellyfin/awesome-jellyfin
validations:
required: true
- type: checkboxes
id: type
attributes:
label: Type
description: Select the type of the theme
options:
- label: Changes Look and Feel
- label: Introduces something
- label: Fixes something
- type: textarea
id: screenshot-1
attributes:
label: Screenshot 1
description: Add a link to a screenshot (if possible from original repository)
validations:
required: true
- type: textarea
id: screenshot-2
attributes:
label: Screenshot 2
description: Add a link to a screenshot (if possible from original repository)
validations:
required: true
- type: textarea
id: screenshot-3
attributes:
label: Additional Screenshots (optional)
description: Here you can add more screenshots
validations:
required: false
- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have read the Contribution Guidelines
required: true
- label: I searched the list to make sure this theme is not already included
required: true
- type: textarea
id: other
attributes:
label: Anything else?
================================================
FILE: .github/ISSUE_TEMPLATE/010-request-client.yaml
================================================
name: "📱 Add Client"
description: >
Do you have a client that is not yet listed and want it to be listed in the repo?
title: "Add Client <client>"
labels:
- request
- client
body:
- type: markdown
attributes:
value: |
> [!IMPORTANT]
> Before submitting, please read the **[Contribution Guidelines](https://github.com/awesome-jellyfin/awesome-jellyfin/blob/main/CONTRIBUTING.md)**.
>
> If you are familiar with GitHub and know how to create a Pull Request, please consider submitting your suggestion **directly as a PR** instead of opening an issue:
> https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request
>
> Pull Requests are usually reviewed faster. Issues are mainly intended for users who are unsure how to contribute via PR.
**Thank you so much for your help to make this list even better! 💖**
- type: input
id: client-name
attributes:
label: Client Name
validations:
required: true
- type: input
id: client-website
attributes:
label: Client Website
description: Link to the project (e.g. GitHub)
placeholder: ex. https://github.com/awesome-jellyfin/awesome-jellyfin
validations:
required: true
- type: checkboxes
id: targets
attributes:
label: Targets
description: Which platforms does the client target?
options:
- label: Browser
- label: Windows
- label: macOS
- label: Linux
- label: iOS
- label: Android
- label: Sailfish OS
- label: HarmonyOS
- label: Nintendo Switch
- label: Apple TV
- label: Android TV
- label: Kodi
- label: Roku
- label: WebOS
- type: checkboxes
id: price
attributes:
label: Price
description: In-App Purchases should be marked as Paid
options:
- label: Free
- label: Paid
- type: textarea
id: downloads
attributes:
label: Download Links
description: Please provide all download links you can find, e.g. App Store, Play Store, ...
placeholder: |
GitHub: https://github.com/awesome-jellyfin/client
App Store: https://apps.apple.com/app/id0000000000
validations:
required: true
- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have read the Contribution Guidelines
required: true
- label: The client appears to be actively maintained
required: true
- label: I searched the list to make sure this client is not already included
required: true
- type: textarea
id: other
attributes:
label: Anything else?
================================================
FILE: .github/ISSUE_TEMPLATE/099-request-other.yaml
================================================
name: "✨ Request something else"
description: >
Do you have anything else that is not yet listed and want it to be listed in the repo?
title: "Add <project>"
labels:
- request
body:
- type: markdown
attributes:
value: |
> [!IMPORTANT]
> Before submitting, please read the **[Contribution Guidelines](https://github.com/awesome-jellyfin/awesome-jellyfin/blob/main/CONTRIBUTING.md)**.
>
> If you are familiar with GitHub and know how to create a Pull Request, please consider submitting your suggestion **directly as a PR** instead of opening an issue:
> https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request
>
> Pull Requests are usually reviewed faster. Issues are mainly intended for users who are unsure how to contribute via PR.
**Thank you so much for your help to make this list even better! 💖**
- type: input
id: project-website
attributes:
label: Project Website
description: Link to the project (usually a GitHub repository)
placeholder: https://github.com/awesome-jellyfin/awesome-jellyfin
validations:
required: true
- type: textarea
id: project-description
attributes:
label: Project Description
description: A general description of the project.
validations:
required: true
- type: input
id: short-description
attributes:
label: Short Description
description: |
This description will appear in the awesome list.
Requirements:
- **1 sentence** (max 2)
- **Neutral tone** (no promotion)
- **Do not mention implementation technologies** (e.g. "built with Python")
- **Start with a capital letter and end with a period**
- **Use proper names** (e.g. `Jellyfin`, `TMDb`)
Example:
```
Fingerprint audio to automatically detect intro and outro segments in Jellyfin.
```
It may contain links or tags (such as `🔹 Beta`).
validations:
required: true
- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have read the Contribution Guidelines
required: true
- label: The project appears to be actively maintained
required: true
- label: I searched the list to make sure this project is not already included
required: true
- type: textarea
id: other
attributes:
label: Anything else?
================================================
FILE: .github/ISSUE_TEMPLATE/100-report-mistake.yaml
================================================
name: "🚩 Report a mistake (e. g. Spelling, Grammar, ...)"
description: >
Did you find an error in the list?
labels:
- bug
body:
- type: markdown
attributes:
value: |
> [!IMPORTANT]
> Before submitting, please read the **[Contribution Guidelines](https://github.com/awesome-jellyfin/awesome-jellyfin/blob/main/CONTRIBUTING.md)**.
>
> If you are familiar with GitHub and know how to create a Pull Request, please consider submitting your suggestion **directly as a PR** instead of opening an issue:
> https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request
>
> Pull Requests are usually reviewed faster. Issues are mainly intended for users who are unsure how to contribute via PR.
**Thank you so much for your help to make this list even better! 💖**
- type: textarea
id: what-problem
attributes:
label: "What's the problem?"
description: Briefly describe the error / suggest changes
placeholder: "wrote 'Jelyfin' instead of 'Jellyfin'"
validations:
required: true
- type: input
id: where-problem
attributes:
label: "Where's the problem?"
description: Line Number of the problem
placeholder: "ex. https://github.com/awesome-jellyfin/awesome-jellyfin/blob/main/README.md?plain=1#L20"
validations:
required: true
- type: markdown
attributes:
value: |
> Please enter the Line Number of the problem to make it easier for us to find the problem.
> You can find the line numbers [here](https://github.com/awesome-jellyfin/awesome-jellyfin/blob/main/README.md?plain=1). You can click on the line numbers to get the URL for the clicked line.
================================================
FILE: .github/ISSUE_TEMPLATE/200-remove-project.yaml
================================================
name: "🔍 Report a project (e. g. Inactive, Broken, Harmful, ...)"
description: >
Did you find a project, which shouldn't be on the list anymore?
Are you a maintainer of one of the listed projects and want it removed?
title: "Remove <project>"
labels:
- removal
body:
- type: markdown
attributes:
value: |
> [!IMPORTANT]
> Before submitting, please read the **[Contribution Guidelines](https://github.com/awesome-jellyfin/awesome-jellyfin/blob/main/CONTRIBUTING.md)**.
>
> If you are familiar with GitHub and know how to create a Pull Request, please consider submitting your suggestion **directly as a PR** instead of opening an issue:
> https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request
>
> Pull Requests are usually reviewed faster. Issues are mainly intended for users who are unsure how to contribute via PR.
**Thank you so much for your help to make this list even better! 💖**
- type: input
id: affected-project
attributes:
label: Affected Project
description: Which project should be removed?
validations:
required: true
- type: textarea
id: reason-for-removal
attributes:
label: Reason for removal
description: Why should this project be removed?
validations:
required: true
================================================
FILE: .github/workflows/check-for-pending-jobs.yaml
================================================
name: Check for Pending Jobs
on:
schedule:
- cron: '32 */6 * * *'
workflow_dispatch: {}
jobs:
hit-endpoint:
runs-on: ubuntu-latest
concurrency:
group: ping-url
cancel-in-progress: false
steps:
- name: Run checks
env:
TARGET_URL: "${{ secrets.PENDING_JOBS_CHECK_URL }}&owner=awesome-jellyfin&repo=awesome-jellyfin&ping=awesome-jellyfin%2Freview"
run: |
curl -fL --retry 3 --max-time 30 "$TARGET_URL"
================================================
FILE: .github/workflows/clients-pull-request.yaml
================================================
name: 'Clients Update Pull Request'
on:
# pull_request:
# paths:
# - 'assets/clients/clients.yaml'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: '1.21'
- name: Test if we can generate clients
run: |
go install github.com/awesome-jellyfin/clients-md-generator/cmd/generate@latest
generate -input assets/clients/clients.yaml -out-stdout -out-file clients_result.md
- name: Create Comment Body
run: |
cat <<EOF > comment_body.txt
<!-- [clients-result] -->
**Thank you for your contribution! ❤️**
Here you can find a preview of the generated <code>CLIENTS.md</code> file:
<details>
<summary><code>CLIENTS.md</code></summary>
$(cat clients_result.md)
</details>
EOF
- name: Find Comment from Linter
uses: peter-evans/find-comment@v3
id: fc
with:
issue-number: ${{ github.event.number }}
comment-author: 'awesome-jellyfin-bot'
body-includes: '<!-- [clients-result] -->'
- name: Create or Update Comment
uses: peter-evans/create-or-update-comment@v4
with:
token: ${{ secrets.AWESOME_JELLYFIN_BOT_TOKEN }}
comment-id: ${{ steps.fc.outputs.comment-id }}
issue-number: ${{ github.event.number }}
edit-mode: replace
body-path: comment_body.txt
================================================
FILE: .github/workflows/clients-update-clients.yaml
================================================
name: '[Clients] Update CLIENTS.md'
on:
push:
branches:
- 'main'
paths:
- 'assets/clients/clients.yaml'
- 'assets/clients/CLIENTS.template.md'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
token: ${{ secrets.AWESOME_JELLYFIN_BOT_TOKEN }}
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: '1.21'
- name: Generate CLIENTS.md
run: |
go install github.com/awesome-jellyfin/clients-md-generator/cmd/generate@latest
generate -input assets/clients/clients.yaml -out-file assets/clients/generated-clients.md
echo "" > CLIENTS.md
while read p; do
if [[ $p == "{{ CLIENTS }}" ]]; then
cat assets/clients/generated-clients.md >> CLIENTS.md
else
echo "$p" >> CLIENTS.md
fi
done < assets/clients/CLIENTS.template.md
- name: Commit and push if there are changes
run: |
git config --local user.email "awesome-jellyfin@d2a.io"
git config --local user.name "awesome-jellyfin-bot"
git add CLIENTS.md
git commit -m "chore: update CLIENTS.md" --allow-empty || exit 0
git push
================================================
FILE: .github/workflows/lint.yaml
================================================
name: Lint
on:
pull_request:
branches: [main]
paths:
- "**/*.md"
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- run: bunx https://github.com/awesome-jellyfin/awesome-lint
================================================
FILE: .github/workflows/monthly-release.yaml
================================================
name: Monthly Release
on:
schedule:
- cron: "42 9 1 * *"
workflow_dispatch:
permissions:
contents: write
concurrency:
group: monthly-release
cancel-in-progress: false
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Fetch tags
run: git fetch --tags --force
- name: Decide whether a release is needed
id: check
shell: bash
run: |
set -euo pipefail
TAG="monthly/$(date -u +'%Y-%m')"
TITLE="Monthly - $(date -u +'%B %Y')"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
echo "title=$TITLE" >> "$GITHUB_OUTPUT"
# skip tag already exists
if git rev-parse "$TAG" >/dev/null 2>&1; then
echo "should_release=false" >> "$GITHUB_OUTPUT"
echo "reason=tag_exists" >> "$GITHUB_OUTPUT"
exit 0
fi
LAST_TAG="$(git tag --sort=-creatordate | head -n 1 || true)"
if [ -z "$LAST_TAG" ]; then
echo "should_release=false" >> "$GITHUB_OUTPUT"
echo "reason=no_tag_found" >> "$GITHUB_OUTPUT"
exit 0
fi
COMMIT_COUNT="$(git rev-list --count "${LAST_TAG}..HEAD")"
echo "previous_tag=$LAST_TAG" >> "$GITHUB_OUTPUT"
echo "commit_count=$COMMIT_COUNT" >> "$GITHUB_OUTPUT"
# require at least 10 commits for a monthly update
if [ "$COMMIT_COUNT" -lt 10 ]; then
echo "should_release=false" >> "$GITHUB_OUTPUT"
echo "reason=not_enough_commits" >> "$GITHUB_OUTPUT"
else
echo "should_release=true" >> "$GITHUB_OUTPUT"
echo "reason=threshold_met" >> "$GITHUB_OUTPUT"
fi
- name: Build release intro
if: steps.check.outputs.should_release == 'true'
id: notes
shell: bash
run: |
set -euo pipefail
TITLE="${{ steps.check.outputs.title }}"
COUNT="${{ steps.check.outputs.commit_count }}"
PREV="${{ steps.check.outputs.previous_tag }}"
{
echo "file=release-intro.md" >> "$GITHUB_OUTPUT"
echo "- Commits since last release: **$COUNT**"
echo "- Previous release tag: \`$PREV\`"
echo "- Full list: [README](./README.md)"
echo
echo "---"
echo
} > release-intro.md
- name: Create GitHub release with generated notes
if: steps.check.outputs.should_release == 'true'
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release create "${{ steps.check.outputs.tag }}" \
--target "${{ github.sha }}" \
--title "${{ steps.check.outputs.title }}" \
--notes-file "${{ steps.notes.outputs.file }}" \
--generate-notes \
--latest
- name: Log skip reason
if: steps.check.outputs.should_release != 'true'
run: |
echo "Skipping release."
echo "Reason: ${{ steps.check.outputs.reason }}"
echo "Commits since previous release: ${{ steps.check.outputs.commit_count }}"
================================================
FILE: .github/workflows/sorting-pull-check.yaml
================================================
name: 'README Update Pull Request'
on:
# pull_request:
# paths:
# - 'README.md'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: '1.21'
- name: Install Sorter
run: |
go install github.com/awesome-jellyfin/clients-md-generator/cmd/sort@v1.0.1
- name: Sort README
id: sorting
run: |
go run github.com/awesome-jellyfin/clients-md-generator/cmd/sort@v1.0.1 \
-input README.md \
-out-file README.sorted.md \
-out-stdout \
-fail
continue-on-error: true
- name: Generate Comment Body on Failure
if: steps.sorting.outcome == 'failure'
run: |
cat <<EOF > comment_body.txt
<!-- [sort-result] -->
**Thank you for your contribution! ❤️**
We found sorting changes in <code>README.md</code>.
Here is a diff showing what changed:
<details>
<summary><code>README.md</code> diff</summary>
\`\`\`diff
$(diff -u README.md README.sorted.md || true)
\`\`\`
</details>
EOF
- name: Generate Comment Body on Success
if: steps.sorting.outcome != 'failure'
run: |
cat <<EOF > comment_body.txt
<!-- [sort-result] -->
**Thank you for your contribution! ❤️**
No issues found with the ordering.
EOF
- name: Find Comment from Linter
uses: peter-evans/find-comment@v3
id: fc
with:
issue-number: ${{ github.event.number }}
comment-author: 'awesome-jellyfin-bot'
body-includes: '<!-- [sort-result] -->'
- name: Create or Update Sorting Diff Comment
uses: peter-evans/create-or-update-comment@v4
with:
token: ${{ secrets.AWESOME_JELLYFIN_BOT_TOKEN }}
comment-id: ${{ steps.fc.outputs.comment-id }}
issue-number: ${{ github.event.number }}
body-path: comment_body.txt
edit-mode: replace
- name: Fail if sorting changed
if: steps.sorting.outcome == 'failure'
run: |
echo "README.md requires sorting. Failing the pipeline."
exit 1
================================================
FILE: CLIENTS.md
================================================
<!--
⚠️ WARNING: DO NOT EDIT THIS FILE ⚠️
This Markdown file is auto-generated from the `assets/clients/clients.yaml` file.
Any manual changes made to this file will be overwritten the next time it is generated.
To make changes, please edit the `assets/clients/clients.yaml` file and regenerate this Markdown file.
-->
<p align="center">
<img src="assets/banner.png" />
<h1 align="center"><a href="https://github.com/awesome-jellyfin/awesome-jellyfin">Awesome Jellyfin</a> > Clients</h1>
</p>
# By Environment
## 🌎 Browser-Based
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [ampcast ` ⚒️ ` ` 🎵 `](https://github.com/rekkyrosso/ampcast) | ✅ | ✅ | ❎ | [](https://github.com/rekkyrosso/ampcast/releases) |
| [Aperture ` ⚒️ `](https://github.com/akhilmulpurii/aperture) | ✅ | ✅ | ❎ | [](https://github.com/akhilmulpurii/aperture/releases) |
| [Feishin ` ⚒️ ` ` 🎵 `](https://github.com/jeffvli/feishin) | ✅ | ✅ | ❎ | [](https://github.com/jeffvli/feishin/releases) |
| [Finetic](https://github.com/AyaanZaveri/finetic) | ✅ | ✅ | ❎ | [](https://github.com/AyaanZaveri/finetic/releases) |
| [Fladder](https://github.com/DonutWare/Fladder) | ✅ | ✅ | ❎ | [](https://github.com/DonutWare/Fladder/releases) [](https://play.google.com/store/apps/details?id=nl.jknaapen.fladder) |
| [Jelly Music App ` 🎵 `](https://github.com/Stannnnn/jelly-app) | ✅ | ✅ | ❎ | [](https://github.com/Stannnnn/jelly-app/releases) |
| [Jellyfin Vue ` 🔹 ` ` ⚒️ `](https://github.com/jellyfin/jellyfin-vue) | ✅ | ✅ | ❎ | [](https://github.com/jellyfin/jellyfin-vue/actions/workflows/release.yml) [](https://jf-vue.pages.dev/) |
| [Jellyflix](https://github.com/jellyflix-app/jellyflix) | ✅ | ✅ | ❎ | [](https://jellyflix.kiejon.com/) [](https://apps.apple.com/app/id6476043683) [](https://github.com/jellyflix-app/jellyflix/releases) |
| [Pelagica](https://github.com/KartoffelChipss/pelagica) | ✅ | ✅ | ❎ | [](https://github.com/KartoffelChipss/pelagica/releases) [](https://pelagica.jan.run) |
| [Preserve ` ⚒️ ` ` 🎵 `](https://gitlab.com/preserve/preserve) | ✅ | ✅ | ❎ | [](https://gitlab.com/preserve/preserve) [](https://preserveplayer.com/) |
| [Shadfin ` ⚒️ `](https://github.com/Shadfin/app) | ✅ | ✅ | ❎ | [](https://github.com/Shadfin/app/releases) [](https://main.shadfin-standalone.pages.dev) |
| [sonixd ` ⚒️ ` ` 🎵 `](https://github.com/jeffvli/sonixd) | ✅ | ✅ | ❎ | [](https://github.com/jeffvli/sonixd/releases) |
## 💻 Desktop
### Windows
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [ampcast ` ⚒️ ` ` 🎵 `](https://github.com/rekkyrosso/ampcast) | ✅ | ✅ | ❎ | [](https://github.com/rekkyrosso/ampcast/releases) |
| [Blink ` ⚒️ `](https://github.com/prayag17/Blink) | ✅ | ✅ | ❎ | [](https://github.com/prayag17/Blink/releases) |
| [Bloodin ` ⚒️ `](https://github.com/pathetic/bloodin) | ✅ | ✅ | ❎ | |
| [Feishin ` ⚒️ ` ` 🎵 `](https://github.com/jeffvli/feishin) | ✅ | ✅ | ❎ | [](https://github.com/jeffvli/feishin/releases) |
| [Fladder](https://github.com/DonutWare/Fladder) | ✅ | ✅ | ❎ | [](https://github.com/DonutWare/Fladder/releases) [](https://play.google.com/store/apps/details?id=nl.jknaapen.fladder) |
| [FluentFin ` ⚒️ `](https://github.com/insomniachi/FluentFin) | ✅ | ✅ | ❎ | [](https://github.com/insomniachi/FluentFin/releases) |
| [Foxy ` 🎵 `](https://github.com/Devioxic/Foxy-Desktop) | ✅ | ✅ | ❎ | [](https://github.com/Devioxic/Foxy-Desktop/releases) |
| [Hills](https://play.google.com/store/apps/details?id=com.mountains.hills) | ❌ | ✅ | ☑️ | [](https://play.google.com/store/apps/details?id=com.mountains.hills) [](https://apps.microsoft.com/detail/9NXNZFRLLWZX) |
| [iPlay](https://github.com/saltpi/iPlay) | ✅ | ✅ | ❎ | [](https://github.com/saltpi/iPlay/releases) [](https://apps.apple.com/app/id6480576133) [](https://www.amazon.com/gp/product/B0DB2KL58G) [](https://apps.microsoft.com/detail/9NBZ2BXD4WFZ) |
| [Jelly Music App ` 🎵 `](https://github.com/Stannnnn/jelly-app) | ✅ | ✅ | ❎ | [](https://github.com/Stannnnn/jelly-app/releases) |
| [Jellyamp ` 🎵 `](https://github.com/m0ngr31/jellyamp) | ✅ | ✅ | ❎ | [](https://github.com/m0ngr31/jellyamp/releases) |
| [Jellyfin Media Player ` 🔹 `](https://github.com/jellyfin/jellyfin-media-player) | ✅ | ✅ | ❎ | [](https://github.com/jellyfin/jellyfin-media-player/releases) [](https://flathub.org/apps/com.github.iwalton3.jellyfin-media-player) |
| [Jellyfin MPV Shim ` 🔹 `](https://github.com/jellyfin/jellyfin-mpv-shim) | ✅ | ✅ | ❎ | [](https://github.com/jellyfin/jellyfin-mpv-shim/releases) [](https://flathub.org/apps/com.github.iwalton3.jellyfin-mpv-shim) |
| [Jellyflix](https://github.com/jellyflix-app/jellyflix) | ✅ | ✅ | ❎ | [](https://jellyflix.kiejon.com/) [](https://apps.apple.com/app/id6476043683) [](https://github.com/jellyflix-app/jellyflix/releases) |
| [Playtorrio](https://github.com/ayman708-UX/PlayTorrio) | ✅ | ✅ | ❎ | [](https://github.com/ayman708-UX/PlayTorrio/releases) |
| [Preserve ` ⚒️ ` ` 🎵 `](https://gitlab.com/preserve/preserve) | ✅ | ✅ | ❎ | [](https://gitlab.com/preserve/preserve) [](https://preserveplayer.com/) |
| [Rodel Player](https://apps.microsoft.com/detail/9nb0h051m4v4) | ❌ | ✅ | ❎ | [](https://apps.microsoft.com/detail/9nb0h051m4v4) |
| [Sonixd ` ⚒️ ` ` 🎵 `](https://github.com/jeffvli/sonixd) | ✅ | ✅ | ❎ | [](https://github.com/jeffvli/sonixd/releases) |
| [Supersonic ` ⚒️ ` ` 🎵 `](https://github.com/dweymouth/supersonic) | ✅ | ✅ | ❎ | [](https://github.com/dweymouth/supersonic/releases) [](https://flathub.org/apps/io.github.dweymouth.supersonic) |
| [Switchfin ` ⚒️ `](https://github.com/dragonflylee/switchfin) | ✅ | ✅ | ❎ | [](https://github.com/dragonflylee/switchfin/releases) |
| [Tauon Music Box ` 🎵 `](https://github.com/Taiko2k/TauonMusicBox) | ✅ | ✅ | ❎ | [](https://github.com/Taiko2k/TauonMusicBox/releases) [](https://flathub.org/apps/com.github.taiko2k.tauonmb) |
| [tsukimi ` ⚒️ `](https://github.com/tsukinaha/tsukimi) | ✅ | ✅ | ❎ | [](https://github.com/tsukinaha/tsukimi/releases) |
### macOS
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [ampcast ` ⚒️ ` ` 🎵 `](https://github.com/rekkyrosso/ampcast) | ✅ | ✅ | ❎ | [](https://github.com/rekkyrosso/ampcast/releases) |
| [Blink ` ⚒️ `](https://github.com/prayag17/Blink) | ✅ | ✅ | ❎ | [](https://github.com/prayag17/Blink/releases) |
| [Bloodin ` ⚒️ `](https://github.com/pathetic/bloodin) | ✅ | ✅ | ❎ | |
| [Coppelia ` ⚒️ ` ` 🎵 `](https://github.com/j6k4m8/coppelia) | ✅ | ✅ | ❎ | [](https://github.com/j6k4m8/coppelia/releases) |
| [Dee Jellie ` 🎵 `](https://www.deejellie.com) | ❌ | ❌ | ☑️ | [](https://apps.apple.com/app/id6755585736) |
| [Discrete ` 🎵 `](https://discrete.app/) | ❌ | ✅ | ☑️ | [](https://apps.apple.com/app/id6746067740) |
| [Feishin ` ⚒️ ` ` 🎵 `](https://github.com/jeffvli/feishin) | ✅ | ✅ | ❎ | [](https://github.com/jeffvli/feishin/releases) |
| [Finer ` 🎵 `](https://monk-studio.com/finer) | ❌ | ✅ | ❎ | [](https://apps.apple.com/app/id6738301953) |
| [Fladder](https://github.com/DonutWare/Fladder) | ✅ | ✅ | ❎ | [](https://github.com/DonutWare/Fladder/releases) [](https://play.google.com/store/apps/details?id=nl.jknaapen.fladder) |
| [Foxy ` 🎵 `](https://github.com/Devioxic/Foxy-Desktop) | ✅ | ✅ | ❎ | [](https://github.com/Devioxic/Foxy-Desktop/releases) |
| [HamHub](https://www.hamhub.app/) | ❌ | ✅ | ❎ | [](https://apps.apple.com/app/id6458691598) |
| [Infuse](https://firecore.com/infuse) | ❌ | ✅ | ☑️ | [](https://apps.apple.com/app/id1136220934) |
| [iPlay](https://github.com/saltpi/iPlay) | ✅ | ✅ | ❎ | [](https://github.com/saltpi/iPlay/releases) [](https://apps.apple.com/app/id6480576133) [](https://www.amazon.com/gp/product/B0DB2KL58G) [](https://apps.microsoft.com/detail/9NBZ2BXD4WFZ) |
| [Jelly Music App ` 🎵 `](https://github.com/Stannnnn/jelly-app) | ✅ | ✅ | ❎ | [](https://github.com/Stannnnn/jelly-app/releases) |
| [Jellyfin Media Player ` 🔹 `](https://github.com/jellyfin/jellyfin-media-player) | ✅ | ✅ | ❎ | [](https://github.com/jellyfin/jellyfin-media-player/releases) [](https://flathub.org/apps/com.github.iwalton3.jellyfin-media-player) |
| [Jellyfin MPV Shim ` 🔹 `](https://github.com/jellyfin/jellyfin-mpv-shim) | ✅ | ✅ | ❎ | [](https://github.com/jellyfin/jellyfin-mpv-shim/releases) [](https://flathub.org/apps/com.github.iwalton3.jellyfin-mpv-shim) |
| [Jellyflix](https://github.com/jellyflix-app/jellyflix) | ✅ | ✅ | ❎ | [](https://jellyflix.kiejon.com/) [](https://apps.apple.com/app/id6476043683) [](https://github.com/jellyflix-app/jellyflix/releases) |
| [Phyn](https://phyn.app) | ❌ | ✅ | ☑️ | [](https://play.google.com/store/apps/details?id=com.appsynergyts.phyn) [](https://apps.apple.com/app/id6457674815) |
| [Playtorrio](https://github.com/ayman708-UX/PlayTorrio) | ✅ | ✅ | ❎ | [](https://github.com/ayman708-UX/PlayTorrio/releases) |
| [SenPlayer](https://apps.apple.com/app/id6443975850) | ❌ | ✅ | ☑️ | [](https://apps.apple.com/app/id6443975850) |
| [Sonixd ` ⚒️ ` ` 🎵 `](https://github.com/jeffvli/sonixd) | ✅ | ✅ | ❎ | [](https://github.com/jeffvli/sonixd/releases) |
| [Supersonic ` ⚒️ ` ` 🎵 `](https://github.com/dweymouth/supersonic) | ✅ | ✅ | ❎ | [](https://github.com/dweymouth/supersonic/releases) [](https://flathub.org/apps/io.github.dweymouth.supersonic) |
| [Switchfin ` ⚒️ `](https://github.com/dragonflylee/switchfin) | ✅ | ✅ | ❎ | [](https://github.com/dragonflylee/switchfin/releases) |
| [VidHub](https://okaapps.com/product/1659622164) | ❌ | ✅ | ☑️ | [](https://play.google.com/store/apps/details?id=com.oumi.utility.media.hub) [](https://apps.apple.com/app/id1659622164) |
### Linux
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [ampcast ` ⚒️ ` ` 🎵 `](https://github.com/rekkyrosso/ampcast) | ✅ | ✅ | ❎ | [](https://github.com/rekkyrosso/ampcast/releases) |
| [Blink ` ⚒️ `](https://github.com/prayag17/Blink) | ✅ | ✅ | ❎ | [](https://github.com/prayag17/Blink/releases) |
| [Bloodin ` ⚒️ `](https://github.com/pathetic/bloodin) | ✅ | ✅ | ❎ | |
| [Coppelia ` ⚒️ ` ` 🎵 `](https://github.com/j6k4m8/coppelia) | ✅ | ✅ | ❎ | [](https://github.com/j6k4m8/coppelia/releases) |
| [Delfin ` ⚒️ `](https://codeberg.org/avery42/delfin) | ✅ | ✅ | ❎ | [](https://flathub.org/apps/cafe.avery.Delfin) |
| [Feishin ` ⚒️ ` ` 🎵 `](https://github.com/jeffvli/feishin) | ✅ | ✅ | ❎ | [](https://github.com/jeffvli/feishin/releases) |
| [Fladder](https://github.com/DonutWare/Fladder) | ✅ | ✅ | ❎ | [](https://github.com/DonutWare/Fladder/releases) [](https://play.google.com/store/apps/details?id=nl.jknaapen.fladder) |
| [Foxy ` 🎵 `](https://github.com/Devioxic/Foxy-Desktop) | ✅ | ✅ | ❎ | [](https://github.com/Devioxic/Foxy-Desktop/releases) |
| [Gelly ` ⚒️ ` ` 🎵 `](https://github.com/Fingel/gelly) | ✅ | ✅ | ❎ | [](https://github.com/Fingel/gelly/releases) [](https://flathub.org/apps/io.m51.Gelly) |
| [Jelly Music App ` 🎵 `](https://github.com/Stannnnn/jelly-app) | ✅ | ✅ | ❎ | [](https://github.com/Stannnnn/jelly-app/releases) |
| [Jellyamp ` 🎵 `](https://github.com/m0ngr31/jellyamp) | ✅ | ✅ | ❎ | [](https://github.com/m0ngr31/jellyamp/releases) |
| [Jellyfin Media Player ` 🔹 `](https://github.com/jellyfin/jellyfin-media-player) | ✅ | ✅ | ❎ | [](https://github.com/jellyfin/jellyfin-media-player/releases) [](https://flathub.org/apps/com.github.iwalton3.jellyfin-media-player) |
| [Jellyfin MPV Shim ` 🔹 `](https://github.com/jellyfin/jellyfin-mpv-shim) | ✅ | ✅ | ❎ | [](https://github.com/jellyfin/jellyfin-mpv-shim/releases) [](https://flathub.org/apps/com.github.iwalton3.jellyfin-mpv-shim) |
| [Jellyflix](https://github.com/jellyflix-app/jellyflix) | ✅ | ✅ | ❎ | [](https://jellyflix.kiejon.com/) [](https://apps.apple.com/app/id6476043683) [](https://github.com/jellyflix-app/jellyflix/releases) |
| [Playtorrio](https://github.com/ayman708-UX/PlayTorrio) | ✅ | ✅ | ❎ | [](https://github.com/ayman708-UX/PlayTorrio/releases) |
| [Preserve ` ⚒️ ` ` 🎵 `](https://gitlab.com/preserve/preserve) | ✅ | ✅ | ❎ | [](https://gitlab.com/preserve/preserve) [](https://preserveplayer.com/) |
| [Sonixd ` ⚒️ ` ` 🎵 `](https://github.com/jeffvli/sonixd) | ✅ | ✅ | ❎ | [](https://github.com/jeffvli/sonixd/releases) |
| [Supersonic ` ⚒️ ` ` 🎵 `](https://github.com/dweymouth/supersonic) | ✅ | ✅ | ❎ | [](https://github.com/dweymouth/supersonic/releases) [](https://flathub.org/apps/io.github.dweymouth.supersonic) |
| [Switchfin ` ⚒️ `](https://github.com/dragonflylee/switchfin) | ✅ | ✅ | ❎ | [](https://github.com/dragonflylee/switchfin/releases) |
| [Tauon Music Box ` 🎵 `](https://github.com/Taiko2k/TauonMusicBox) | ✅ | ✅ | ❎ | [](https://github.com/Taiko2k/TauonMusicBox/releases) [](https://flathub.org/apps/com.github.taiko2k.tauonmb) |
| [tsukimi ` ⚒️ `](https://github.com/tsukinaha/tsukimi) | ✅ | ✅ | ❎ | [](https://github.com/tsukinaha/tsukimi/releases) |
## 📱 Mobile
### iOS
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [Coppelia ` ⚒️ ` ` 🎵 `](https://github.com/j6k4m8/coppelia) | ✅ | ✅ | ❎ | [](https://github.com/j6k4m8/coppelia/releases) |
| [Dee Jellie ` 🎵 `](https://www.deejellie.com) | ❌ | ❌ | ☑️ | [](https://apps.apple.com/app/id6755585736) |
| [Discrete ` 🎵 `](https://discrete.app/) | ❌ | ✅ | ☑️ | [](https://apps.apple.com/app/id6746067740) |
| [Filebar](https://fileball.app/) | ❌ | ✅ | ☑️ | [](https://apps.apple.com/app/id1558391784) |
| [Finamp ` 🎵 `](https://github.com/jmshrv/finamp) | ✅ | ✅ | ❎ | [](https://play.google.com/store/apps/details?id=com.unicornsonlsd.finamp) [](https://apps.apple.com/app/id1574922594) |
| [Finer ` 🎵 `](https://monk-studio.com/finer) | ❌ | ✅ | ❎ | [](https://apps.apple.com/app/id6738301953) |
| [Fintunes ` 🎵 `](https://github.com/leinelissen/jellyfin-audio-player) | ✅ | ✅ | ❎ | [](https://github.com/leinelissen/jellyfin-audio-player/releases) [](https://f-droid.org/en/packages/nl.moeilijkedingen.jellyfinaudioplayer) [](https://play.google.com/store/apps/details?id=nl.moeilijkedingen.jellyfinaudioplayer) [](https://apps.apple.com/app/id1527732194) |
| [Fladder](https://github.com/DonutWare/Fladder) | ✅ | ✅ | ❎ | [](https://github.com/DonutWare/Fladder/releases) [](https://play.google.com/store/apps/details?id=nl.jknaapen.fladder) |
| [HamHub](https://www.hamhub.app/) | ❌ | ✅ | ❎ | [](https://apps.apple.com/app/id6458691598) |
| [Infuse](https://firecore.com/infuse) | ❌ | ✅ | ☑️ | [](https://apps.apple.com/app/id1136220934) |
| [iPlay](https://github.com/saltpi/iPlay) | ✅ | ✅ | ❎ | [](https://github.com/saltpi/iPlay/releases) [](https://apps.apple.com/app/id6480576133) [](https://www.amazon.com/gp/product/B0DB2KL58G) [](https://apps.microsoft.com/detail/9NBZ2BXD4WFZ) |
| [Jellify ` 🎵 `](https://github.com/Jellify-Music/App) | ✅ | ✅ | ❎ | [](https://github.com/Jellify-Music/App/releases) [](https://testflight.apple.com/join/etVSc7ZQ) |
| [JellyBook ` 📖 `](https://github.com/JellyBookOrg/JellyBook) | ✅ | ✅ | ❎ | [](https://github.com/JellyBookOrg/JellyBook/releases) [](https://apt.izzysoft.de/fdroid/index/apk/com.KaraWilson.JellyBook/) [](https://testflight.apple.com/join/lEXKY4Dl) |
| [Jellyfin Mobile for iOS ` 🔹 `](https://github.com/jellyfin/jellyfin-expo) | ✅ | ✅ | ❎ | [](https://apps.apple.com/app/id1480192618) |
| [Jellyflix](https://github.com/jellyflix-app/jellyflix) | ✅ | ✅ | ❎ | [](https://jellyflix.kiejon.com/) [](https://apps.apple.com/app/id6476043683) [](https://github.com/jellyflix-app/jellyflix/releases) |
| [JellyTV](https://jellytv.app/en) | ❌ | ❌ | ☑️ | [](https://apps.apple.com/app/id6752357290) |
| [Manet ` 🎵 `](https://tilo.dev/manet/) | ❌ | ✅ | ❎ | [](https://apps.apple.com/app/id6470928235) |
| [Phyn](https://phyn.app) | ❌ | ✅ | ☑️ | [](https://play.google.com/store/apps/details?id=com.appsynergyts.phyn) [](https://apps.apple.com/app/id6457674815) |
| [Plappa ` 🎵 `](https://github.com/LeoKlaus/plappa) | ✅ | ✅ | ❎ | [](https://apps.apple.com/app/id6475201956) |
| [SenPlayer](https://apps.apple.com/app/id6443975850) | ❌ | ✅ | ☑️ | [](https://apps.apple.com/app/id6443975850) |
| [Streamyfin](https://streamyfin.app) | ✅ | ✅ | ❎ | [](https://apps.apple.com/app/id6593660679) [](https://testflight.apple.com/join/CWBaAAK2) [](https://play.google.com/store/apps/details?id=com.fredrikburmester.streamyfin) [](https://github.com/fredrikburmester/streamyfin/releases) |
| [Sunkfin](https://github.com/jackcrane/sunkfin) | ✅ | ✅ | ❎ | [](https://apps.apple.com/app/id6743207349) |
| [Swiftfin ` 🔹 ` ` ⚒️ `](https://github.com/jellyfin/swiftfin) | ✅ | ✅ | ❎ | [](https://apps.apple.com/app/id1604098728) |
| [VidHub](https://okaapps.com/product/1659622164) | ❌ | ✅ | ☑️ | [](https://play.google.com/store/apps/details?id=com.oumi.utility.media.hub) [](https://apps.apple.com/app/id1659622164) |
| [yybx](https://yybpro.com) | ❌ | ❌ | ☑️ | [](https://apps.apple.com/app/id1519723194) |
### Android
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [AFinity ` ⚒️ `](https://github.com/MakD/AFinity) | ✅ | ✅ | ❎ | [](https://github.com/MakD/AFinity/releases) |
| [AfuseKt](https://github.com/AttemptD/AfuseKt-release) | ❌ | ✅ | ☑️ | [](https://github.com/AttemptD/AfuseKt-release/releases) |
| [Coppelia ` ⚒️ ` ` 🎵 `](https://github.com/j6k4m8/coppelia) | ✅ | ✅ | ❎ | [](https://github.com/j6k4m8/coppelia/releases) |
| [Finamp ` 🎵 `](https://github.com/jmshrv/finamp) | ✅ | ✅ | ❎ | [](https://play.google.com/store/apps/details?id=com.unicornsonlsd.finamp) [](https://apps.apple.com/app/id1574922594) |
| [Findroid ` ⚒️ `](https://github.com/jarnedemeulemeester/findroid) | ✅ | ✅ | ❎ | [](https://apt.izzysoft.de/fdroid/index/apk/dev.jdtech.jellyfin) [](https://play.google.com/store/apps/details?id=dev.jdtech.jellyfin) [](https://f-droid.org/en/packages/dev.jdtech.jellyfin/) |
| [Fintunes ` 🎵 `](https://github.com/leinelissen/jellyfin-audio-player) | ✅ | ✅ | ❎ | [](https://github.com/leinelissen/jellyfin-audio-player/releases) [](https://f-droid.org/en/packages/nl.moeilijkedingen.jellyfinaudioplayer) [](https://play.google.com/store/apps/details?id=nl.moeilijkedingen.jellyfinaudioplayer) [](https://apps.apple.com/app/id1527732194) |
| [Fladder](https://github.com/DonutWare/Fladder) | ✅ | ✅ | ❎ | [](https://github.com/DonutWare/Fladder/releases) [](https://play.google.com/store/apps/details?id=nl.jknaapen.fladder) |
| [Gelli ` 🎵 `](https://github.com/dkanada/gelli) | ✅ | ✅ | ❎ | [](https://github.com/dkanada/gelli/releases) [](https://f-droid.org/packages/com.dkanada.gramophone) |
| [Ghosten-Player](https://github.com/GhostenEditor/Ghosten-Player) | ✅ | ✅ | ❎ | [](https://github.com/GhostenEditor/Ghosten-Player/releases) |
| [Hills](https://play.google.com/store/apps/details?id=com.mountains.hills) | ❌ | ✅ | ☑️ | [](https://play.google.com/store/apps/details?id=com.mountains.hills) [](https://apps.microsoft.com/detail/9NXNZFRLLWZX) |
| [Jellify ` 🎵 `](https://github.com/Jellify-Music/App) | ✅ | ✅ | ❎ | [](https://github.com/Jellify-Music/App/releases) [](https://testflight.apple.com/join/etVSc7ZQ) |
| [JellyBook ` 📖 `](https://github.com/JellyBookOrg/JellyBook) | ✅ | ✅ | ❎ | [](https://github.com/JellyBookOrg/JellyBook/releases) [](https://apt.izzysoft.de/fdroid/index/apk/com.KaraWilson.JellyBook/) [](https://testflight.apple.com/join/lEXKY4Dl) |
| [JellyCine](https://github.com/sureshfizzy/JellyCine) | ✅ | ✅ | ❎ | [](https://github.com/sureshfizzy/JellyCine/releases) |
| [Jellyfin for Android ` 🔹 `](https://github.com/jellyfin/jellyfin-android) | ✅ | ✅ | ❎ | [](https://f-droid.org/en/packages/org.jellyfin.mobile/) [](https://www.amazon.com/gp/aw/d/B081RFTTQ9) [](https://play.google.com/store/apps/details?id=org.jellyfin.mobile) |
| [Jellyflix](https://github.com/jellyflix-app/jellyflix) | ✅ | ✅ | ❎ | [](https://jellyflix.kiejon.com/) [](https://apps.apple.com/app/id6476043683) [](https://github.com/jellyflix-app/jellyflix/releases) |
| [Phyn](https://phyn.app) | ❌ | ✅ | ☑️ | [](https://play.google.com/store/apps/details?id=com.appsynergyts.phyn) [](https://apps.apple.com/app/id6457674815) |
| [Playtorrio](https://github.com/ayman708-UX/PlayTorrio) | ✅ | ✅ | ❎ | [](https://github.com/ayman708-UX/PlayTorrio/releases) |
| [Reefin](https://reefin.dev/) | ✅ | ✅ | ❎ | [](https://play.google.com/store/apps/details?id=com.shady.reefin) [](https://github.com/SKULSHADY/reefin/releases) |
| [Streamyfin](https://streamyfin.app) | ✅ | ✅ | ❎ | [](https://apps.apple.com/app/id6593660679) [](https://testflight.apple.com/join/CWBaAAK2) [](https://play.google.com/store/apps/details?id=com.fredrikburmester.streamyfin) [](https://github.com/fredrikburmester/streamyfin/releases) |
| [Symfonium ` ⚒️ ` ` 🎵 `](https://symfonium.app) | ❌ | ❌ | ☑️ | [](https://play.google.com/store/apps/details?id=app.symfonik.music.player) |
| [VidHub](https://okaapps.com/product/1659622164) | ❌ | ✅ | ☑️ | [](https://play.google.com/store/apps/details?id=com.oumi.utility.media.hub) [](https://apps.apple.com/app/id1659622164) |
| [Void ` ⚒️ `](https://github.com/hritwikjohri/Void-for-jellyfin) | ✅ | ✅ | ❎ | [](https://github.com/hritwikjohri/Void-for-jellyfin/releases) [](https://github.com/hritwikjohri/VoidTV-for-jellyfin/releases) |
| Yamby | ❌ | ✅ | ☑️ | [](https://play.google.com/store/apps/details?id=com.hush.yamby) |
### Sailfish OS
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [Sailfin](https://github.com/heartfin/harbour-sailfin) | ✅ | ✅ | ❎ | [](https://openrepos.net/content/ahappyhuman/sailfin) |
### HarmonyOS
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [FinMusic ` 🎵 `](https://github.com/OHPG/FinMusic) | ✅ | ✅ | ❎ | [](https://appgallery.huawei.com/app/detail?id=org.ohpg.fin.music) [](https://github.com/OHPG/FinMusic/releases) |
| [FinVideo](https://github.com/OHPG/FinVideo) | ✅ | ✅ | ❎ | [](https://github.com/OHPG/FinVideo/releases) [](https://appgallery.huawei.com/app/detail?id=org.ohpg.fin.video) |
### Nintendo Switch
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [Switchfin ` ⚒️ `](https://github.com/dragonflylee/switchfin) | ✅ | ✅ | ❎ | [](https://github.com/dragonflylee/switchfin/releases) |
## 📺 TV
### Apple TV
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [Dee Jellie ` 🎵 `](https://www.deejellie.com) | ❌ | ❌ | ☑️ | [](https://apps.apple.com/app/id6755585736) |
| [Filebar](https://fileball.app/) | ❌ | ✅ | ☑️ | [](https://apps.apple.com/app/id1558391784) |
| [HamHub](https://www.hamhub.app/) | ❌ | ✅ | ❎ | [](https://apps.apple.com/app/id6458691598) |
| [Infuse](https://firecore.com/infuse) | ❌ | ✅ | ☑️ | [](https://apps.apple.com/app/id1136220934) |
| JellySee | ❌ | ❌ | ☑️ | [](https://apps.apple.com/app/id6748783768) |
| [Mediora](https://github.com/ghobs91/mediora) | ✅ | ✅ | ❎ | [](https://apps.apple.com/app/id6757345487) |
| [MrMC](https://github.com/MrMC/mrmc) | ✅ | ✅ | ☑️ | [](https://www.amazon.com/gp/product/B01ENT3I1Q/ref=mas_pm_mrmc) [](https://apps.apple.com/app/id1059536415) [](https://play.google.com/store/apps/details?id=tv.mrmc.mrmc) |
| [SenPlayer](https://apps.apple.com/app/id6443975850) | ❌ | ✅ | ☑️ | [](https://apps.apple.com/app/id6443975850) |
| [Swiftfin ` 🔹 ` ` ⚒️ `](https://github.com/jellyfin/swiftfin) | ✅ | ✅ | ❎ | [](https://apps.apple.com/app/id1604098728) |
| [VidHub](https://okaapps.com/product/1659622164) | ❌ | ✅ | ☑️ | [](https://play.google.com/store/apps/details?id=com.oumi.utility.media.hub) [](https://apps.apple.com/app/id1659622164) |
| [yybx](https://yybpro.com) | ❌ | ❌ | ☑️ | [](https://apps.apple.com/app/id1519723194) |
### Android TV
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [AfuseKt TV](https://github.com/AttemptD/AfuseKtV-release) | ❌ | ❌ | ☑️ | [](https://github.com/AttemptD/AfuseKtV-release/releases) |
| [DUNE ` ⚒️ `](https://github.com/Sam42a/DUNE) | ✅ | ✅ | ❎ | [](https://github.com/Sam42a/DUNE/releases) |
| [Elefin](https://github.com/flex36ty/elefin) | ✅ | ✅ | ❎ | [](https://github.com/flex36ty/elefin/releases) |
| [Fladder](https://github.com/DonutWare/Fladder) | ✅ | ✅ | ❎ | [](https://github.com/DonutWare/Fladder/releases) [](https://play.google.com/store/apps/details?id=nl.jknaapen.fladder) |
| [Ghosten-Player](https://github.com/GhostenEditor/Ghosten-Player) | ✅ | ✅ | ❎ | [](https://github.com/GhostenEditor/Ghosten-Player/releases) |
| [Jellyfin for Android TV ` 🔹 `](https://github.com/jellyfin/jellyfin-androidtv) | ✅ | ✅ | ❎ | [](https://www.amazon.com/gp/aw/d/B07TX7Z725) [](https://play.google.com/store/apps/details?id=org.jellyfin.androidtv) |
| [Moonfin](https://github.com/Moonfin-Client) | ✅ | ✅ | ❎ | [](https://github.com/Moonfin-Client/AndroidTV-FireTV/releases) [](https://github.com/Moonfin-Client/Roku/releases) [](https://github.com/Moonfin-Client/webOS/releases) [](https://github.com/Moonfin-Client/Tizen/releases) [](https://play.google.com/store/apps/details?id=org.moonfin.androidtv) |
| [Reefin](https://reefin.dev/) | ✅ | ✅ | ❎ | [](https://play.google.com/store/apps/details?id=com.shady.reefin) [](https://github.com/SKULSHADY/reefin/releases) |
| [VidHub](https://okaapps.com/product/1659622164) | ❌ | ✅ | ☑️ | [](https://play.google.com/store/apps/details?id=com.oumi.utility.media.hub) [](https://apps.apple.com/app/id1659622164) |
| [Void ` ⚒️ `](https://github.com/hritwikjohri/Void-for-jellyfin) | ✅ | ✅ | ❎ | [](https://github.com/hritwikjohri/Void-for-jellyfin/releases) [](https://github.com/hritwikjohri/VoidTV-for-jellyfin/releases) |
| [Wholphin](https://github.com/damontecres/Wholphin) | ✅ | ✅ | ❎ | [](https://play.google.com/store/apps/details?id=com.github.damontecres.wholphin) [](https://github.com/damontecres/Wholphin/releases) |
| Yamby | ❌ | ✅ | ☑️ | [](https://play.google.com/store/apps/details?id=com.hush.yamby) |
### Kodi
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [JellyCon ` 🔹 `](https://github.com/jellyfin/jellycon) | ✅ | ✅ | ❎ | [](https://github.com/jellyfin/jellycon/releases) |
| [Jellyfin for Kodi ` 🔹 `](https://github.com/jellyfin/jellyfin-kodi) | ✅ | ✅ | ❎ | [](https://github.com/jellyfin/jellyfin-kodi/releases) |
### Roku
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [Jellyfin for Roku ` 🔹 `](https://github.com/jellyfin/jellyfin-roku) | ✅ | ✅ | ❎ | [](https://channelstore.roku.com/details/592369/jellyfin) |
| [JellyRock](https://github.com/cewert/jellyrock) | ✅ | ✅ | ❎ | [](https://channelstore.roku.com/details/232f9e82db11ce628e3fe7e01382a330:a85d6e9e520567806e8dae1c0cabadd5/jellyrock) [](https://github.com/cewert/jellyrock/releases) |
| [Moonfin](https://github.com/Moonfin-Client) | ✅ | ✅ | ❎ | [](https://github.com/Moonfin-Client/AndroidTV-FireTV/releases) [](https://github.com/Moonfin-Client/Roku/releases) [](https://github.com/Moonfin-Client/webOS/releases) [](https://github.com/Moonfin-Client/Tizen/releases) [](https://play.google.com/store/apps/details?id=org.moonfin.androidtv) |
### Tizen
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [Jellyfin for Tizen ` 🔹 `](https://github.com/jellyfin/jellyfin-tizen) | ✅ | ✅ | ❎ | [Build It Yourself](https://github.com/jellyfin/jellyfin-tizen) |
| [Moonfin](https://github.com/Moonfin-Client) | ✅ | ✅ | ❎ | [](https://github.com/Moonfin-Client/AndroidTV-FireTV/releases) [](https://github.com/Moonfin-Client/Roku/releases) [](https://github.com/Moonfin-Client/webOS/releases) [](https://github.com/Moonfin-Client/Tizen/releases) [](https://play.google.com/store/apps/details?id=org.moonfin.androidtv) |
### webOS
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [Breezyfin ` ⚒️ `](https://github.com/botagas/Breezyfin) | ✅ | ✅ | ❎ | [](https://github.com/botagas/Breezyfin/releases) |
| [Jellyfin for WebOS ` 🔹 `](https://github.com/jellyfin/jellyfin-webos) | ✅ | ✅ | ❎ | [](https://us.lgappstv.com/main/tvapp/detail?appId=1030579) |
| [Moonfin](https://github.com/Moonfin-Client) | ✅ | ✅ | ❎ | [](https://github.com/Moonfin-Client/AndroidTV-FireTV/releases) [](https://github.com/Moonfin-Client/Roku/releases) [](https://github.com/Moonfin-Client/webOS/releases) [](https://github.com/Moonfin-Client/Tizen/releases) [](https://play.google.com/store/apps/details?id=org.moonfin.androidtv) |
---
# By Type
## ` 🎵 ` Music Client
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [ampcast ` ⚒️ ` ` 🎵 `](https://github.com/rekkyrosso/ampcast) | ✅ | ✅ | ❎ | [](https://github.com/rekkyrosso/ampcast/releases) |
| [Coppelia ` ⚒️ ` ` 🎵 `](https://github.com/j6k4m8/coppelia) | ✅ | ✅ | ❎ | [](https://github.com/j6k4m8/coppelia/releases) |
| [Dee Jellie ` 🎵 `](https://www.deejellie.com) | ❌ | ❌ | ☑️ | [](https://apps.apple.com/app/id6755585736) |
| [Discrete ` 🎵 `](https://discrete.app/) | ❌ | ✅ | ☑️ | [](https://apps.apple.com/app/id6746067740) |
| [Feishin ` ⚒️ ` ` 🎵 `](https://github.com/jeffvli/feishin) | ✅ | ✅ | ❎ | [](https://github.com/jeffvli/feishin/releases) |
| [Finamp ` 🎵 `](https://github.com/jmshrv/finamp) | ✅ | ✅ | ❎ | [](https://play.google.com/store/apps/details?id=com.unicornsonlsd.finamp) [](https://apps.apple.com/app/id1574922594) |
| [Finer ` 🎵 `](https://monk-studio.com/finer) | ❌ | ✅ | ❎ | [](https://apps.apple.com/app/id6738301953) |
| [FinMusic ` 🎵 `](https://github.com/OHPG/FinMusic) | ✅ | ✅ | ❎ | [](https://appgallery.huawei.com/app/detail?id=org.ohpg.fin.music) [](https://github.com/OHPG/FinMusic/releases) |
| [Fintunes ` 🎵 `](https://github.com/leinelissen/jellyfin-audio-player) | ✅ | ✅ | ❎ | [](https://github.com/leinelissen/jellyfin-audio-player/releases) [](https://f-droid.org/en/packages/nl.moeilijkedingen.jellyfinaudioplayer) [](https://play.google.com/store/apps/details?id=nl.moeilijkedingen.jellyfinaudioplayer) [](https://apps.apple.com/app/id1527732194) |
| [Foxy ` 🎵 `](https://github.com/Devioxic/Foxy-Desktop) | ✅ | ✅ | ❎ | [](https://github.com/Devioxic/Foxy-Desktop/releases) |
| [Gelli ` 🎵 `](https://github.com/dkanada/gelli) | ✅ | ✅ | ❎ | [](https://github.com/dkanada/gelli/releases) [](https://f-droid.org/packages/com.dkanada.gramophone) |
| [Gelly ` ⚒️ ` ` 🎵 `](https://github.com/Fingel/gelly) | ✅ | ✅ | ❎ | [](https://github.com/Fingel/gelly/releases) [](https://flathub.org/apps/io.m51.Gelly) |
| [Jellify ` 🎵 `](https://github.com/Jellify-Music/App) | ✅ | ✅ | ❎ | [](https://github.com/Jellify-Music/App/releases) [](https://testflight.apple.com/join/etVSc7ZQ) |
| [Jelly Music App ` 🎵 `](https://github.com/Stannnnn/jelly-app) | ✅ | ✅ | ❎ | [](https://github.com/Stannnnn/jelly-app/releases) |
| [Jellyamp ` 🎵 `](https://github.com/m0ngr31/jellyamp) | ✅ | ✅ | ❎ | [](https://github.com/m0ngr31/jellyamp/releases) |
| [Manet ` 🎵 `](https://tilo.dev/manet/) | ❌ | ✅ | ❎ | [](https://apps.apple.com/app/id6470928235) |
| [Plappa ` 🎵 `](https://github.com/LeoKlaus/plappa) | ✅ | ✅ | ❎ | [](https://apps.apple.com/app/id6475201956) |
| [Preserve ` ⚒️ ` ` 🎵 `](https://gitlab.com/preserve/preserve) | ✅ | ✅ | ❎ | [](https://gitlab.com/preserve/preserve) [](https://preserveplayer.com/) |
| [Sonixd ` ⚒️ ` ` 🎵 `](https://github.com/jeffvli/sonixd) | ✅ | ✅ | ❎ | [](https://github.com/jeffvli/sonixd/releases) |
| [sonixd ` ⚒️ ` ` 🎵 `](https://github.com/jeffvli/sonixd) | ✅ | ✅ | ❎ | [](https://github.com/jeffvli/sonixd/releases) |
| [Supersonic ` ⚒️ ` ` 🎵 `](https://github.com/dweymouth/supersonic) | ✅ | ✅ | ❎ | [](https://github.com/dweymouth/supersonic/releases) [](https://flathub.org/apps/io.github.dweymouth.supersonic) |
| [Symfonium ` ⚒️ ` ` 🎵 `](https://symfonium.app) | ❌ | ❌ | ☑️ | [](https://play.google.com/store/apps/details?id=app.symfonik.music.player) |
| [Tauon Music Box ` 🎵 `](https://github.com/Taiko2k/TauonMusicBox) | ✅ | ✅ | ❎ | [](https://github.com/Taiko2k/TauonMusicBox/releases) [](https://flathub.org/apps/com.github.taiko2k.tauonmb) |
## ` 📖 ` Reader
| Name | OSS | Free | Paid | Downloads |
| ---- | --- | ---- | ---- | --------- |
| [JellyBook ` 📖 `](https://github.com/JellyBookOrg/JellyBook) | ✅ | ✅ | ❎ | [](https://github.com/JellyBookOrg/JellyBook/releases) [](https://apt.izzysoft.de/fdroid/index/apk/com.KaraWilson.JellyBook/) [](https://testflight.apple.com/join/lEXKY4Dl) |
---
* **Official** ` 🔹 `
* **Beta** ` ⚒️ `
* **Music Client** ` 🎵 `
* **Reader** ` 📖 `
---
> [!NOTE]
> Please note that this Markdown file is automatically generated from the [`clients.yaml`](./assets/clients/clients.yaml) file.
> **Contributions should only be made by updating the `clients.yaml` file.**
> Any updates to the `.yaml` file will result in this Markdown file being re-generated to reflect those changes.
<!--
⚠️ WARNING: DO NOT EDIT THIS FILE ⚠️
This Markdown file is auto-generated from the `assets/clients/clients.yaml` file.
Any manual changes made to this file will be overwritten the next time it is generated.
To make changes, please edit the `assets/clients/clients.yaml` file and regenerate this Markdown file.
-->
================================================
FILE: CODE-OF-CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at awesome-jellyfin@d2a.io. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
================================================
FILE: CONTRIBUTING.md
================================================
# Contribution Guidelines
Please note that this project is released with a [Contributor Code of Conduct](CODE-OF-CONDUCT.md).
By participating in this project you agree to abide by its terms.
## Pull Requests
Ensure your pull request adheres to the following guidelines:
- Use the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/) (`<type>[optional scope]: <description>`).
- **Alphabetical Sorting**: Items in `README.md` must be sorted alphabetically. See [Sorting Rules](#sorting-rules).
- **Templated Content**: Some files, like `CLIENTS.md` are automatically generated from files. You should only edit the original source files from which they're generated from. See [Templated Content](#templated-content).
- Search previous suggestions before making a new one, as yours may be a duplicate.
- New categories, or improvements to the existing categorization are welcome.
- Keep descriptions short and simple, but descriptive and non-promotional.
Thank you for your suggestions!
---
## Project Criteria
To help maintain a useful and sustainable list, submitted projects are generally expected to meet the following guidelines.
These are not strict requirements but serve as a guideline for new projects.
### Activity
* The project should be at least **4 weeks old**.
* The repository should show **recent and ongoing activity**.
* If automated checks are configured, they should be **passing on the default branch**.
* The project should show signs of **continued maintenance**.
### Quality & Documentation
Projects should meet baseline quality standards:
* A **clear and descriptive README** and/or documentation should be available.
* The commit history should reflect meaningful development activity.
* Contributors adding a project are encouraged to consider whether it is likely to remain maintained.
* **Small utilities or scripts should:**
* Be broadly useful beyond a single use case.
* Preferably be part of a larger project or collection if highly specific.
* Avoid fragmenting the list into numerous minimal standalone scripts.
### Conduct
* Projects should not be associated with malicious, deceptive, or spam-related activity.
* Repositories should follow generally accepted open-source practices.
---
## Sorting Rules
Certain lists within this repository should be kept **alphabetically sorted**, according to a canonical version of each item.
The rules for deriving this canonical version (used for sorting) are as follows:
1. **Square Brackets**:
- If the line contains text in square brackets (e.g., `- [My Item]`), only that bracketed text is used to determine the item's position.
- If there are no square brackets, the entire line (minus the leading "`- `" if present) is used.
2. **Removing Characters**:
- From that resulting text, remove the following characters for sorting:
```
[ -_().`',:!?]
```
If two items end up with the same canonical text, their **original order** is preserved.
> [!NOTE]
> A bot will automatically check your PR for correct order.
> > You can manually fix sorting or ask a maintainer to run `/sort-check -fix` (if needed), however, this may not work if the bot has no access to the _head_ repository.
## Templated Content
Some files in this repository are automatically generated from other source files. For example, `CLIENTS.md` is generated from `assets/clients/clients.yaml`.
- **Do not edit these generated files directly.** Instead, edit the original source files from which they’re generated.
- Each generated file clearly indicates that it is automatically generated.
- Once you push your changes to the source file, the project’s checks will automatically regenerate the corresponding output file.
> [!NOTE]
> For pull requests, a preview of the updated generated files will appear in the **Checks** tab of the pull request.
> 
## Updating your PR
A lot of times, making a PR adhere to the standards above can be difficult.
If the maintainers notice anything that we'd like changed, we'll ask you to
edit your PR before we merge it. There's no need to open a new PR, just edit
the existing one. If you're not sure how to do that,
[here is a guide](https://github.com/RichardLitt/knowledge/blob/master/github/amending-a-commit-guide.md)
on the different ways you can update your PR so that we can merge it.
================================================
FILE: LICENSE
================================================
Creative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.
================================================
FILE: README.md
================================================
<!--lint disable awesome-heading awesome-toc double-link-->
<p align="center">
<img src="/assets/banner.png" />
<h1 align="center">Awesome Jellyfin</h1>
</p>
<blockquote align="center"> A List of Awesome Jellyfin Themes and Plugins</blockquote>
<p align="center">
[
<a href="#-plugins">Plugins</a> •
<a href="#%EF%B8%8F-metadata-providers">Metadata Providers</a> •
<a href="THEMES.md">Themes</a> •
<a href="CLIENTS.md">Clients</a> •
<a href="#-other">Other</a> •
<a href="#-snippets">Snippets</a> •
<a href="#-related">Related</a> •
<a href="#contribute">Contribute</a>
]
</p>
## 🧩 Plugins
<!-- sort list:plugins -->
- [Gelato](https://github.com/lostb1t/Gelato) - Replaces Jellyfin's default search with Stremio-powered results and can automatically import entire catalogs into your library through scheduled tasks.
- [HoverTrailer](https://github.com/Fovty/HoverTrailer) - Displays movie trailers on hover.
- [InPlayerEpisodePreview](https://github.com/Namo2/InPlayerEpisodePreview) - Adds an episode list to the video player.
- [intro-skipper](https://github.com/intro-skipper/intro-skipper) - Fingerprint audio to automatically detect intro and outro segments in Jellyfin.
- [jellyfin-ani-sync](https://github.com/vosmiic/jellyfin-ani-sync) - Automatically tracks and synchronizes anime watching progress between Jellyfin and [Anilist](https://anilist.co/) and other services.
- [jellyfin-editors-choice-plugin](https://github.com/lachlandcp/jellyfin-editors-choice-plugin) - Adds a Netflix-style, full-width content slider to the home page to feature selected content.
- [Jellyfin-Enhanced](https://github.com/n00bcodr/Jellyfin-Enhanced) - Adds keyboard shortcuts, subtitle styling, TMDB reviews, Jellyseerr search and request integration, and other improvements to Jellyfin.
- [jellyfin-icon-metadata](https://github.com/Druidblack/jellyfin-icon-metadata) - Adds metadata provider icons to Jellyfin.
- [Jellyfin Ignore](https://github.com/fdett/jellyfin-ignore/) - Ignore filename patterns on library scans. `🔹 Beta` `🔸 Stale`
- [Jellyfin-JavaScript-Injector](https://github.com/n00bcodr/Jellyfin-JavaScript-Injector) - Inject custom JavaScript into the Jellyfin UI without modifying index.html.
- [jellyfin-local-posters](https://github.com/NooNameR/Jellyfin.Plugin.LocalPosters/) - Automatically matches and imports local posters using TPDb and MediUX filename formats. Also supports syncing posters from Google Drive.
- [Jellyfin-MonWUI-Plugin](https://github.com/G-grbz/Jellyfin-MonWUI-Plugin) - UI enhancement toolkit for Jellyfin providing customizable sliders, hover trailers, a music player, notifications, and other interface modules.
- [jellyfin-musictags-plugin](https://github.com/jyourstone/jellyfin-musictags-plugin) - Automatically extracts audio file metadata and converts it into standard Jellyfin tags.
- [Jellyfin-Newsletter](https://github.com/Sanidhya30/Jellyfin-Newsletter) - Sends newsletters and notifications about library changes (additions, updates, deletions) via email, Discord, or Telegram.
- [Jellyfin-Newsletter-Plugin](https://github.com/Cloud9Developer/Jellyfin-Newsletter-Plugin) - Newsletters for recently added media. `🔹 Beta` `🔸 Stale`
- [jellyfin-plugin-air-times](https://github.com/apteryxxyz/jellyfin-plugin-air-times) - Provides localized series air times based on server location.
- [jellyfin-plugin-AnimeMultiSource](https://github.com/webbster64/jellyfin-plugin-AnimeMultiSource) - Aggregates anime metadata, tags, artwork, and people from multiple sources (AniList, AniDB, MAL/Jikan, TVDB, Fanart.tv) with rate limiting and persistent caching for large libraries.
- [jellyfin-plugin-animethemes](https://github.com/EusthEnoptEron/jellyfin-plugin-animethemes) - Fetches anime opening and ending themes from [AnimeThemes.moe](https://animethemes.moe/), supporting both audio and video.
- [jellyfin-plugin-auto-collections](https://github.com/KeksBombe/jellyfin-plugin-auto-collections) - Automatically creates and maintains dynamic collections based on flexible criteria.
- [jellyfin-plugin-cinemamode](https://github.com/CherryFloors/jellyfin-plugin-cinemamode) - A plugin that allows users to enable Jellyfin's Cinema Mode functionality with local trailers and pre-rolls.
- [jellyfin-plugin-collection-import](https://github.com/lostb1t/jellyfin-plugin-collection-import) - Create and sort collections by importing from external sources like *mdblist*.
- [jellyfin-plugin-collection-sections](https://github.com/IAmParadox27/jellyfin-plugin-collection-sections) - Adds additional sections to `jellyfin-plugin-home-sections` for collections and playlists.
- [jellyfin-plugin-custom-tabs](https://github.com/IAmParadox27/jellyfin-plugin-custom-tabs) - Add personalized tabs in jellyfin-web for quick access to custom content.
- [jellyfin-plugin-discontinue-watching](https://github.com/jon4hz/jellyfin-plugin-discontinue-watching) - Lets you remove items from the Continue Watching list without resetting watch progress, with optional auto-hide after inactivity.
- [jellyfin-plugin-DiscordNotifier](https://github.com/cedev-1/jellyfin-plugin-DiscordNotifier) - Send notifications of Jellyfin server events to Discord.
- [jellyfin-plugin-enigma2](https://github.com/knackebrot/jellyfin-plugin-enigma2) - Supports Vu+ & Enigma2 live TV streamers. `🔸 Stale`
- [jellyfin-plugin-GetAvatar](https://github.com/cedev-1/jellyfin-plugin-GetAvatar) - Allows users to choose an avatar from a collection of images.
- [jellyfin-plugin-home-sections](https://github.com/IAmParadox27/jellyfin-plugin-home-sections) - Allows users to customize the jellyfin-web home screen with dynamic sections like "Because You Watched" and "Latest Movies".
- [jellyfin-plugin-jellysleep](https://github.com/jon4hz/jellyfin-plugin-jellysleep) - Adds sleep timer functionality to Jellyfin.
- [Jellyfin.Plugin.JF_To_Stash_Sync](https://github.com/Druidblack/Jellyfin.Plugin.JF_To_Stash_Sync) - Synchronizes viewing activity with Stash.
- [jellyfin-plugin-languageTags](https://github.com/TheXaman/jellyfin-plugin-languageTags) - Adds language tags to media based on audio tracks using FFmpeg.
- [jellyfin-plugin-ldapauth](https://github.com/jellyfin/jellyfin-plugin-ldapauth) - Allows the use of ldap as an auth provider.
- [jellyfin-plugin-letterboxd-sync](https://github.com/Gizmo091/jellyfin-plugin-letterboxd-sync) - Automatically syncs your watched movie history with Letterboxd.
- [jellyfin-plugin-listenbrainz](https://github.com/lyarenei/jellyfin-plugin-listenbrainz) - Automatically syncs your music activity with ListenBrainz.
- [jellyfin-plugin-localrecs](https://github.com/rdpharr/jellyfin-plugin-localrecs) - Generates personalized movie and TV recommendations based on local watch history without external services required.
- [Jellyfin.Plugin.MDBList_Ratings](https://github.com/Druidblack/Jellyfin.Plugin.MDBList_Ratings) - Retrieves ratings from MDBList using TMDb IDs and integrates them into Jellyfin's rating fields, with optional UI enhancements to display ratings from multiple sources.
- [jellyfin-plugin-media-bar](https://github.com/IAmParadox27/jellyfin-plugin-media-bar) - A Featured Content Bar to show off your media collection.
- [jellyfin-plugin-media-cleaner](https://github.com/shemanaev/jellyfin-plugin-media-cleaner) - Automatically removes played media after a specified time period.
- [jellyfin-plugin-MediathekViewDL](https://github.com/CatNoir2006/jellyfin-plugin-MediathekViewDL) - Integrates MediathekViewDL into Jellyfin and allows users to search, download, and manage content.
- [jellyfin-plugin-meilisearch](https://github.com/arnesacnussem/jellyfin-plugin-meilisearch) - Enhances Jellyfin search speed and accuracy by offloading queries to a Meilisearch instance.
- [jellyfin-plugin-onepace](https://github.com/jwueller/jellyfin-plugin-onepace) - Plugin for the [One Pace](https://onepace.net) project.
- [jellyfin-plugin-pages](https://github.com/IAmParadox27/jellyfin-plugin-pages) - Enables other plugins to create custom Jellyfin pages that match the native UI.
- [jellyfin-plugin-provider-stuff](https://github.com/kamilkosek/jellyfin-plugin-provider-stuff) - Automates tagging library items with streaming provider tags, creates collections per provider.
- [jellyfin-plugin-ratings](https://github.com/K3ntas/jellyfin-plugin-ratings) - Adds user ratings, card overlays, media requests, deletion workflows, chat, and new media notifications to Jellyfin.
- [jellyfin-plugin-skin-manager](https://github.com/danieladov/jellyfin-plugin-skin-manager) - Helps you to download and install skins. `🔸 Stale`
- [jellyfin-plugin-sso](https://github.com/9p4/jellyfin-plugin-sso) - Allows users to sign in through an SSO provider. `🔹 Beta`
- [Jellyfin.Plugin.StreamLimit](https://github.com/JellyboxAD/Jellyfin.Plugin.StreamLimit) - Allows limiting the number of simultaneous streams per user.
- [jellyfin-plugin-streamyfin](https://github.com/streamyfin/jellyfin-plugin-streamyfin) - Companion plugin for Streamyfin which allows for a centralized configuration of the Streamyfin application.
- [jellyfin-plugin-TelegramNotifier](https://github.com/RomainPierre7/jellyfin-plugin-TelegramNotifier) - Receive notifications of Jellyfin server events via Telegram.
- [jellyfin-powertoys](https://github.com/lennykean/jellyfin-powertoys) - A collection of plugins to enhance Jellyfin with additional features and tools.
- [Jellyfin-Roulette](https://github.com/ztffn/Jellyfin-Roulette) - Adds a roulette feature that plays a random entry from a playlist.
- [jellyfin-rpc by *kennethsible*](https://github.com/kennethsible/jellyfin-rpc) - Displays your current Jellyfin activity directly on Discord.
- [jellyfin-rpc by *Radiicall*](https://github.com/Radiicall/jellyfin-rpc) - Displays your current Jellyfin activity directly on Discord.
- [Jellyfin-Seasonals](https://github.com/CodeDevMLH/Jellyfin-Seasonals) - A jellyfin plugin with collections of seasonal themes/animations.
- [jellyfin-smartlists-plugin](https://github.com/jyourstone/jellyfin-smartlists-plugin) - Creates dynamic collections and playlists in Jellyfin that automatically update based on customizable rules as the library changes.
- [jellyfin-transcode-nag](https://github.com/voc0der/jellyfin-transcode-nag) - Nags users when they're transcoding due to unsupported formats or codecs, while allowing bitrate-based transcoding.
- [JellyfinTweaks](https://github.com/n00bcodr/JellyfinTweaks) - Override Jellyfin settings such as *Enable Backdrops* and *Enable Theme Music* across all devices.
- [Jellyfin-Xtream-Library](https://github.com/firestaerter3/Jellyfin-Xtream-Library) - Syncs Xtream VOD and Series content to native Jellyfin libraries via STRM files, with automatic metadata lookup and Live TV support.
- [jellynext](https://github.com/luall0/jellynext) - Creates per-user virtual libraries for personalized Trakt recommendations and new seasons.
- [jellyscrub](https://github.com/nicknsy/jellyscrub) - Smooth mouse-over video scrubbing previews. `🔸 Stale`
<!--lint ignore list-item-indent awesome-list-item-->
- **NOTE:** Jellyfin 10.9 now natively supports trickplay.
- [JellySTRMprobe](https://github.com/firestaerter3/JellySTRMprobe) - Probes STRM files to extract media information (codec, resolution, duration, audio) that Jellyfin skips during library scans.
- [media-upload-plugin](https://github.com/grandguyjs/media-upload-plugin) - Media-manager that provides uploads, bulk downloads from URLs, and directory browsing within Jellyfin.
- [MyAnimeSync](https://github.com/iankiller77/MyAnimeSync) - Automatically synchronizes anime watching progress between Jellyfin and MyAnimeList.
- [playlist-generator](https://github.com/Eeeeelias/playlist-generator) - Create personal playlists based on your listening history.
- [Plexyfin](https://github.com/cleverdevil/plexyfin) - Automatically synchronize artwork and collections from your Plex Media Server to Jellyfin. Useful for users of Kometa.
- [Shokofin](https://github.com/ShokoAnime/Shokofin) - A Jellyfin plugin to integrate [Jellyfin](https://jellyfin.org/docs/) with [Shoko Server](https://shokoanime.com/downloads/shoko-server/).
- [Static Assets](https://github.com/cleverdevil/jelly-static-assets) - Upload and serve static assets such as CSS, JavaScript, and images directly from Jellyfin.
- [TeleJelly](https://github.com/hexxone/TeleJelly) - Allows users to sign in through the [Telegram Login Widget](https://core.telegram.org/widgets/login).
- [TheDwarfsHammer](https://github.com/Kamoba/jellyfin-plugin-thedwarfshammer) - Enhanced collection management and content discovery for Jellyfin.
#### 🏷️ Metadata Providers
<!-- sort list:metadata-providers -->
- [jellyfin-plugin-hikka](https://github.com/HotMasya/jellyfin-plugin-hikka) - Metadata and images for anime and manga from the Hikka website.
- [jellyfin-plugin-itunes](https://github.com/lyarenei/jellyfin-plugin-itunes) - A Jellyfin plugin that fetches album and artist metadata from Apple Music.
- [jellyfin-plugin-kinopoisk](https://github.com/LinFor/jellyfin-plugin-kinopoisk) - Metadata provider for [Kinopoisk](https://www.kinopoisk.ru/).
- [jellyfin-plugin-myanimelist](https://github.com/ryandash/jellyfin-plugin-myanimelist) - Provides MyAnimeList metadata for anime.
- [Jellyfin Plugin PhoenixAdult](https://github.com/DirtyRacer1337/Jellyfin.Plugin.PhoenixAdult) - Metadata provider helps fill Jellyfin/Emby with information for your adult videos by pulling from the original site.
- [jellyfin-plugin-shikimori](https://github.com/te9c/jellyfin-plugin-shikimori) - Metadata provider for shikimori.one.
- [Jellyfin Plugin Stash](https://github.com/DirtyRacer1337/Jellyfin.Plugin.Stash) - Metadata provider for [Stash](https://github.com/stashapp/stash).
- [Jellyfin Plugin ThePornDB](https://github.com/ThePornDatabase/Jellyfin.Plugin.ThePornDB) - Metadata provider for ThePornDB.
- [jellyfin-youtube-metadata-plugin](https://github.com/ankenyr/jellyfin-youtube-metadata-plugin) - YouTube Metadata Plugin.
## 🖌️ Themes
👉 Moved themes to [THEMES.md](THEMES.md)
## 📺 Clients
👉 Moved clients to [CLIENTS.md](CLIENTS.md)
## 👾 Other
<!-- sort list:other -->
- [Anchorr](https://github.com/openVESSL/Anchorr) - Discord bot for Jellyfin media requests and new content notifications.
- [aphrodite](https://github.com/jackkerouac/aphrodite) - Enhances media library posters with quality indicators like resolution, audio codec, and review ratings. `🔸 Stale`
- [AudioBookRequest](https://github.com/markbeep/AudioBookRequest) - A request management tool for audiobooks on Plex, Jellyfin, and Audiobookshelf.
- [AudioMuse-AI](https://github.com/NeptuneHub/AudioMuse-AI) - Sonic analysis and AI-powered clustering to create smart, tempo and mood-based playlists using the Jellyfin API.
- [autopulse](https://github.com/dan-online/autopulse) - A lightweight automation service that updates Plex, Jellyfin, and Emby libraries based on notifications from media organizers like Sonarr and Radarr.
- [autoscan](https://github.com/Cloudbox/autoscan) - Replaces the default Plex and Emby behaviour for picking up changes on the file system. `🔸 Stale`
- [bazarr-jellyfin](https://github.com/enoch85/bazarr-jellyfin) - Search and download subtitles directly from Jellyfin's native subtitle UI using your Bazarr instance.
- [CineSync](https://github.com/sureshfizzy/CineSync) - A Python based library management tool designed to organize debrid & local libraries without the support of Sonarr & Radarr.
- [content-recommender](https://github.com/jeffersoncgo/content-recommender) - Webpage that suggests Movies or Shows from your library based on your watch history.
- [CoverMaker](https://github.com/jeffersoncgo/CoverMaker) - Allows designing and generating custom cover images for your media collections.
- [declarative-jellyfin](https://github.com/Sveske-Juice/declarative-jellyfin) - Declarative configuration of your Jellyfin server on NixOS. `🔹 Beta`
- [embyToLocalPlayer](https://github.com/kjtsune/embyToLocalPlayer) - Lets you watch videos from Jellyfin using a local video player (like VLC and MPV) and syncs watch progress back.
- [Fixarr](https://github.com/sachinsenal0x64/FIXARR) - Media Renamer and Backup tool. (Backup still WIP) `🔹 Beta`
- [jelly-clipper](https://github.com/arnolicious/jelly-clipper) - A web application for creating, sharing, and managing video clips from your Jellyfin media library. `🔹 Beta`
- [Jellycord](https://github.com/SiddheshDongare/Jellycord) - A Discord companion bot for managing your JFA-GO instance.
- [Jellyfin-Auto-Collections](https://github.com/ghomasHudson/Jellyfin-Auto-Collections) - A tool to automatically make and update collections based on internet lists such as IMDb and letterboxd.
- [Jellyfin-Cover-Maker](https://github.com/KartoffelChipss/Jellyfin-Cover-Maker) - A website to easily create consistent covers and posters for your Jellyfin libraries.
- [JellyfinEasyMetadataManager](https://github.com/CesarBianchi/JellyfinEasyMetadataManager) - A desktop tool for managing and editing metadata in Jellyfin libraries.
- [Jellyfin-Image-Exporter](https://github.com/Kurotaku-sama/Jellyfin-Image-Exporter) - A script to export images (posters, banners, thumbnails) from your Jellyfin media server's metadata library.
- [jellyfinmanager](https://github.com/Forceu/jellyfinmanager) - A command-line tool for managing Jellyfin watched status, featuring backup/restore capabilities and missing episode detection using TVDB.
- [jellyfin-mods](https://github.com/BobHasNoSoul/jellyfin-mods) - A collection of things you can do to personalize Jellyfin.
- [Jellyfin Notification System](https://github.com/Fahmula/jellyfin-telegram-notifier) - Sends Telegram notifications with media images whenever a new movie, series, season, or episode is added to Jellyfin. `🔸 Stale`
- [jellyfin-on-macos](https://github.com/Digital-Shane/jellyfin-on-macos) - Guide for hosting Jellyfin on macOS with dynamic DNS, geo-filtering, and monitoring dashboards.
- [jellyfin-poster-hrd-logo](https://github.com/Druidblack/jellyfin-poster-hrd-logo/tree/main) - Automatically downloads covers for HDR movies from TMDb and applies an HDR logo in the top-right corner.
- [jellyfin_ratings](https://github.com/Druidblack/jellyfin_ratings) - Replaces Jellyfin ratings with ratings from various sources (IMDb, Trakt, Imdb, Letterboxd, etc.).
- [jellyfin-rewind](https://github.com/Chaphasilor/jellyfin-rewind) - A *Spotify Wrapped*-like app made for people who use Jellyfin for listening to music.
- [Jellyfin Segment Editor](https://github.com/intro-skipper/segment-editor) - Manage Jellyfin Media Segment positions.
- [jellyfin-telegram-channel-sync](https://github.com/GeiserX/jellyfin-telegram-channel-sync) - Syncs Jellyfin user access with Telegram channel membership, automatically disabling accounts when members leave.
- [jellyfin-theme-music-manager](https://github.com/akhilmulpurii/jellyfin-theme-music-manager) - A web application for managing theme songs and backdrop videos for your Jellyfin media library.
- [jellyfin-tools](https://github.com/eebette/jellyfin-tools) - This library is to generate images with Jellyfin-like styling (shadow overlay and library title text) from source images.
- [Jellyfin Update Poster](https://github.com/Iceshadow1404/JellyfinUpdatePoster) - Handles ZIP files containing multiple cover images from [ThePosterDB](https://theposterdb.com/) and [MediUX](https://mediux.pro). Set Downloader for [MediUX](https://mediux.pro).
- [jellyfin-updoot](https://github.com/BobHasNoSoul/jellyfin-updoot) - Adds thumbs-up recommendations, per-item comments, and a "recommended by users" page.
- [jellyfin-watch-updater](https://github.com/Simon-Eklundh/jellyfin-watch-updater) - Updates `lastPlayedDate` for watched items when clients fail to set it, enabling tools such as media cleanup plugins to correctly detect watched media.
- [jellyhub](https://github.com/Zigl3ur/jellyhub) - A web app that indexes media from multiple Jellyfin servers into a single searchable hub, letting you see which server hosts the content you're looking for.
- [Jellyman](https://github.com/Smiley-McSmiles/jellyman) - A CLI Program for installing and managing Jellyfin.
- [JellyPlex-Watched](https://github.com/luigi311/JellyPlex-Watched) - Syncs watch history between Jellyfin, Plex, and Emby Servers.
- [jellyplist](https://github.com/kamilkosek/jellyplist) - Utility for syncing Spotify playlists to Jellyfin. `🔹 Beta`
- [JellyRoller](https://github.com/LSchallot/JellyRoller) - A CLI Jellyfin Controller. `🔹 Beta`
- [JellySearch](https://gitlab.com/DomiStyle/jellysearch) - A fast full-text search proxy for Jellyfin using Meilisearch.
- [jellyseerr](https://github.com/Fallenbagel/jellyseerr) - A request management and media discovery tool.
- [Jellystat](https://github.com/CyferShepard/Jellystat) - A free and open source Statistics App for Jellyfin.
- [Jellyswarrm](https://github.com/LLukas22/Jellyswarrm) - Reverse proxy that lets you combine multiple Jellyfin servers into one virtual instance.
- [jellysweep](https://github.com/jon4hz/jellysweep) - A smart cleanup tool for your Jellyfin media server. It automatically removes old, unwatched movies and TV shows by analyzing your viewing history and user requests.
- [jellytools](https://github.com/cleverdevil/jellytools) - A CLI tool for synchronizing artwork and collections to Jellyfin from Plex and to generate and embed customizable animated library card videos in the Jellyfin UI.
- [jelly-watch-wise](https://github.com/Joker-KP/jelly-watch-wise) - A standalone app that monitors and enforces Jellyfin watch time limits per user, with API integration and a simple GUI.
- [jfa-go](https://github.com/hrfee/jfa-go) - User- / Invite-Management system for Jellyfin.
- [jf-avatars](https://github.com/kalibrado/jf-avatars) - Allows users to select avatars from an image gallery.
- [KefinTweaks](https://github.com/ranaldsgift/KefinTweaks) - A collection of enhancements and customizations.
- [List-Sync](https://github.com/Woahai321/list-sync) - Automatically import movies and TV shows from IMDB or Trakt lists into [Jellyseerr](https://github.com/Fallenbagel/jellyseerr). `🔹 Beta`
- [mnamer](https://github.com/jkwill87/mnamer) - Highly customizable tool to automatically rename all media files. `🔸 Stale`
- [Multi-User Media Cleaner](https://github.com/terrelsa13/MUMC) - Query and delete unwanted media content from your Jellyfin server.
- [MusicBrainz-UserScripts](https://github.com/Druidblack/MusicBrainz-UserScripts) - One-click importing of album from Jellyfin into MusicBrainz.
- [OpenSubtitlesDownload](https://github.com/emericg/OpenSubtitlesDownload) - Automatically or manually download subtitles using CLI/Gnome/KDE.
- [pixelfin](https://github.com/nothing2obvi/pixelfin) - Lets you quickly see which image types are present, missing, or low resolution in your Jellyfin libraries. You can also save images in embedded HTML files or ZIP archives.
- [Playlifin](https://gitlab.com/Krafting/playlifin-gtk) - Converts YouTube Music playlists to Jellyfin playlists.
- [Posterizarr](https://github.com/fscorrupt/Posterizarr) - Automates the creation of high-quality posters, backgrounds, and title cards for Plex, Jellyfin, and Emby with customizable overlays and direct uploads.
- [PPJF](https://github.com/Damocles-fr/PPJF) - Allows launching PotPlayer from Jellyfin Web.
- [reiverr](https://github.com/aleksilassila/reiverr) - Combined interface for JF, TMDB, Radarr and Sonarr. `🔹 Beta`
- [Samsung-Jellyfin-Installer](https://github.com/Jellyfin2Samsung/Samsung-Jellyfin-Installer) - Cross-platform tool that helps you install Jellyfin on Samsung Smart TVs running Tizen OS.
- [scenepeek-android](https://github.com/Divinelink/scenepeek-android) - An Android app that provides detailed movie and TV show information with TMDB and Jellyseerr integration.
- [speedrr](https://github.com/itschasa/speedrr) - Change your torrent client's upload speed dynamically, on certain events such as when a Plex/Jellyfin stream starts.
- [Squishy](https://github.com/cleverdevil/squishy) - Transcode and download your Jellyfin media with fully customizable presets and hardware acceleration.
- [streamystats](https://github.com/fredrikburmester/streamystats) - Statistics service for Jellyfin, providing analytics and data visualization.
- [subgen](https://github.com/McCloudS/subgen) - Autogenerate subtitles using OpenAI Whisper Model via Jellyfin.
- [SuggestArr](https://github.com/giuseppe99barchetta/SuggestArr) - Automatically request suggested movies and TV shows to [Jellyseerr](https://github.com/Fallenbagel/jellyseerr) based on recently watched.
- [swiparr](https://github.com/m3sserstudi0s/swiparr) - Swipe through your library, match with friends in a session, and find something everyone wants to watch.
- [TitleCardMaker](https://github.com/CollinHeist/TitleCardMaker) - Automated title card maker for Plex, Jellyfin, and Emby.
- [trailarr](https://github.com/nandyalu/trailarr) - Manages trailer downloads for your Radarr and Sonarr libraries.
- [trailerfin](https://github.com/Pukabyte/trailerfin) - Automatically retrieves and creates STRM links to IMDb trailers and places them in the backdrops folder to view trailers on the details page.
- [tunarr](https://github.com/chrisbenincasa/tunarr) - Create custom live TV channels from your Plex or Jellyfin library with a web UI and IPTV support.
- [Universal Plugin Repo](https://github.com/0belous/universal-plugin-repo) - Consolidates many plugin repositories to create a universal catalogue.
- [whatseerr](https://github.com/sufxgit/whatseerr) - WhatsApp bot for Seerr that allows users to search and request media via WhatsApp messages.
- [wizarr](https://github.com/Wizarrrr/wizarr) - Advanced user invitation and management system.
- [xsrv.jellyfin](https://github.com/nodiscc/xsrv/tree/master/roles/jellyfin) - Ansible role to deploy and configure Jellyfin.
- [ytdlp2STRM](https://github.com/fe80Grau/ytdlp2STRM) - Streams YouTube, Twitch and more via yt-dlp to Jellyfin.
- [ytdl-sub](https://github.com/jmbannon/ytdl-sub) - Automate downloading and metadata generation with YoutubeDL.
#### 📜 Snippets
<!--lint ignore awesome-list-item-->
- [snippets/language-overlay](snippets/language-overlay) - A script to add flags to movie posters.
## 🌌 Related
This section includes software, guides and tools that are not *specifically* designed to work with Jellyfin, but can be useful for tasks related to media management or to enhance Jellyfin's functionality.
<!-- sort list:related -->
- [calibre2jellyfin](https://github.com/shawn61cp/calibre2jellyfin) - Python script to construct a Jellyfin ebook library from a Calibre library.
- [Cloud Seeder](https://github.com/ipv6rslimited/cloudseeder) - A 1-click installer and maintainer for Jellyfin on Windows, Mac and Linux.
- [Dispatcharr](https://github.com/Dispatcharr/Dispatcharr) - Self-hosted M3U proxy with IPTV, EPG, and VOD management support.
- [ErsatzTV](https://github.com/ErsatzTV/ErsatzTV) - Stream custom live channels using your own media. `🔹 Beta`
- [Explo](https://github.com/LumePart/Explo) - Automated music discovery tool that recommended tracks based on your listening history.
- [locatarr](https://github.com/Locatarr/Locatarr) - A list of tools used to automate the downloading and organization of media files.
- [radarr](https://github.com/Radarr/Radarr) - Automates downloading & management of movies.
- [sonarr](https://github.com/Sonarr/Sonarr) - Automates downloading & management of TV series.
- [tdarr](https://github.com/HaveAGitGat/Tdarr) - Distributed transcode automation + Library analytics + Video health checking. `🔺 Paid`
- [recyclarr](https://github.com/recyclarr/recyclarr) - Automatically sync TRaSH guides to Sonarr and Radarr instances.
- [MediaTracker](https://github.com/bonukai/MediaTracker) - Media tracker and user rating platform with [Jellyfin integration](https://github.com/bonukai/jellyfin-plugin-mediatracker).
- [Movary](https://github.com/leepeuker/movary) - Media tracker and user rating platform. `🔹 Beta`
- [Multi Scrobbler](https://github.com/foxxmd/multi-scrobbler) - Scrobbles music from many sources to many clients. `🔹 Beta`
- [Quasarr](https://github.com/rix1337/Quasarr) - Emulates a usenet indexer and download client to allow direct downloads with sonarr/radarr.
- [rffmpeg](https://github.com/joshuaboniface/rffmpeg) - A remote FFmpeg wrapper, commonly used for transcoding media on more capable machines.
- [Threadfin](https://github.com/Threadfin/Threadfin) - M3U proxy for Jellyfin (Based on xTeVe).
- [TRaSH Guides](https://trash-guides.info/) - Easy-to-understand guides for Sonarr, Radarr, and Bazarr, along with related tools.
- [watchstate](https://github.com/ArabCoders/watchstate) - Sync play state between different media servers.
## Communities
This section contains links to communities which focus on Jellyfin or related topics.
<!-- list:communities -->
- [Jellyfin Discord](https://discord.gg/zHBxVSXdBV) - The official Jellyfin Discord server. `🔰 Official`
- [Jellyfin Forum](https://forum.jellyfin.org/) - The official Jellyfin forum. `🔰 Official`
- [Jellyfin Matrix](https://matrix.to/#/#jellyfinorg:matrix.org) - The official Jellyfin Matrix server. `🔰 Official`
- [r/Jellyfin](https://www.reddit.com/r/jellyfin/) - The official Jellyfin subreddit. `🔰 Official`
- [r/JellyfinCommunity](https://www.reddit.com/r/JellyfinCommunity/) - An independent, community-run subreddit.
- [JellyfinCommunity Discord](https://discord.gg/MTM8dkjr93) - An independent, community-run Discord server.
## Contribute
Contributions welcome! But please read the [contribution guidelines](CONTRIBUTING.md) first.
You can also [create a new issue](https://github.com/awesome-jellyfin/awesome-jellyfin/issues/new).
================================================
FILE: THEMES.md
================================================
<p align="center">
<img src="assets/banner.png" />
<h1 align="center"><a href="https://github.com/awesome-jellyfin/awesome-jellyfin">Awesome Jellyfin</a> > Themes</h1>
</p>
The preview / screenshots were taken directly from the linked repositories.
If an image is no longer available or out of date, please create an [issue](https://github.com/awesome-jellyfin/awesome-jellyfin/issues) or a [PR](https://github.com/awesome-jellyfin/awesome-jellyfin/edit/main/THEMES.md).
## [better-jellyfin-ui](https://github.com/tromoSM/better-jellyfin-ui) by tromoSM
A refined and modern UI enhancement for Jellyfin focused on improved layout, animations, and iOS design. [` 🔵 Get this Theme `](https://github.com/tromoSM/better-jellyfin-ui)
<table>
<tr>
<td>
<img src="https://github.com/tromoSM/better-jellyfin-ui/blob/main/Assets/desktop-main.png?raw=true" />
</td>
<td>
<img src="https://github.com/tromoSM/better-jellyfin-ui/blob/main/Assets/desktop-library-i.png?raw=true" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/tromoSM/better-jellyfin-ui/blob/main/Assets/desktop-or.png?raw=true" />
</td>
<td>
<img src="https://github.com/tromoSM/better-jellyfin-ui/blob/main/Assets/desktop-player.png?raw=true" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/tromoSM/better-jellyfin-ui/blob/main/Assets/desktop-admin.png?raw=true" />
</td>
</tr>
</table>
---
## [catppuccin](https://github.com/catppuccin/jellyfin) by catppuccin
[` 🔵 Get this Theme `](https://github.com/catppuccin/jellyfin)
<table>
<tr>
<td>
<img src="https://github.com/catppuccin/jellyfin/raw/main/assets/latte.webp" />
</td>
<td>
<img src="https://github.com/catppuccin/jellyfin/raw/main/assets/frappe.webp" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/catppuccin/jellyfin/raw/main/assets/macchiato.webp" />
</td>
<td>
<img src="https://github.com/catppuccin/jellyfin/raw/main/assets/mocha.webp" />
</td>
</tr>
</table>
---
## [ElegantFin](https://github.com/lscambo13/ElegantFin) by lscambo13
[` 🔵 Get this Theme `](https://github.com/lscambo13/ElegantFin)
<table>
<tr>
<td>
<img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/4.%20Movie%20Page.webp?raw=true" />
</td>
<td>
<img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/1.%20Homepage.webp?raw=true" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/3.%20Sidebar.webp?raw=true" />
</td>
<td>
<img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/9.%20Web%20Player.webp?raw=true" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/20.%20Live%20TV%20Guide.webp?raw=true" />
</td>
<td>
<img src="https://github.com/lscambo13/ElegantFin/blob/main/Previews/previews-v25.08.02/optimized/desktop/12.%20Movie%20Details.webp?raw=true" />
</td>
</tr>
</table>
---
## [evergarden](https://github.com/everviolet/jellyfin) by everviolet
[` 🔵 Get this Theme `](https://github.com/everviolet/jellyfin)
<table>
<tr>
<td>
<img src="https://github.com/everviolet/jellyfin/raw/main/assets/summer.webp" />
</td>
<td>
<img src="https://github.com/everviolet/jellyfin/raw/main/assets/spring.webp" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/everviolet/jellyfin/raw/main/assets/fall.webp" />
</td>
<td>
<img src="https://github.com/everviolet/jellyfin/raw/main/assets/winter.webp" />
</td>
</tr>
</table>
---
## [finimalism](https://github.com/tedhinklater/finimalism) by tedhinklater
[` 🔵 Get this Theme `](https://github.com/tedhinklater/finimalism)
<table>
<tr>
<td>
<img src="https://github.com/user-attachments/assets/caaa8d3a-c3f1-46d7-8a51-4ba6f08c047f" />
</td>
<td>
<img src="https://github.com/user-attachments/assets/b2c1e0ca-0304-47d6-b4cc-3f77ac83f806" />
</td>
</tr>
</table>
---
## [Flow](https://github.com/LitCastVlog/Flow) by LitCastVlog
[` 🔵 Get this Theme `](https://github.com/LitCastVlog/Flow)
<table>
<tr>
<td>
<img src="https://github.com/LitCastVlog/Flow/raw/main/images/screen.jpg" />
</td>
<td>
<img src="https://github.com/LitCastVlog/Flow/raw/main/images/details.png" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/LitCastVlog/Flow/raw/main/images/episodegrid-outline.gif" />
</td>
<td>
<img src="https://github.com/LitCastVlog/Flow/raw/main/images/blue.png" />
</td>
</tr>
</table>
---
## [Finity](https://github.com/prism2001/finity) by prism2001
[` 🔵 Get this Theme `](https://github.com/prism2001/finity)
<table>
<tr>
<td>
<img src="https://github.com/prism2001/finity/raw/main/screenshots/home_featured.png" />
</td>
<td>
<img src="https://github.com/prism2001/finity/raw/main/screenshots/home_drawers.png" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/prism2001/finity/raw/main/screenshots/show_season.png" />
</td>
<td>
<img src="https://github.com/prism2001/finity/raw/main/screenshots/movie.png" />
</td>
</tr>
</table>
---
## [infinitv](https://github.com/buesche87/infinitv) by buesche87
[` 🔵 Get this Theme `](https://github.com/buesche87/infinitv)
<table>
<tr>
<td>
<img src="https://github.com/user-attachments/assets/8e61244a-38e7-49f2-b6c6-5cbdd2dc03a8" />
</td>
<td>
<img src="https://github.com/user-attachments/assets/0bc4337c-ce95-45d1-985a-081cfdd15388" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/user-attachments/assets/dbaff509-a708-4e26-9a0b-52cc804288d0" />
</td>
<td>
<img src="https://github.com/user-attachments/assets/2d548971-aa17-4f6a-9f2c-3e327a203f3a" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/user-attachments/assets/bd4afc57-9031-4226-b650-8626dfafcdcd" />
</td>
<td>
<img src="https://github.com/user-attachments/assets/78d2378b-17e1-4a13-895c-9352a6d293b8" />
</td>
</tr>
</table>
---
## [Jamfin](https://github.com/JamsRepos/Jamfin) by JamsRepos
Bringing a modern, sleek glassmorphism design to Jellyfin, enhancing your media server's aesthetics. [` 🔵 Get this Theme `](https://github.com/JamsRepos/Jamfin)
<table>
<tr>
<td>
<img src="https://github.com/JamsRepos/Jamfin/raw/main/assets/screenshots/home.jpg" />
</td>
<td>
<img src="https://github.com/JamsRepos/Jamfin/raw/main/assets/screenshots/details.jpg" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/JamsRepos/Jamfin/raw/main/assets/screenshots/library.jpg" />
</td>
<td>
<img src="https://github.com/JamsRepos/Jamfin/raw/main/assets/screenshots/admin.jpg" />
</td>
</tr>
</table>
---
## [JellySkin](https://github.com/prayag17/JellySkin) by prayag17
Vibrante & Minimal theme using custom icons and more [` 🔵 Get this Theme `](https://github.com/prayag17/JellySkin)
<table>
<tr>
<td>
<img src="https://user-images.githubusercontent.com/55829513/200134094-9bafba9d-4cfa-48c3-bbf4-e01bc21ecdd1.png" />
</td>
<td>
<img src="https://user-images.githubusercontent.com/55829513/200134098-6463a6e7-95bb-4af6-a451-b6ac5ef7abad.png" />
</td>
</tr>
<tr>
<td>
<img src="https://user-images.githubusercontent.com/55829513/200133209-413d6e6c-3569-4aaf-9db7-f576c141f519.png" />
</td>
<td>
<img src="https://user-images.githubusercontent.com/55829513/200133240-075f604d-ae7f-48cb-9a42-445d8f3ef427.png" />
</td>
</tr>
<tr>
<td>
<img src="https://user-images.githubusercontent.com/55829513/200133258-4eabfc3d-475f-4b42-a496-bc2de60c11a5.png" />
</td>
<td>
<img src="https://user-images.githubusercontent.com/55829513/200133302-5d7e7ac1-201b-4cb4-a839-ee53c5c6a6f2.png" />
</td>
</tr>
</table>
---
## [Jellyfin Better Styles](https://github.com/Tetrax-10/jellyfin-better-styles) by Tetrax-10
This theme preserves the original aesthetics while upgrading layout and animations for a more polished look and feel.
Better Movie/TV page layout, improved card animation on hover. [` 🔵 Get this Theme `](https://github.com/Tetrax-10/jellyfin-better-styles)
<table>
<tr>
<td>
<img src="https://raw.githubusercontent.com/Tetrax-10/jellyfin-better-styles/main/assets/movie-tv-page.png" />
</td>
<td>
<img src="https://raw.githubusercontent.com/Tetrax-10/jellyfin-better-styles/main/assets/cards.gif" />
</td>
</tr>
</table>
---
## [NeutralFin](https://github.com/KartoffelChipss/NeutralFin) by KartoffelChipss
NeutralFin is a custom Jellyfin theme based on [lscambo13's ElegantFin](https://github.com/lscambo13/ElegantFin), featuring a sleek black and grey color scheme for a more neutral and modern look. [` 🔵 Get this Theme `](https://github.com/KartoffelChipss/NeutralFin)
<table>
<tr>
<td>
<img src="https://github.com/KartoffelChipss/NeutralFin/raw/main/assets/neutralfin-movie2.webp" />
</td>
<td>
<img src="https://github.com/KartoffelChipss/NeutralFin/raw/main/assets/neutralfin-home.webp" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/KartoffelChipss/NeutralFin/raw/main/assets/neutralfin-movies.webp" />
</td>
<td>
<img src="https://github.com/KartoffelChipss/NeutralFin/raw/main/assets/neutralfin-movie.webp" />
</td>
</tr>
</table>
---
## [Ultrachromic](https://github.com/CTalvio/Ultrachromic) by CTalvio
The final form, the true evolution of the chromic theme saga [` 🔵 Get this Theme `](https://github.com/CTalvio/Ultrachromic)
> **Note**: There are several variations of the theme, for a more detailed overview, see the [Ultrachromic README](https://github.com/CTalvio/Ultrachromic#readme).
<table>
<tr>
<td>
<img src="https://user-images.githubusercontent.com/4365015/127774204-03957527-7178-4ea2-8674-d83fe6a97d1c.png" />
</td>
<td>
<img src="https://user-images.githubusercontent.com/4365015/127768733-c86aee2c-3bff-4b78-be54-003823d60276.png" />
</td>
</tr>
<tr>
<td>
<img src="https://user-images.githubusercontent.com/4365015/127768970-e827c7e4-f4ce-4229-a68a-b2e87a723ef0.png" />
</td>
<td>
<img src="https://user-images.githubusercontent.com/4365015/127778994-ddee8235-6bb2-42ae-a8b1-f9023dc69398.png" />
</td>
</tr>
</table>
---
## [scyfin](https://github.com/loof2736/scyfin) by loof2736
Custom CSS theme for Jellyfin with support for backdrops and themes [` 🔵 Get this Theme `](https://github.com/loof2736/scyfin)
<table>
<tr>
<td>
<img src="https://github.com/loof2736/scyfin/raw/main/images/homepage.png" />
</td>
<td>
<img src="https://github.com/loof2736/scyfin/raw/main/images/homepage-backdrops.png" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/loof2736/scyfin/raw/main/images/details.png" />
</td>
<td>
<img src="https://github.com/loof2736/scyfin/raw/main/images/details-backdrops.png" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/loof2736/scyfin/raw/main/images/dashboard.png" />
</td>
<td>
<img src="https://github.com/loof2736/scyfin/raw/main/images/login.png" />
</td>
</tr>
</table>
<table align="center">
<tr>
<td>
<img src="https://github.com/loof2736/scyfin/raw/main/images/seafoam.png" />
</td>
<td>
<img src="https://github.com/loof2736/scyfin/raw/main/images/coral.png" />
</td>
<td>
<img src="https://github.com/loof2736/scyfin/raw/main/images/snow.png" />
</td>
</tr>
</table>
---
## [ZestyTheme](https://github.com/stpnwf/ZestyTheme/) by stpnwf
A minimal and elegant theme for Jellyfin [` 🔵 Get this Theme `](https://github.com/stpnwf/ZestyTheme/)
<table>
<tr>
<td>
<img src="https://github.com/stpnwf/ZestyTheme/blob/main/images/home.jpg" />
</td>
<td>
<img src="https://github.com/stpnwf/ZestyTheme/raw/main/images/nice-guys.jpg" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/stpnwf/ZestyTheme/blob/main/images/avatar.jpg" />
</td>
<td>
<img src="https://github.com/stpnwf/ZestyTheme/blob/main/images/player.jpg" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/stpnwf/ZestyTheme/blob/main/images/login.jpg" />
</td>
<td>
<img src="https://github.com/stpnwf/ZestyTheme/blob/main/images/phone.jpg" />
</td>
</tr>
</table>
---
## [zombie-release](https://github.com/MakD/zombie-release) by MakD
A theme for Jellyfin 10.9.x combining the best from the Public Themes [` 🔵 Get this Theme `](https://github.com/MakD/zombie-release)
<table>
<tr>
<td>
<img src="https://github.com/MakD/zombie-release/blob/main/img/desktop/login.png" />
</td>
<td>
<img src="https://github.com/MakD/zombie-release/blob/main/img/desktop/homepage.png?raw=true" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/MakD/zombie-release/blob/main/img/desktop/detail.png?raw=true" />
</td>
<td>
<img src="https://github.com/MakD/zombie-release/blob/main/img/desktop/sidebar.png?raw=true" />
</td>
</tr>
<tr>
<td>
<img src="https://github.com/MakD/zombie-release/blob/main/img/desktop/tv-series.png?raw=true" />
</td>
<td>
<img src="https://github.com/MakD/zombie-release/blob/main/img/desktop/seasonpage.png?raw=true" />
</td>
</tr>
</table>
---
<!--lint ignore unordered-list-marker-style-->
* Stale / Inactive / May not work anymore ` 📅 `
---
<p align="center">
<strong>
👉 Back to <a href="https://github.com/awesome-jellyfin/awesome-jellyfin">awesome-jellyfin/awesome-jellyfin</a>
</strong>
</p>
================================================
FILE: assets/DateCheck.sh
================================================
#!/bin/bash
# Check if a GitHub API token is provided
if [ "$#" -ne 2 ] || [ "$1" != "-api" ]; then
echo -e "${RED}Usage:>${NOCOLOR} $0 -api <github-api-token>"
exit 1
fi
API_TOKEN=$2
API_HEADER="Authorization: token $API_TOKEN"
README_PATH="../README.md"
SIX_MONTHS=$(date -d "6 months ago" +%s)
PROPOSED_CHANGES=()
# Color codes for console output
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NOCOLOR='\033[0m'
# Check if README.md exists
if [ ! -f "$README_PATH" ]; then
echo -e "${RED}README.md not found in path:${NOCOLOR} $README_PATH"
exit 1
fi
# Parse README.md and collect information
while IFS= read -r line; do
original_text=$(echo "$line" | sed -E 's/^- \[([^]]+)\].*/\1/')
text=$(echo "$original_text" | sed -E 's/ `[^`]+`//g') # Remove existing indicators
url=$(echo "$line" | sed -E 's/.*\]\(([^)]+)\).*/\1/')
if [[ $url == https://github.com* ]]; then
repo_path=$(echo $url | cut -d/ -f4-5)
response=$(curl -s -H "$API_HEADER" "https://api.github.com/repos/$repo_path")
# Fetch additional details for forked repositories
is_fork=$(echo $response | grep '"fork": true')
if [ ! -z "$is_fork" ]; then
parent_repo=$(echo $response | grep '"parent":' | grep -o '"full_name": "[^"]*"' | cut -d '"' -f 4)
if [ ! -z "$parent_repo" ]; then
parent_response=$(curl -s -H "$API_HEADER" "https://api.github.com/repos/$parent_repo")
response=$parent_response
fi
fi
# Get the latest commit date
commits_url=$(echo $response | grep '"commits_url":' | sed -E 's/.*"commits_url": "([^"]+)".*/\1/')
commits_url="${commits_url/\{\/sha\}/}"
latest_commit=$(curl -s -H "$API_HEADER" "${commits_url}?per_page=1")
last_commit_date=$(echo $latest_commit | grep '"date":' | head -1 | sed -E 's/.*"date": "([^"]+)".*/\1/' | cut -c 1-10)
last_commit_sec=$(date -d "$last_commit_date" +%s)
# Compare with six months ago
if [[ $last_commit_sec -lt $SIX_MONTHS && ! $original_text == *📅* ]]; then
PROPOSED_CHANGES+=("$original_text - Date: $last_commit_date - URL: $url")
fi
fi
done < <(grep '^-\ \[' "$README_PATH")
# Display proposed changes separately
echo -e "${YELLOW}Proposed Changes:${NOCOLOR}"
if [ ${#PROPOSED_CHANGES[@]} -eq 0 ]; then
echo -e "${GREEN}No changes required.${NOCOLOR}"
else
for change in "${PROPOSED_CHANGES[@]}"; do
echo "$change"
done
# Ask for user confirmation
echo -e "${YELLOW}Would you like to apply these changes?${NOCOLOR} (y/n)"
read -r user_input
if [[ $user_input == "y" ]]; then
# Apply the changes
for change in "${PROPOSED_CHANGES[@]}"; do
text=$(echo "$change" | sed -E 's/ - Date:.*//') # Extract text without date and URL
if ! grep -q "\[$text \`📅\`\]" "$README_PATH"; then
sed -i "s|-\ \[$text\]|- \[$text \`📅\`]|" "$README_PATH"
fi
done
echo -e "${GREEN}README.md has been updated.${NOCOLOR}"
else
echo -e "${RED}Changes were declined.${NOCOLOR}"
fi
fi
================================================
FILE: assets/clients/CLIENTS.template.md
================================================
<!--
⚠️ WARNING: DO NOT EDIT THIS FILE ⚠️
This Markdown file is auto-generated from the `assets/clients/clients.yaml` file.
Any manual changes made to this file will be overwritten the next time it is generated.
To make changes, please edit the `assets/clients/clients.yaml` file and regenerate this Markdown file.
-->
<p align="center">
<img src="assets/banner.png" />
<h1 align="center"><a href="https://github.com/awesome-jellyfin/awesome-jellyfin">Awesome Jellyfin</a> > Clients</h1>
</p>
{{ CLIENTS }}
---
> [!NOTE]
> Please note that this Markdown file is automatically generated from the [`clients.yaml`](./assets/clients/clients.yaml) file.
> **Contributions should only be made by updating the `clients.yaml` file.**
> Any updates to the `.yaml` file will result in this Markdown file being re-generated to reflect those changes.
<!--
⚠️ WARNING: DO NOT EDIT THIS FILE ⚠️
This Markdown file is auto-generated from the `assets/clients/clients.yaml` file.
Any manual changes made to this file will be overwritten the next time it is generated.
To make changes, please edit the `assets/clients/clients.yaml` file and regenerate this Markdown file.
-->
================================================
FILE: assets/clients/README.md
================================================
# Jellyfin Client YAML Configuration Format
This configuration file is used by the [Markdown generator](https://github.com/awesome-jellyfin/clients-md-generator) to produce the Clients list.
---
## 1. `clients` Section
The `clients` section lists all Jellyfin-compatible client applications, each with a set of fields describing its details.
### Client Fields
| Field | Type | Required | Description |
|---------------------|------------------------------|----------|------------------------------------------------------------------------------------------------------------------|
| **`name`** | String | **Yes** | The human-readable name of the client. |
| **`targets`** | List of strings | **Yes** | One or more environment/platform keys (e.g., `Windows`, `Android`, `iOS`). These must match target definitions in `targets`. |
| `official` | Boolean | No | Indicates whether the client is an official Jellyfin project. Used to display a special badge. Defaults to true if its `oss` URL is within the [jellyfin org](https://github.com/jellyfin/). |
| `beta` | Boolean | No | Whether the client is currently in beta. Used to display a special badge if set. |
| `website` | String | No | An alternative or official website URL for the client. If not provided, the generator uses the `oss` URL in tables. |
| **`oss`** (yaml key: `oss`) | String | No | The open-source repository URL for the client, if applicable (e.g., GitHub, GitLab, etc.). |
| `price` | **Price** (see below) | No | Indicates cost details (free, paid). Defaults to **free** if `oss` is present. |
| **`downloads`** | List of **Download items** | **Yes** | A list describing where or how to download the client. Each item has a `type` to determine the resulting Markdown link or badge. |
| `types` | List of strings | No | A list of additional categories or features that apply to this client (e.g., `Music`, `Reader`, etc.). |
#### 1.1 `price` Structure
The `price` object describes whether the client is free, paid, or both:
```yaml
price:
free: true
paid: true
```
| Field | Type | Required | Description |
|--------|---------|----------|------------------------------------------------------------------------------------------------------------|
| `free` | Boolean | No | Whether the client is free. Defaults to **true** if `oss` is present. |
| `paid` | Boolean | No | Whether there is a paid version of the client. Setting both `free` and `paid` to true indicates a freemium or optional purchase model. |
---
#### 1.2 `downloads` List
Each item in `downloads` describes a button/badge/link for where to get the client. The generator has multiple **type** handlers, each producing a specific style of link or shield badge.
Each `Download` object has a **`type`** key (required) to determine which of the generator’s “renderer” structs to use:
| `type` Value | Additional Fields | Purpose / Example Output |
|-----------------|------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|
| **`icon`** | `icon`, `url` | Renders an icon from `assets/clients/icons/<icon>.png` linked to `url`. Not typically used if you want dynamic badges like shield.io, but can embed a static icon. |
| **`text`** | `text`, `url` | Renders a simple **text link** with `[text](url)` format. |
| **`github`** | `owner`, `repo`, optional `url` | Renders a GitHub total downloads badge (``). Defaults the link to GitHub releases unless `url` is provided. |
| **`flathub`** | `package`, optional `url` | Renders a Flathub downloads badge for a specific Flatpak package. |
| **`docker`** | `user`, `repo`, optional `url` | Renders a Docker Hub pulls badge. |
| **`shield`** | `label`, `content`, `icon`, `color`, **`url`** | Builds a custom shield.io badge. All fields except `url` are optional, letting you control label text, icon, color, etc. |
| **`gitlab`** | `owner`, `repo`, optional `url` | Renders a GitLab badge that reuses the `shield` logic under the hood, with a default GitLab logo. |
| **`demo`** | **`url`** | Renders a “Demo” button shield linking to the `url`. |
| **`app-store`** | `id`, optional `url` | Renders an App Store shield linking to `https://apps.apple.com/app/id<id>` by default. |
| **`google-play`** | `id`, optional `url` | Renders a Google Play shield linking to `https://play.google.com/store/apps/details?id=<id>` by default. |
> [!IMPORTANT]
> If a particular `type` key is unknown, the generator will fail with an error (`“unknown download type”`).
Below is an example `downloads` list for a single client:
```yaml
downloads:
- type: github
owner: jellyfin
repo: jellyfin-media-player
- type: flathub
package: com.github.iwalton3.jellyfin-media-player
```
---
### Example Client
Below is a real-world example from the `clients.yaml`:
```yaml
- name: "Swiftfin"
targets: [ iOS, AppleTV ]
oss: https://github.com/jellyfin/swiftfin
official: true
beta: true
downloads:
- type: app-store
id: "1604098728"
```
Here:
- It’s official, in beta, open-sourced on GitHub.
- It supports `iOS` and `AppleTV`.
- There’s a single download link, an App Store badge, referencing the app ID `1604098728`.
---
## 2. `targets` Section
The `targets` section defines logical groupings (e.g. Desktop, Mobile, TV, Browser) and the individual “sub-targets” that belong within each group.
**Goal:** Let the generator know how to categorize your clients by environment. When it outputs the final Markdown, it will list clients under these group headings.
```yaml
targets:
- key: Browser
display: "🌎 Browser-Based"
has:
- name: Browser
mapped: Browser
- key: Desktop
display: "💻 Desktop"
has:
- name: Windows
mapped: Windows
- name: macOS
mapped: "macOS"
- name: Linux
mapped: "Linux"
...
```
### Target Group Fields
| Field | Type | Required | Description |
|-----------|------------|----------|------------------------------------------------------------------------------------|
| `key` | String | Yes | The internal, high-level identifier (e.g., `Desktop`, `Mobile`). |
| `display` | String | Yes | The heading text shown in the output (can include emoji). |
| `has` | List of `Target` | Yes | The specific target environment entries inside this group. |
### Target Definition
Each item in `has`:
| Field | Type | Required | Description |
|----------|--------|----------|-------------------------------------------------------------------------|
| `name` | String | Yes | The exact name used under a client’s `targets` array (e.g. `Windows`). |
| `mapped` | String | Yes | A human-friendly name used in the rendered Markdown heading. |
> **Example**
> If a client has `"targets: [ Windows ]"`, the generator will place that client in the table under the `Desktop` group → `Windows` subheading, if you have:
```yaml
- key: Desktop
display: "💻 Desktop"
has:
- name: Windows
mapped: "Windows"
```
---
## 3. `types` Section
The `types` section describes extra categories (like *Music*, *Reader*, etc.) that you can assign to clients.
Each type can optionally be displayed in a separate “By Type” section. If `section: true`, the generator will build an additional heading and table for all clients matching that `types` key.
Each type can also define a `badge`—the generator uses this to add a mini badge next to the client name or in a type legend.
```yaml
types:
- key: Official
badge: "🔹"
- key: Beta
badge: "⚒️"
- key: Music
badge: "🎵"
display: "Music Client"
section: true
- key: Reader
badge: "📖"
display: "Reader"
section: true
```
### ClientType Fields
| Field | Type | Required | Description |
|-----------|--------|----------|---------------------------------------------------------------------------------------------|
| `key` | String | Yes | A unique identifier for this type (must match anything placed in a client’s `types` list). |
| `badge` | String | No | An emoji or short text snippet for the generated badge. |
| `display` | String | No | A custom heading to display. Falls back to `key` if not provided. |
| `section` | Bool | No | If `true`, the generator creates a “By Type” section for this category. |
> **Note**
> `Official` and `Beta` are special keys in the code. They are used to produce extra badges if a client has `official: true` or `beta: true`. They also appear in the final “legend” of recognized badges.
---
## 4. How the Generator Uses the YAML
1. **Read Clients**
The generator loads each client’s data, determining defaults for `official` (if `oss` is under GitHub’s `jellyfin/`) and `price.free` (true if `oss` is set).
2. **Group by Environment**
The generator builds a table for each environment (the `targets` groups).
- A top-level heading for the group (e.g., **“🌎 Browser-Based”**).
- Subheadings for each item in `has`.
- Lists the clients that match `target: [subheading name]` in a table.
3. **Sort Clients by Name**
Each environment’s table is sorted alphabetically by client name.
4. **Generate Type Sections**
For each `ClientType` with `section: true`, the generator creates a new table grouping. Again, it sorts by name and places those matching clients.
5. **Add a Badge Legend**
Finally, the generator includes a list of recognized badges from all `types`—displaying the `key` (or `display`) plus the `badge` in a simple list.
---
## 5. Adding or Modifying Entries
**To add a new client**:
1. Add a YAML object under `clients`.
2. Specify at least `name`, `targets`, and `downloads`.
3. (Optionally) Set `oss`, `website`, `official`, `beta`, `price`, or `types` as needed.
4. If the client’s `targets` includes a new platform not in `targets`, you must also define it under `targets` → a new or existing group.
**To add new categories**:
1. Add an entry to `types` with a `key` matching the desired category name in a client’s `types` list.
2. (Optionally) add a `badge` or set `section: true` to generate a new “By Type” section in the Markdown.
**To add new downloads**:
1. In the `downloads` array for the client, add another item with a supported `type`.
2. Provide the necessary fields for that `type` (e.g., `owner`, `repo` for `github`).
---
## 6. Full Example
Below is a trimmed excerpt from the actual `clients.yaml` to illustrate the structure. Notice how multiple clients are listed, each with a variety of download entries:
```yaml
clients:
- name: "Jellyfin Media Player"
targets: [ Windows, Linux, macOS ]
oss: https://github.com/jellyfin/jellyfin-media-player
official: true
downloads:
- type: github
owner: jellyfin
repo: jellyfin-media-player
- type: flathub
package: com.github.iwalton3.jellyfin-media-player
- name: "Swiftfin"
targets: [ iOS, AppleTV ]
oss: https://github.com/jellyfin/swiftfin
official: true
beta: true
downloads:
- type: app-store
id: "1604098728"
targets:
- key: Browser
display: "🌎 Browser-Based"
has:
- name: Browser
mapped: Browser
- key: Desktop
display: "💻 Desktop"
has:
- name: Windows
mapped: Windows
- name: Linux
mapped: Linux
- name: macOS
mapped: macOS
types:
- key: Official
badge: "🔹"
- key: Beta
badge: "⚒️"
- key: Music
badge: "🎵"
display: "Music Client"
section: true
```
When run through the Markdown generator, the result includes sections by environment (Desktop, Browser, etc.), and a “By Type” section for “Music Client” if any client sets `types: [ Music ]`.
================================================
FILE: assets/clients/clients.yaml
================================================
clients:
- name: "Jellyfin Media Player"
targets: [Windows, Linux, macOS]
oss: https://github.com/jellyfin/jellyfin-media-player
official: true
downloads:
- type: github
owner: jellyfin
repo: jellyfin-media-player
- type: flathub
package: com.github.iwalton3.jellyfin-media-player
- name: Coppelia
targets: [iOS, Android, Linux, macOS]
types: [Music]
oss: https://github.com/j6k4m8/coppelia
official: false
beta: true
price:
free: true
paid: false
downloads:
- type: github
owner: j6k4m8
repo: coppelia
- name: "Swiftfin"
targets: [iOS, AppleTV]
oss: https://github.com/jellyfin/swiftfin
official: true
beta: true
downloads:
- type: app-store
id: "1604098728"
- name: "Sunkfin"
targets: [iOS]
oss: https://github.com/jackcrane/sunkfin
official: false
beta: false
downloads:
- type: app-store
id: "6743207349"
- name: "Jellyfin Vue"
targets: [Browser]
oss: https://github.com/jellyfin/jellyfin-vue
official: true
beta: true
downloads:
- type: github
owner: jellyfin
repo: jellyfin-vue
url: https://github.com/jellyfin/jellyfin-vue/actions/workflows/release.yml
- type: demo
url: https://jf-vue.pages.dev/
- name: "Pelagica"
targets: [Browser]
oss: https://github.com/KartoffelChipss/pelagica
official: false
downloads:
- type: github
owner: KartoffelChipss
repo: pelagica
- type: demo
url: https://pelagica.jan.run
- name: "JellyCon"
targets: [Kodi]
oss: https://github.com/jellyfin/jellycon
official: true
downloads:
- type: github
owner: jellyfin
repo: jellycon
- name: "Jellyfin for Kodi"
targets: [Kodi]
oss: https://github.com/jellyfin/jellyfin-kodi
downloads:
- type: github
owner: jellyfin
repo: jellyfin-kodi
- name: "Jellyfin for Android"
targets: [Android]
oss: https://github.com/jellyfin/jellyfin-android
official: true
downloads:
- type: shield
icon: F-Droid
url: https://f-droid.org/en/packages/org.jellyfin.mobile/
- type: shield
icon: Amazon
url: https://www.amazon.com/gp/aw/d/B081RFTTQ9
- type: google-play
id: org.jellyfin.mobile
- name: "Jellyfin Mobile for iOS"
targets: [iOS]
oss: https://github.com/jellyfin/jellyfin-expo
official: true
downloads:
- type: app-store
id: "1480192618"
- name: "Jellyfin for Android TV"
targets: [AndroidTV]
oss: https://github.com/jellyfin/jellyfin-androidtv
official: true
downloads:
- type: shield
icon: Amazon
url: https://www.amazon.com/gp/aw/d/B07TX7Z725
- type: google-play
id: org.jellyfin.androidtv
- name: "Jellyfin for Roku"
targets: [Roku]
oss: https://github.com/jellyfin/jellyfin-roku
official: true
downloads:
- type: shield
icon: Roku
url: https://channelstore.roku.com/details/592369/jellyfin
- name: "Jellyfin for WebOS"
targets: [WebOS]
oss: https://github.com/jellyfin/jellyfin-webos
official: true
downloads:
- type: shield
icon: LG
url: https://us.lgappstv.com/main/tvapp/detail?appId=1030579
- name: "Findroid"
targets: [Android]
oss: https://github.com/jarnedemeulemeester/findroid
official: false
beta: true
downloads:
- type: shield
label: Izzysoft
url: https://apt.izzysoft.de/fdroid/index/apk/dev.jdtech.jellyfin
- type: google-play
id: dev.jdtech.jellyfin
- type: shield
icon: F-Droid
url: https://f-droid.org/en/packages/dev.jdtech.jellyfin/
- name: "Sailfin"
targets: [SailfishOS]
oss: https://github.com/heartfin/harbour-sailfin
downloads:
- type: shield
label: OpenRepos
url: https://openrepos.net/content/ahappyhuman/sailfin
- name: "Infuse"
targets: [iOS, AppleTV, macOS]
website: https://firecore.com/infuse
price:
free: true
paid: true
downloads:
- type: app-store
id: "1136220934"
- name: "VidHub"
targets: [Android, AndroidTV, iOS, AppleTV, macOS]
website: https://okaapps.com/product/1659622164
price:
free: true
paid: true
downloads:
- type: google-play
id: com.oumi.utility.media.hub
- type: app-store
id: "1659622164"
- name: "sonixd"
targets: [Browser]
types: [Music]
oss: https://github.com/jeffvli/sonixd
official: false
beta: true
downloads:
- type: github
owner: jeffvli
repo: sonixd
- name: "Finamp"
targets: [Android, iOS]
types: [Music]
oss: https://github.com/jmshrv/finamp
official: false
beta: false
downloads:
- type: google-play
id: com.unicornsonlsd.finamp
- type: app-store
id: "1574922594"
- name: "Plappa"
targets: [iOS]
types: [Music]
oss: https://github.com/LeoKlaus/plappa
official: false
beta: false
downloads:
- type: app-store
id: "6475201956"
- name: "MrMC"
targets: [AppleTV]
oss: https://github.com/MrMC/mrmc
price:
free: true
paid: true
downloads:
- type: shield
icon: Amazon
url: https://www.amazon.com/gp/product/B01ENT3I1Q/ref=mas_pm_mrmc
- type: app-store
id: "1059536415"
- type: google-play
id: tv.mrmc.mrmc
- name: "Delfin"
targets: [Linux]
oss: https://codeberg.org/avery42/delfin
official: false
beta: true
downloads:
- type: flathub
package: cafe.avery.Delfin
- name: "Supersonic"
targets: [Windows, Linux, macOS]
types: [Music]
oss: https://github.com/dweymouth/supersonic
official: false
beta: true
downloads:
- type: github
owner: dweymouth
repo: supersonic
- type: flathub
package: io.github.dweymouth.supersonic
- name: "Tauon Music Box"
targets: [Windows, Linux]
types: [Music]
oss: https://github.com/Taiko2k/TauonMusicBox
official: false
downloads:
- type: github
owner: Taiko2k
repo: TauonMusicBox
- type: flathub
package: com.github.taiko2k.tauonmb
- name: "Jellyfin MPV Shim"
targets: [Windows, Linux, macOS]
oss: https://github.com/jellyfin/jellyfin-mpv-shim
official: true
downloads:
- type: github
owner: jellyfin
repo: jellyfin-mpv-shim
- type: flathub
package: com.github.iwalton3.jellyfin-mpv-shim
- name: "Jellyamp"
targets: [Windows, Linux]
types: [Music]
oss: https://github.com/m0ngr31/jellyamp
official: false
downloads:
- type: github
owner: m0ngr31
repo: jellyamp
- name: "Preserve"
targets: [Browser, Windows, Linux]
types: [Music]
oss: https://gitlab.com/preserve/preserve
official: false
beta: true
downloads:
- type: gitlab
owner: preserve
repo: preserve
- type: demo
url: https://preserveplayer.com/
- name: "Sonixd"
targets: [Windows, Linux, macOS]
types: [Music]
oss: https://github.com/jeffvli/sonixd
official: false
beta: true
downloads:
- type: github
owner: jeffvli
repo: sonixd
- name: "Feishin"
targets: [Browser, Windows, Linux, macOS]
types: [Music]
oss: https://github.com/jeffvli/feishin
official: false
beta: true
downloads:
- type: github
owner: jeffvli
repo: feishin
- name: "Manet"
targets: [iOS]
types: [Music]
website: https://tilo.dev/manet/
price:
free: true
downloads:
- type: app-store
id: "6470928235"
- name: "Fintunes"
targets: [Android, iOS]
types: [Music]
oss: https://github.com/leinelissen/jellyfin-audio-player
official: false
beta: false
downloads:
- type: github
owner: leinelissen
repo: jellyfin-audio-player
- type: shield
icon: F-Droid
url: https://f-droid.org/en/packages/nl.moeilijkedingen.jellyfinaudioplayer
- type: google-play
id: nl.moeilijkedingen.jellyfinaudioplayer
- type: app-store
id: "1527732194"
- name: "Blink"
targets: [Windows, Linux, macOS]
oss: https://github.com/prayag17/Blink
official: false
beta: true
downloads:
- type: github
owner: prayag17
repo: Blink
- name: "AFinity"
targets: [Android]
oss: https://github.com/MakD/AFinity
official: false
beta: true
downloads:
- type: github
owner: MakD
repo: AFinity
- name: "Gelli"
targets: [Android]
types: [Music]
oss: https://github.com/dkanada/gelli
official: false
beta: false
downloads:
- type: github
owner: dkanada
repo: gelli
- type: shield
icon: F-Droid
url: https://f-droid.org/packages/com.dkanada.gramophone
- name: "JellyBook"
targets: [Android, iOS]
types: [Reader]
oss: https://github.com/JellyBookOrg/JellyBook
official: false
beta: false
downloads:
- type: github
owner: JellyBookOrg
repo: JellyBook
- type: shield
label: Izzysoft
url: "https://apt.izzysoft.de/fdroid/index/apk/com.KaraWilson.JellyBook/"
- type: shield
icon: App Store
label: TestFlight
url: "https://testflight.apple.com/join/lEXKY4Dl"
- name: "Shadfin"
targets: [Browser]
oss: https://github.com/Shadfin/app
official: false
beta: true
downloads:
- type: github
owner: Shadfin
repo: app
- type: demo
url: https://main.shadfin-standalone.pages.dev
- name: "Symfonium"
targets: [Android]
types: [Music]
official: false
beta: true
website: https://symfonium.app
price:
paid: true
downloads:
- type: google-play
id: app.symfonik.music.player
- name: "Jellyflix"
targets: [Android, iOS, Windows, Linux, macOS, Browser]
official: false
beta: false
oss: https://github.com/jellyflix-app/jellyflix
price:
free: true
downloads:
- type: demo
url: https://jellyflix.kiejon.com/
- type: app-store
id: 6476043683
- type: github
owner: jellyflix-app
repo: jellyflix
- name: "Streamyfin"
targets: [Android, iOS]
official: false
beta: false
website: https://streamyfin.app
oss: https://github.com/fredrikburmester/streamyfin
price:
free: true
downloads:
- type: app-store
id: "6593660679"
- type: shield
icon: App Store
label: TestFlight
url: https://testflight.apple.com/join/CWBaAAK2
- type: google-play
id: com.fredrikburmester.streamyfin
- type: github
owner: fredrikburmester
repo: streamyfin
- name: "Switchfin"
targets: [NintendoSwitch, macOS, Linux, Windows]
official: false
beta: true
oss: https://github.com/dragonflylee/switchfin
price:
free: true
downloads:
- type: github
owner: dragonflylee
repo: switchfin
- name: "tsukimi"
targets: [Linux, Windows]
oss: https://github.com/tsukinaha/tsukimi
official: false
beta: true
price:
free: true
downloads:
- type: github
owner: tsukinaha
repo: tsukimi
- name: "Finer"
targets: [macOS, iOS]
types: [Music]
website: https://monk-studio.com/finer
official: false
beta: false
price:
free: true
downloads:
- type: app-store
id: "6738301953"
- name: "Fladder"
targets: [Android, AndroidTV, iOS, macOS, Windows, Linux, Browser]
oss: https://github.com/DonutWare/Fladder
official: false
beta: false
price:
free: true
downloads:
- type: github
owner: DonutWare
repo: Fladder
- type: google-play
id: nl.jknaapen.fladder
- name: AfuseKt
targets: [Android]
official: false
beta: false
website: "https://github.com/AttemptD/AfuseKt-release"
price:
free: true
paid: true
downloads:
- type: github
owner: AttemptD
repo: AfuseKt-release
- name: AfuseKt TV
targets: [AndroidTV]
official: false
beta: false
website: "https://github.com/AttemptD/AfuseKtV-release"
price:
free: false
paid: true
downloads:
- type: github
owner: AttemptD
repo: AfuseKtV-release
- name: FluentFin
targets: [Windows]
oss: https://github.com/insomniachi/FluentFin
official: false
beta: true
downloads:
- type: github
owner: insomniachi
repo: FluentFin
- name: FinVideo
targets: [HarmonyOS]
oss: https://github.com/OHPG/FinVideo
price:
free: true
downloads:
- type: github
owner: OHPG
repo: FinVideo
- type: shield
icon: AppGallery
url: https://appgallery.huawei.com/app/detail?id=org.ohpg.fin.video
- name: Bloodin
targets: [Windows, Linux, macOS]
oss: https://github.com/pathetic/bloodin
beta: true
- name: DUNE
targets: [AndroidTV]
oss: https://github.com/Sam42a/DUNE
official: false
beta: true
downloads:
- type: github
owner: Sam42a
repo: DUNE
- name: "yybx"
targets: [iOS, AppleTV]
website: https://yybpro.com
price:
free: false
paid: true
downloads:
- type: app-store
id: "1519723194"
- name: "HamHub"
targets: [iOS, AppleTV, macOS]
website: https://www.hamhub.app/
price:
free: true
downloads:
- type: app-store
id: "6458691598"
- name: "Filebar"
targets: [iOS, AppleTV]
website: https://fileball.app/
price:
free: true
paid: true
downloads:
- type: app-store
id: "1558391784"
- name: Ghosten-Player
targets: [Android, AndroidTV]
oss: https://github.com/GhostenEditor/Ghosten-Player
official: false
downloads:
- type: github
owner: GhostenEditor
repo: Ghosten-Player
- name: "SenPlayer"
targets: [macOS, iOS, AppleTV]
website: https://apps.apple.com/app/id6443975850
price:
free: true
paid: true
downloads:
- type: app-store
id: "6443975850"
- name: iPlay
targets: [iOS, Windows, macOS]
oss: https://github.com/saltpi/iPlay
official: false
downloads:
- type: github
owner: saltpi
repo: iPlay
- type: app-store
id: "6480576133"
- type: shield
icon: Amazon
url: https://www.amazon.com/gp/product/B0DB2KL58G
- type: shield
label: Microsoft Store
url: https://apps.microsoft.com/detail/9NBZ2BXD4WFZ
- name: Jellyfin for Tizen
targets: [Tizen]
oss: https://github.com/jellyfin/jellyfin-tizen
official: true
downloads:
- type: text
text: Build It Yourself
url: https://github.com/jellyfin/jellyfin-tizen
- name: FinMusic
targets: [HarmonyOS]
types: [Music]
oss: https://github.com/OHPG/FinMusic
downloads:
- type: shield
icon: AppGallery
url: https://appgallery.huawei.com/app/detail?id=org.ohpg.fin.music
- type: github
owner: OHPG
repo: FinMusic
- name: "Discrete"
targets: [iOS, macOS]
types: [Music]
website: https://discrete.app/
price:
free: true
paid: true
official: false
beta: false
downloads:
- type: app-store
id: "6746067740"
- name: "Foxy"
targets: [Windows, Linux, macOS]
types: [Music]
oss: https://github.com/Devioxic/Foxy-Desktop
official: false
beta: false
downloads:
- type: github
owner: Devioxic
repo: Foxy-Desktop
- name: "Jelly Music App"
targets: [Browser, Windows, macOS, Linux]
types: [Music]
oss: https://github.com/Stannnnn/jelly-app
official: false
beta: false
price:
free: true
downloads:
- type: github
owner: Stannnnn
repo: jelly-app
- name: "Phyn"
targets: [macOS, iOS, Android]
website: https://phyn.app
official: false
beta: false
price:
free: true
paid: true
downloads:
- type: google-play
id: com.appsynergyts.phyn
- type: app-store
id: "6457674815"
- name: "Finetic"
targets: [Browser]
oss: https://github.com/AyaanZaveri/finetic
official: false
beta: false
price:
free: true
downloads:
- type: github
owner: AyaanZaveri
repo: finetic
- name: "Reefin"
targets: [Android, AndroidTV]
website: https://reefin.dev/
oss: https://github.com/SKULSHADY/reefin
downloads:
- type: google-play
id: com.shady.reefin
- type: github
owner: SKULSHADY
repo: reefin
- name: "Hills"
targets: [Windows, Android]
website: https://play.google.com/store/apps/details?id=com.mountains.hills
official: false
beta: false
price:
free: true
paid: true
downloads:
- type: google-play
id: com.mountains.hills
- type: shield
label: Microsoft Store
url: https://apps.microsoft.com/detail/9NXNZFRLLWZX
- name: "Rodel Player"
targets: [Windows]
website: https://apps.microsoft.com/detail/9nb0h051m4v4
official: false
beta: false
price:
free: true
downloads:
- type: shield
label: Microsoft Store
url: https://apps.microsoft.com/detail/9nb0h051m4v4
- name: "JellyRock"
targets: [Roku]
oss: https://github.com/cewert/jellyrock
price:
free: true
paid: false
beta: false
official: false
downloads:
- type: shield
icon: Roku
url: https://channelstore.roku.com/details/232f9e82db11ce628e3fe7e01382a330:a85d6e9e520567806e8dae1c0cabadd5/jellyrock
- type: github
owner: cewert
repo: jellyrock
- name: Wholphin
targets: [AndroidTV]
oss: https://github.com/damontecres/Wholphin
official: false
beta: false
downloads:
- type: google-play
id: com.github.damontecres.wholphin
- type: github
owner: damontecres
repo: Wholphin
- name: Void
targets: [Android, AndroidTV]
oss: https://github.com/hritwikjohri/Void-for-jellyfin
price:
free: true
paid: false
beta: true
official: false
downloads:
- type: github
owner: hritwikjohri
repo: Void-for-jellyfin
- type: github
owner: hritwikjohri
repo: VoidTV-for-jellyfin
- name: Gelly
targets: [Linux]
types: [Music]
oss: https://github.com/Fingel/gelly
official: false
beta: true
price:
free: true
downloads:
- type: github
owner: Fingel
repo: gelly
- type: flathub
package: io.m51.Gelly
- name: "Moonfin"
targets: [AndroidTV, Roku, webOS, Tizen]
oss: https://github.com/Moonfin-Client
official: false
price:
free: true
paid: false
downloads:
-
type: github
owner: Moonfin-Client
repo: AndroidTV-FireTV
label: AndroidTV
-
type: github
owner: Moonfin-Client
repo: Roku
label: Roku
-
type: github
owner: Moonfin-Client
repo: webOS
label: webOS
-
type: github
owner: Moonfin-Client
repo: Tizen
label: Tizen
-
type: google-play
id: org.moonfin.androidtv
- name: ampcast
targets: [Browser, Windows, Linux, macOS]
types: [Music]
oss: https://github.com/rekkyrosso/ampcast
official: false
beta: true
price:
free: true
paid: false
downloads:
- type: github
owner: rekkyrosso
repo: ampcast
- name: "Aperture"
targets: [Browser]
oss: https://github.com/akhilmulpurii/aperture
official: false
beta: true
price:
free: true
downloads:
- type: github
owner: akhilmulpurii
repo: aperture
- name: "Mediora"
targets: [AppleTV]
website: https://github.com/ghobs91/mediora
oss: https://github.com/ghobs91/mediora
price:
free: true
paid: false
downloads:
- type: app-store
id: "6757345487"
- name: Yamby
targets: [Android, AndroidTV]
price:
free: true
paid: true
downloads:
- type: google-play
id: com.hush.yamby
- name: JellySee
targets: [AppleTV]
official: false
beta: false
price:
free: false
paid: true
downloads:
- type: app-store
id: "6748783768"
- name: Dee Jellie
targets: [iOS, AppleTV, macOS]
types: [Music]
website: https://www.deejellie.com
official: false
beta: false
price:
free: false
paid: true
downloads:
- type: app-store
id: "6755585736"
- name: "Breezyfin"
targets: [WebOS]
oss: https://github.com/botagas/Breezyfin
official: false
beta: true
price:
free: true
paid: false
downloads:
- type: github
owner: botagas
repo: Breezyfin
- name: JellyCine
targets: [Android]
oss: https://github.com/sureshfizzy/JellyCine
downloads:
- type: github
owner: sureshfizzy
repo: JellyCine
- name: Playtorrio
targets: [Windows, macOS, Linux, Android]
oss: https://github.com/ayman708-UX/PlayTorrio
downloads:
- type: github
owner: ayman708-UX
repo: PlayTorrio
- name: JellyTV
targets: [iOS]
website: https://jellytv.app/en
price:
free: false
paid: true
downloads:
- type: app-store
id: "6752357290"
- name: Elefin
targets: [AndroidTV]
oss: https://github.com/flex36ty/elefin
downloads:
- type: github
owner: flex36ty
repo: elefin
- name: Jellify
targets: [iOS, Android]
types: [Music]
oss: https://github.com/Jellify-Music/App
downloads:
- type: github
owner: Jellify-Music
repo: App
- type: shield
icon: App Store
label: TestFlight
url: https://testflight.apple.com/join/etVSc7ZQ
targets:
- key: Browser
display: "🌎 Browser-Based"
has:
- name: Browser
mapped: Browser
- key: Desktop
display: "💻 Desktop"
has:
- name: Windows
mapped: Windows
- name: macOS
mapped: "macOS"
- name: Linux
mapped: "Linux"
- key: Mobile
display: "📱 Mobile"
has:
- name: iOS
mapped: "iOS"
- name: Android
mapped: "Android"
- name: SailfishOS
mapped: "Sailfish OS"
- name: HarmonyOS
mapped: "HarmonyOS"
- name: NintendoSwitch
mapped: "Nintendo Switch"
- key: TV
display: "📺 TV"
has:
- name: AppleTV
mapped: "Apple TV"
- name: AndroidTV
mapped: "Android TV"
- name: Kodi
mapped: "Kodi"
- name: Roku
mapped: "Roku"
- name: Tizen
mapped: "Tizen"
- name: WebOS
mapped: "webOS"
types:
# dummy type for official badge
- key: Official
badge: "🔹"
# dummy type for beta badge
- key: Beta
badge: "⚒️"
- key: Music
badge: "🎵"
display: Music Client
section: true
- key: Reader
badge: "📖"
display: Reader
section: true
================================================
FILE: assets/clients/icons/.gitkeep
================================================
================================================
FILE: snippets/language-overlay/README.md
================================================
# Flags on Movie Posters
Ever wanted to easily identify the language of a movie at a glance? Now you can with this script!
This script adds flags to movie posters, so that you can quickly determine the language of the movie. Currently, it supports German and Dutch flags, but can easily be modified to support any language.
## Requirements
* `exiftool`
* `jq`
* FFmpeg (for `ffprobe`)
* imagemagick (for `convert`)
## Usage
1. Save the script to a file, e.g. `movie_flags.sh`
2. Change the `MOVIES_DIR` and `OVERLAY_DIR` variables and modify to your desired languages
3. Change the file permissions to make it executable, e.g. `chmod +x movie_flags.sh`
4. Run the script, e.g. `./movie_flags.sh`
## Credits
This script was created by [u/ProductRockstar](https://www.reddit.com/user/ProductRockstar/).
[[Original Post](https://www.reddit.com/r/jellyfin/comments/11dgmp3/script_to_add_language_overlay_to_movie_poster/)]
================================================
FILE: snippets/language-overlay/language-overlay.sh
================================================
#!/bin/bash
# Author: u/ProductRockstar
# https://www.reddit.com/r/jellyfin/comments/11dgmp3/script_to_add_language_overlay_to_movie_poster/
MOVIES_DIR="/mnt_data/media/movies"
OVERLAY_DIR="/mnt_data/media"
while true
do
cd "$MOVIES_DIR"
for dir in */; do
cd "$MOVIES_DIR/$dir"
pwd
flink=$(readlink -f poster.jpg)
creatortool=$( exiftool -f -s3 -"creatortool" "$flink" )
if [ "${creatortool}" != "993" ]; then
mlink=$(readlink -f *.mkv)
langs=$( ffprobe "$mlink" -show_entries stream=index:stream_tags=language -select_streams a -v 0 -of json=c=1 | jq --raw-output '.streams[].tags.language')
GER='ger'
DUT='dut'
case $langs in
*"$DUT"*)
widthposter=$( exiftool -f -s3 -"ImageWidth" "$flink" )
convert "$OVERLAY_DIR/dut_overlay.png" -resize "$widthposter" "$OVERLAY_DIR/dut_overlay_tmp.png"
convert "$flink" "$OVERLAY_DIR/dut_overlay_tmp.png" -flatten "$flink"
chmod +644 "$flink"
chown nobody "$flink"
exiftool -creatortool="993" -overwrite_original "$flink"
;;
*"$GER"*)
widthposter=$( exiftool -f -s3 -"ImageWidth" "$flink" )
convert "$OVERLAY_DIR/ger_overlay.png" -resize "$widthposter" "$OVERLAY_DIR/ger_overlay_tmp.png"
convert "$flink" "$OVERLAY_DIR/ger_overlay_tmp.png" -flatten "$flink"
chmod +644 "$flink"
chown nobody "$flink"
exiftool -creatortool="993" -overwrite_original "$flink"
;;
esac
fi
done
sleep 90000
done
gitextract_mxfy2un7/
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── 009-request-theme.yaml
│ │ ├── 010-request-client.yaml
│ │ ├── 099-request-other.yaml
│ │ ├── 100-report-mistake.yaml
│ │ └── 200-remove-project.yaml
│ └── workflows/
│ ├── check-for-pending-jobs.yaml
│ ├── clients-pull-request.yaml
│ ├── clients-update-clients.yaml
│ ├── lint.yaml
│ ├── monthly-release.yaml
│ └── sorting-pull-check.yaml
├── CLIENTS.md
├── CODE-OF-CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── THEMES.md
├── assets/
│ ├── DateCheck.sh
│ └── clients/
│ ├── CLIENTS.template.md
│ ├── README.md
│ ├── clients.yaml
│ └── icons/
│ └── .gitkeep
└── snippets/
└── language-overlay/
├── README.md
└── language-overlay.sh
Condensed preview — 25 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (191K chars).
[
{
"path": ".github/CODEOWNERS",
"chars": 27,
"preview": "* @awesome-jellyfin/review\n"
},
{
"path": ".github/ISSUE_TEMPLATE/009-request-theme.yaml",
"chars": 2574,
"preview": "name: \"🎨 Add Theme\"\ndescription: >\n Do you have a theme that is not yet listed and want it to be listed in the repo?\n\nt"
},
{
"path": ".github/ISSUE_TEMPLATE/010-request-client.yaml",
"chars": 2877,
"preview": "name: \"📱 Add Client\"\ndescription: >\n Do you have a client that is not yet listed and want it to be listed in the repo?\n"
},
{
"path": ".github/ISSUE_TEMPLATE/099-request-other.yaml",
"chars": 2632,
"preview": "name: \"✨ Request something else\"\ndescription: >\n Do you have anything else that is not yet listed and want it to be lis"
},
{
"path": ".github/ISSUE_TEMPLATE/100-report-mistake.yaml",
"chars": 1841,
"preview": "name: \"🚩 Report a mistake (e. g. Spelling, Grammar, ...)\"\ndescription: >\n Did you find an error in the list?\n\nlabels: \n"
},
{
"path": ".github/ISSUE_TEMPLATE/200-remove-project.yaml",
"chars": 1459,
"preview": "name: \"🔍 Report a project (e. g. Inactive, Broken, Harmful, ...)\"\ndescription: >\n Did you find a project, which shouldn"
},
{
"path": ".github/workflows/check-for-pending-jobs.yaml",
"chars": 479,
"preview": "name: Check for Pending Jobs\n\non:\n schedule:\n - cron: '32 */6 * * *'\n workflow_dispatch: {}\n\njobs:\n hit-endpoint:\n"
},
{
"path": ".github/workflows/clients-pull-request.yaml",
"chars": 1643,
"preview": "name: 'Clients Update Pull Request'\r\n\r\non:\r\n # pull_request:\r\n # paths:\r\n # - 'assets/clients/clients.yaml'\r\n wo"
},
{
"path": ".github/workflows/clients-update-clients.yaml",
"chars": 1362,
"preview": "name: '[Clients] Update CLIENTS.md'\r\n\r\non:\r\n push:\r\n branches:\r\n - 'main'\r\n paths:\r\n - 'assets/clients/"
},
{
"path": ".github/workflows/lint.yaml",
"chars": 356,
"preview": "name: Lint\n\non:\n pull_request:\n branches: [main]\n paths:\n - \"**/*.md\"\n\njobs:\n lint:\n runs-on: ubuntu-lat"
},
{
"path": ".github/workflows/monthly-release.yaml",
"chars": 3237,
"preview": "name: Monthly Release\n\non:\n schedule:\n - cron: \"42 9 1 * *\"\n workflow_dispatch:\n\npermissions:\n contents: write\n\nco"
},
{
"path": ".github/workflows/sorting-pull-check.yaml",
"chars": 2329,
"preview": "name: 'README Update Pull Request'\n\non:\n # pull_request:\n # paths:\n # - 'README.md'\n workflow_dispatch:\n\njobs:"
},
{
"path": "CLIENTS.md",
"chars": 60718,
"preview": "\n<!--\n⚠️ WARNING: DO NOT EDIT THIS FILE ⚠️\n\nThis Markdown file is auto-generated from the `assets/clients/clients.yaml` "
},
{
"path": "CODE-OF-CONDUCT.md",
"chars": 3231,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 4471,
"preview": "# Contribution Guidelines\n\nPlease note that this project is released with a [Contributor Code of Conduct](CODE-OF-CONDUC"
},
{
"path": "LICENSE",
"chars": 7048,
"preview": "Creative Commons Legal Code\n\nCC0 1.0 Universal\n\n CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n"
},
{
"path": "README.md",
"chars": 29829,
"preview": "<!--lint disable awesome-heading awesome-toc double-link-->\n\n<p align=\"center\">\n <img src=\"/assets/banner.png\" />\n <h1"
},
{
"path": "THEMES.md",
"chars": 14150,
"preview": "<p align=\"center\">\n <img src=\"assets/banner.png\" />\n <h1 align=\"center\"><a href=\"https://github.com/awesome-jellyfin/a"
},
{
"path": "assets/DateCheck.sh",
"chars": 3178,
"preview": "#!/bin/bash\n\n# Check if a GitHub API token is provided\nif [ \"$#\" -ne 2 ] || [ \"$1\" != \"-api\" ]; then\n echo -e \"${RED}"
},
{
"path": "assets/clients/CLIENTS.template.md",
"chars": 1175,
"preview": "<!--\n⚠️ WARNING: DO NOT EDIT THIS FILE ⚠️\n\nThis Markdown file is auto-generated from the `assets/clients/clients.yaml` f"
},
{
"path": "assets/clients/README.md",
"chars": 14068,
"preview": "# Jellyfin Client YAML Configuration Format\n\nThis configuration file is used by the [Markdown generator](https://github."
},
{
"path": "assets/clients/clients.yaml",
"chars": 23920,
"preview": "clients:\n - name: \"Jellyfin Media Player\"\n targets: [Windows, Linux, macOS]\n oss: https://github.com/jellyfin/jel"
},
{
"path": "assets/clients/icons/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "snippets/language-overlay/README.md",
"chars": 927,
"preview": "# Flags on Movie Posters\n\nEver wanted to easily identify the language of a movie at a glance? Now you can with this scri"
},
{
"path": "snippets/language-overlay/language-overlay.sh",
"chars": 1559,
"preview": "#!/bin/bash\n\n# Author: u/ProductRockstar\n# https://www.reddit.com/r/jellyfin/comments/11dgmp3/script_to_add_language_ove"
}
]
About this extraction
This page contains the full source code of the awesome-jellyfin/awesome-jellyfin GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 25 files (180.8 KB), approximately 53.8k 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.