feat: new client icons (#159)
@@ -19,5 +19,5 @@ jobs:
|
||||
|
||||
- name: Test if we can generate clients
|
||||
run: |
|
||||
go install github.com/awesome-jellyfin/clients-md-generator/cmd/generate@c6c44360024954a72a46617421c297aca4a2565e
|
||||
go install github.com/awesome-jellyfin/clients-md-generator/cmd/generate@latest
|
||||
generate -input assets/clients/clients.yaml -check-icons
|
||||
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
|
||||
- name: Generate CLIENTS.md
|
||||
run: |
|
||||
go install github.com/awesome-jellyfin/clients-md-generator/cmd/generate@c6c44360024954a72a46617421c297aca4a2565e
|
||||
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
|
||||
|
||||
@@ -1,136 +1,292 @@
|
||||
# Jellyfin Client YAML Configuration Schema
|
||||
# Jellyfin Client YAML Configuration Format
|
||||
|
||||
The schema provides detailed documentation for constructing a YAML configuration file used by the [Client Markdown Generator](https://github.com/awesome-jellyfin/clients-md-generator).
|
||||
The YAML file contains three main sections: `icons`, `targets`, and `clients`.
|
||||
|
||||
## `clients` Section
|
||||
|
||||
Lists client definitions compatible with Jellyfin.
|
||||
|
||||
### Client Definition
|
||||
|
||||
Each client in the `clients` list has fields detailing its specifics.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|--------------------|------------------|----------|---------------------------------------------------------------------------------------|
|
||||
| **`name`** | String | Yes | Name of the client. |
|
||||
| **`targets`** | List[String] | Yes | Platforms supported (e.g., iOS, Android, Windows). |
|
||||
| `oss` | String | No | URL to the open-source repository, if available. |
|
||||
| `official` | Boolean | No | Marks the client as an official Jellyfin client (defaults inferred). |
|
||||
| `beta` | Boolean | No | Marks the client as being in beta. |
|
||||
| `website` | String | No | Official website URL for the client. |
|
||||
| `price` | Price Object \* | No | Specifies if the client is free, paid, or both. Default is free if `oss` is provided. |
|
||||
| **`downloads`** | List[Hoster] | Yes | List of hosters where the client can be downloaded. |
|
||||
| `types` | List[String] | No | A list of strings representing additional client categories or features. |
|
||||
|
||||
The `types` field within a client's definition is an optional list of strings that provides additional classification for the client based on its functionality or use case. This can be particularly useful for denoting special features or categories that the client falls under, such as 'Music' for music-specific clients or other identifiers for unique client types.
|
||||
|
||||
#### \*) Price Definition
|
||||
| Field | Type | Required | Description |
|
||||
|--------|---------|----------|--------------------------------------------------|
|
||||
| `free` | Boolean | No | Indicates if the client can be downloaded for free. Default is `true` if `oss` is provided. |
|
||||
| `paid` | Boolean | No | Indicates if there is a paid version of the client. |
|
||||
|
||||
#### Hoster Definition
|
||||
| Field | Type | Required | Description |
|
||||
|-----------|--------|----------|-------------------------------------------------------|
|
||||
| `icon` | String | No | Key representing the icon to be displayed. |
|
||||
| `icon-url`| String | No | URL to a custom icon. |
|
||||
| `text` | String | No | Text displayed if no icon is used. |
|
||||
| `url` | String | Yes | Where the client can be downloaded (mandatory). |
|
||||
This configuration file is used by the [Markdown generator](https://github.com/awesome-jellyfin/clients-md-generator) to produce the Clients list.
|
||||
|
||||
---
|
||||
|
||||
## `icons` Section
|
||||
## 1. `clients` Section
|
||||
|
||||
This section defines a map of icon keys to various representations for use next to client download links in the markdown output.
|
||||
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
|
||||
icons:
|
||||
key:
|
||||
light: "path/to/light-mode/icon.png"
|
||||
dark: "path/to/dark-mode/icon.png"
|
||||
single: "path/to/icon.png"
|
||||
text: Icon Description
|
||||
price:
|
||||
free: true
|
||||
paid: true
|
||||
```
|
||||
|
||||
### Icon Definition
|
||||
| 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. |
|
||||
|
||||
Each key within the `icons` section represents an icon identifier. Icon objects can have various representations and descriptions.
|
||||
---
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|---------|--------|----------------|---------------------------------------------------------------|
|
||||
| `light` | String | If `dark` set | Path to the icon image for light mode (optional). |
|
||||
| `dark` | String | If `light` set | Path to the icon image for dark mode (optional). |
|
||||
| `single`| String | No | Path to the icon image when no mode-specific icon is used. |
|
||||
| `text` | String | No \* | Description text displayed if no icon image is used. |
|
||||
#### 1.2 `downloads` List
|
||||
|
||||
\*) If no image provided, `text` is required.
|
||||
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.
|
||||
|
||||
## `targets` Section
|
||||
Each `Download` object has a **`type`** key (required) to determine which of the generator’s “renderer” structs to use:
|
||||
|
||||
Targets categorize clients into platform- or environment-based groups.
|
||||
| `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 Definition
|
||||
### Target Group Fields
|
||||
|
||||
Each entry within the `targets` list represents a group of platforms or environments with the following attributes:
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-----------|--------|----------|--------------------------------------------------|
|
||||
| `key` | String | Yes | Unique identifier for the target group. |
|
||||
| `display` | String | Yes | Display name, commonly with an emoji icon. |
|
||||
| `has` | List | Yes | A list of individual target platform entries. |
|
||||
| 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 `has` list entry within a `TargetGroup` object corresponds to a specific platform or environment.
|
||||
Each item in `has`:
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|----------|--------|----------|---------------------------------------------------------------------|
|
||||
| `name` | String | Yes | Target name used in the `clients` section's `targets` field. |
|
||||
| `mapped` | String | Yes | Human-friendly name corresponding to the target name. |
|
||||
| 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"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Tips for Adding New Entries
|
||||
## 3. `types` Section
|
||||
|
||||
To add new platforms or icons, define them in the `targets` or `icons` sections:
|
||||
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
|
||||
icons:
|
||||
new-icon-key:
|
||||
light: "assets/clients/icons/new-icon-light.png"
|
||||
dark: "assets/clients/icons/new-icon-dark.png"
|
||||
text: "New Icon Description"
|
||||
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: NewPlatform
|
||||
display: "🆕 New Platform"
|
||||
- key: Browser
|
||||
display: "🌎 Browser-Based"
|
||||
has:
|
||||
- name: NewPlatform # simple key for defining client targets (target: [Browser, ...])
|
||||
mapped: "The New Platform Display Name" # display name for the target in the generated Markdown document
|
||||
- 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
|
||||
```
|
||||
|
||||
Reference these new identifiers when creating a client entry:
|
||||
|
||||
```yaml
|
||||
- name: "New Jellyfin Client"
|
||||
targets: [NewPlatform]
|
||||
oss: https://github.com/your-username/new-jellyfin-client
|
||||
official: false
|
||||
beta: false
|
||||
website: https://newclient.example.com/
|
||||
types: [ Music ]
|
||||
price:
|
||||
free: true
|
||||
paid: false
|
||||
downloads:
|
||||
- icon: new-icon-key
|
||||
url: https://example.com/client-download
|
||||
```
|
||||
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 ]`.
|
||||
|
||||
@@ -4,11 +4,13 @@ clients:
|
||||
oss: https://github.com/jellyfin/jellyfin-media-player
|
||||
official: true
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/jellyfin/jellyfin-media-player/releases
|
||||
|
||||
- icon: flathub
|
||||
url: https://flathub.org/apps/details/com.github.iwalton3.jellyfin-media-player
|
||||
-
|
||||
type: github
|
||||
owner: jellyfin
|
||||
repo: jellyfin-media-player
|
||||
-
|
||||
type: flathub
|
||||
package: com.github.iwalton3.jellyfin-media-player
|
||||
|
||||
- name: "Swiftfin"
|
||||
targets: [ iOS, AppleTV ]
|
||||
@@ -16,8 +18,8 @@ clients:
|
||||
official: true
|
||||
beta: true
|
||||
downloads:
|
||||
- icon: apple-appstore
|
||||
url: https://apps.apple.com/ca/app/swiftfin/id1604098728
|
||||
- type: app-store
|
||||
id: "1604098728"
|
||||
|
||||
- name: "Jellyfin Vue"
|
||||
targets: [ Browser ]
|
||||
@@ -25,69 +27,77 @@ clients:
|
||||
official: true
|
||||
beta: true
|
||||
downloads:
|
||||
- icon: demo
|
||||
url: https://jf-vue.pages.dev/
|
||||
|
||||
- icon: docker-hub
|
||||
url: https://github.com/jellyfin/jellyfin-vue/pkgs/container/jellyfin-vue
|
||||
|
||||
- icon: github
|
||||
-
|
||||
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: "JellyCon"
|
||||
targets: [ Kodi ]
|
||||
oss: https://github.com/jellyfin/jellycon
|
||||
official: true
|
||||
downloads:
|
||||
- text: "Installation Guide"
|
||||
url: https://github.com/jellyfin/jellycon#installation
|
||||
- type: github
|
||||
owner: jellyfin
|
||||
repo: jellycon
|
||||
|
||||
- name: "Jellyfin for Kodi"
|
||||
targets: [ Kodi ]
|
||||
oss: https://github.com/jellyfin/jellyfin-kodi
|
||||
downloads:
|
||||
- text: "Installation Guide"
|
||||
url: https://jellyfin.org/docs/general/clients/kodi
|
||||
- type: github
|
||||
owner: jellyfin
|
||||
repo: jellyfin-kodi
|
||||
|
||||
- name: "Jellyfin for Android"
|
||||
targets: [ Android ]
|
||||
oss: https://github.com/jellyfin/jellyfin-android
|
||||
official: true
|
||||
downloads:
|
||||
- icon: f-droid
|
||||
-
|
||||
type: shield
|
||||
icon: F-Droid
|
||||
url: https://f-droid.org/en/packages/org.jellyfin.mobile/
|
||||
|
||||
- icon: amazon-appstore
|
||||
-
|
||||
type: shield
|
||||
icon: Amazon
|
||||
url: https://www.amazon.com/gp/aw/d/B081RFTTQ9
|
||||
|
||||
- icon: google-playstore
|
||||
url: https://play.google.com/store/apps/details?id=org.jellyfin.mobile
|
||||
-
|
||||
type: google-play
|
||||
id: org.jellyfin.mobile
|
||||
|
||||
- name: "Jellyfin Mobile for iOS"
|
||||
targets: [ iOS ]
|
||||
oss: https://github.com/jellyfin/jellyfin-expo
|
||||
official: true
|
||||
downloads:
|
||||
- icon: apple-appstore
|
||||
url: https://apps.apple.com/us/app/jellyfin-mobile/id1480192618?mt=8
|
||||
- type: app-store
|
||||
id: "1480192618"
|
||||
|
||||
- name: "Jellyfin for Android TV"
|
||||
targets: [ AndroidTV ]
|
||||
oss: https://github.com/jellyfin/jellyfin-androidtv
|
||||
official: true
|
||||
downloads:
|
||||
- icon: amazon-appstore
|
||||
-
|
||||
type: shield
|
||||
icon: Amazon
|
||||
url: https://www.amazon.com/gp/aw/d/B07TX7Z725
|
||||
|
||||
- icon: google-playstore
|
||||
url: https://play.google.com/store/apps/details?id=org.jellyfin.androidtv
|
||||
-
|
||||
type: google-play
|
||||
id: org.jellyfin.androidtv
|
||||
|
||||
- name: "Jellyfin for Roku"
|
||||
targets: [ Roku ]
|
||||
oss: https://github.com/jellyfin/jellyfin-roku
|
||||
official: true
|
||||
downloads:
|
||||
- text: Channel Store
|
||||
- type: shield
|
||||
icon: Roku
|
||||
url: https://channelstore.roku.com/details/592369/jellyfin
|
||||
|
||||
- name: "Jellyfin for WebOS"
|
||||
@@ -95,7 +105,8 @@ clients:
|
||||
oss: https://github.com/jellyfin/jellyfin-webos
|
||||
official: true
|
||||
downloads:
|
||||
- text: Content Store
|
||||
- type: shield
|
||||
icon: LG
|
||||
url: https://us.lgappstv.com/main/tvapp/detail?appId=1030579
|
||||
|
||||
- name: "Findroid"
|
||||
@@ -104,17 +115,20 @@ clients:
|
||||
official: false
|
||||
beta: true
|
||||
downloads:
|
||||
- icon: izzisoft
|
||||
-
|
||||
type: shield
|
||||
label: Izzysoft
|
||||
url: https://apt.izzysoft.de/fdroid/index/apk/dev.jdtech.jellyfin
|
||||
|
||||
- icon: google-playstore
|
||||
url: https://play.google.com/store/apps/details?id=dev.jdtech.jellyfin
|
||||
-
|
||||
type: google-play
|
||||
id: dev.jdtech.jellyfin
|
||||
|
||||
- name: "Sailfin"
|
||||
targets: [ SailfishOS ]
|
||||
oss: https://github.com/heartfin/harbour-sailfin
|
||||
downloads:
|
||||
- icon: openrepos
|
||||
- type: shield
|
||||
label: OpenRepos
|
||||
url: https://openrepos.net/content/ahappyhuman/sailfin
|
||||
|
||||
- name: 'Infuse'
|
||||
@@ -124,8 +138,8 @@ clients:
|
||||
free: true
|
||||
paid: true
|
||||
downloads:
|
||||
- icon: apple-appstore
|
||||
url: https://apps.apple.com/app/id1136220934?mt=8
|
||||
- type: app-store
|
||||
id: "1136220934"
|
||||
|
||||
- name: 'VidHub'
|
||||
targets: [ Android ,iOS, AppleTV, macOS ]
|
||||
@@ -134,10 +148,12 @@ clients:
|
||||
free: true
|
||||
paid: true
|
||||
downloads:
|
||||
- icon: google-playstore
|
||||
url: https://play.google.com/store/apps/details?id=com.oumi.utility.media.hub
|
||||
- icon: apple-appstore
|
||||
url: https://apps.apple.com/us/app/vidhub-video-library-player/id1659622164
|
||||
-
|
||||
type: google-play
|
||||
id: com.oumi.utility.media.hub
|
||||
-
|
||||
type: app-store
|
||||
id: "1659622164"
|
||||
|
||||
- name: "sonixd"
|
||||
targets: [ Browser ]
|
||||
@@ -146,8 +162,9 @@ clients:
|
||||
official: false
|
||||
beta: true
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/jeffvli/sonixd/releases
|
||||
- type: github
|
||||
owner: jeffvli
|
||||
repo: sonixd
|
||||
|
||||
- name: "Finamp"
|
||||
targets: [ Android, iOS ]
|
||||
@@ -156,10 +173,12 @@ clients:
|
||||
official: false
|
||||
beta: true
|
||||
downloads:
|
||||
- icon: google-playstore
|
||||
url: https://play.google.com/store/apps/details?id=com.unicornsonlsd.finamp
|
||||
- icon: apple-appstore
|
||||
url: https://apps.apple.com/us/app/finamp/id1574922594
|
||||
-
|
||||
type: google-play
|
||||
id: com.unicornsonlsd.finamp
|
||||
-
|
||||
type: app-store
|
||||
id: "1574922594"
|
||||
|
||||
- name: "MrMC"
|
||||
targets: [ AppleTV ]
|
||||
@@ -168,14 +187,16 @@ clients:
|
||||
free: true
|
||||
paid: true
|
||||
downloads:
|
||||
- icon: amazon-appstore
|
||||
-
|
||||
type: shield
|
||||
icon: Amazon
|
||||
url: https://www.amazon.com/gp/product/B01ENT3I1Q/ref=mas_pm_mrmc
|
||||
|
||||
- icon: apple-appstore
|
||||
url: https://apps.apple.com/us/app/mrmc/id1059536415
|
||||
|
||||
- icon: google-playstore
|
||||
url: https://play.google.com/store/apps/details?id=tv.mrmc.mrmc
|
||||
-
|
||||
type: app-store
|
||||
id: "1059536415"
|
||||
-
|
||||
type: google-play
|
||||
id: tv.mrmc.mrmc
|
||||
|
||||
- name: "Delfin"
|
||||
targets: [ Linux ]
|
||||
@@ -183,8 +204,8 @@ clients:
|
||||
official: false
|
||||
beta: true
|
||||
downloads:
|
||||
- icon: flathub
|
||||
url: https://flathub.org/apps/cafe.avery.Delfin
|
||||
- type: flathub
|
||||
package: cafe.avery.Delfin
|
||||
|
||||
- name: "Supersonic"
|
||||
targets: [ Windows, Linux, macOS ]
|
||||
@@ -193,10 +214,13 @@ clients:
|
||||
official: false
|
||||
beta: true
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/dweymouth/supersonic
|
||||
- icon: flathub
|
||||
url: https://flathub.org/apps/io.github.dweymouth.supersonic
|
||||
-
|
||||
type: github
|
||||
owner: dweymouth
|
||||
repo: supersonic
|
||||
-
|
||||
type: flathub
|
||||
package: io.github.dweymouth.supersonic
|
||||
|
||||
- name: "Tauon Music Box"
|
||||
targets: [ Windows, Linux ]
|
||||
@@ -204,20 +228,26 @@ clients:
|
||||
oss: https://github.com/Taiko2k/TauonMusicBox
|
||||
official: false
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/Taiko2k/TauonMusicBox
|
||||
- icon: flathub
|
||||
url: https://flathub.org/apps/com.github.taiko2k.tauonmb
|
||||
-
|
||||
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:
|
||||
- icon: github
|
||||
url: https://github.com/jellyfin/jellyfin-mpv-shim
|
||||
- icon: flathub
|
||||
url: https://flathub.org/apps/com.github.iwalton3.jellyfin-mpv-shim
|
||||
-
|
||||
type: github
|
||||
owner: jellyfin
|
||||
repo: jellyfin-mpv-shim
|
||||
-
|
||||
type: flathub
|
||||
package: com.github.iwalton3.jellyfin-mpv-shim
|
||||
|
||||
- name: "Jellyamp"
|
||||
targets: [ Windows, Linux ]
|
||||
@@ -225,8 +255,9 @@ clients:
|
||||
oss: https://github.com/m0ngr31/jellyamp
|
||||
official: false
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/m0ngr31/jellyamp
|
||||
- type: github
|
||||
owner: m0ngr31
|
||||
repo: jellyamp
|
||||
|
||||
- name: "Preserve"
|
||||
targets: [ Browser, Windows, Linux ]
|
||||
@@ -235,10 +266,13 @@ clients:
|
||||
official: false
|
||||
beta: true
|
||||
downloads:
|
||||
- icon: demo
|
||||
-
|
||||
type: gitlab
|
||||
owner: preserve
|
||||
repo: preserve
|
||||
-
|
||||
type: demo
|
||||
url: https://preserveplayer.com/
|
||||
- icon: github
|
||||
url: https://gitlab.com/preserve/preserve
|
||||
|
||||
- name: "Sonixd"
|
||||
targets: [ Windows, Linux, macOS ]
|
||||
@@ -247,8 +281,9 @@ clients:
|
||||
official: false
|
||||
beta: true
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/jeffvli/sonixd
|
||||
- type: github
|
||||
owner: jeffvli
|
||||
repo: sonixd
|
||||
|
||||
- name: "Feishin"
|
||||
targets: [ Browser, Windows, Linux, macOS ]
|
||||
@@ -257,8 +292,9 @@ clients:
|
||||
official: false
|
||||
beta: true
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/jeffvli/feishin
|
||||
- type: github
|
||||
owner: jeffvli
|
||||
repo: feishin
|
||||
|
||||
- name: "Manet"
|
||||
targets: [ iOS ]
|
||||
@@ -267,8 +303,8 @@ clients:
|
||||
price:
|
||||
free: true
|
||||
downloads:
|
||||
- icon: apple-appstore
|
||||
url: https://apps.apple.com/us/app/manet-music/id6470928235
|
||||
- type: app-store
|
||||
id: "6470928235"
|
||||
|
||||
- name: "Fintunes"
|
||||
targets: [ Android, iOS ]
|
||||
@@ -277,15 +313,20 @@ clients:
|
||||
official: false
|
||||
beta: false
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/leinelissen/jellyfin-audio-player
|
||||
- icon: f-droid
|
||||
-
|
||||
type: github
|
||||
owner: leinelissen
|
||||
repo: jellyfin-audio-player
|
||||
-
|
||||
type: shield
|
||||
icon: F-Droid
|
||||
url: https://f-droid.org/en/packages/nl.moeilijkedingen.jellyfinaudioplayer
|
||||
- icon: google-playstore
|
||||
url: https://play.google.com/store/apps/details?id=nl.moeilijkedingen.jellyfinaudioplayer
|
||||
- icon: apple-appstore
|
||||
url: https://apple.co/3MFYIJH
|
||||
|
||||
-
|
||||
type: google-play
|
||||
id: nl.moeilijkedingen.jellyfinaudioplayer
|
||||
-
|
||||
type: app-store
|
||||
id: "1527732194"
|
||||
|
||||
- name: "Blink"
|
||||
targets: [ Windows, Linux, macOS ]
|
||||
@@ -293,8 +334,9 @@ clients:
|
||||
official: false
|
||||
beta: true
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/prayag17/Blink
|
||||
- type: github
|
||||
owner: prayag17
|
||||
repo: Blink
|
||||
|
||||
- name: "Gelli"
|
||||
targets: [ Android ]
|
||||
@@ -303,9 +345,13 @@ clients:
|
||||
official: false
|
||||
beta: false
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/dkanada/gelli
|
||||
- icon: f-droid
|
||||
-
|
||||
type: github
|
||||
owner: dkanada
|
||||
repo: gelli
|
||||
-
|
||||
type: shield
|
||||
icon: F-Droid
|
||||
url: https://f-droid.org/packages/com.dkanada.gramophone
|
||||
|
||||
- name: "JellyBook"
|
||||
@@ -315,12 +361,19 @@ clients:
|
||||
official: false
|
||||
beta: false
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/JellyBookOrg/JellyBook
|
||||
- icon: izzisoft
|
||||
url: https://apt.izzysoft.de/fdroid/index/apk/com.KaraWilson.JellyBook/
|
||||
- icon: testflight
|
||||
url: https://testflight.apple.com/join/lEXKY4Dl
|
||||
-
|
||||
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 ]
|
||||
@@ -328,12 +381,14 @@ clients:
|
||||
official: false
|
||||
beta: true
|
||||
downloads:
|
||||
- icon: demo
|
||||
-
|
||||
type: github
|
||||
owner: Shadfin
|
||||
repo: app
|
||||
-
|
||||
type: demo
|
||||
url: https://main.shadfin-standalone.pages.dev
|
||||
|
||||
- icon: github
|
||||
url: https://github.com/Shadfin/app/pkgs/container/app
|
||||
|
||||
- name: "Symfonium"
|
||||
targets: [ Android ]
|
||||
types: [ Music ]
|
||||
@@ -343,8 +398,8 @@ clients:
|
||||
price:
|
||||
paid: true
|
||||
downloads:
|
||||
- icon: google-playstore
|
||||
url: https://play.google.com/store/apps/details?id=app.symfonik.music.player
|
||||
- type: google-play
|
||||
id: app.symfonik.music.player
|
||||
|
||||
- name: "Jellyflix"
|
||||
targets: [ Android, iOS, Windows, Linux, macOS, Browser ]
|
||||
@@ -354,18 +409,16 @@ clients:
|
||||
price:
|
||||
free: true
|
||||
downloads:
|
||||
- icon: demo
|
||||
-
|
||||
type: demo
|
||||
url: https://jellyflix.kiejon.com/
|
||||
- icon: apple-appstore
|
||||
url: https://apps.apple.com/de/app/jellyflix/id6476043683
|
||||
- text: ".apk"
|
||||
url: https://github.com/jellyflix-app/jellyflix/releases/latest/download/jellyflix.apk
|
||||
- text: ".dmg"
|
||||
url: https://github.com/jellyflix-app/jellyflix/releases/latest/download/jellyflix.dmg
|
||||
- text: "windows.zip"
|
||||
url: https://github.com/jellyflix-app/jellyflix/releases/latest/download/jellyflix-windows.zip
|
||||
- text: "linux.zip"
|
||||
url: https://github.com/jellyflix-app/jellyflix/releases/latest/download/jellyflix-linux.zip
|
||||
-
|
||||
type: app-store
|
||||
id: 6476043683
|
||||
-
|
||||
type: github
|
||||
owner: jellyflix-app
|
||||
repo: jellyflix
|
||||
|
||||
- name: "Streamyfin"
|
||||
targets: [ Android, iOS ]
|
||||
@@ -376,14 +429,21 @@ clients:
|
||||
price:
|
||||
free: true
|
||||
downloads:
|
||||
- icon: apple-appstore
|
||||
url: https://apps.apple.com/us/app/streamyfin/id6593660679
|
||||
- icon: google-playstore
|
||||
url: https://play.google.com/store/apps/details?id=com.fredrikburmester.streamyfin
|
||||
- icon : testflight
|
||||
-
|
||||
type: app-store
|
||||
id: "6593660679"
|
||||
-
|
||||
type: shield
|
||||
icon: App Store
|
||||
label: TestFlight
|
||||
url: https://testflight.apple.com/join/CWBaAAK2
|
||||
- text: ".apk"
|
||||
url: https://github.com/fredrikburmester/streamyfin/releases
|
||||
-
|
||||
type: google-play
|
||||
id: com.fredrikburmester.streamyfin
|
||||
-
|
||||
type: github
|
||||
owner: fredrikburmester
|
||||
repo: streamyfin
|
||||
|
||||
- name: "Switchfin"
|
||||
targets: [ NintendoSwitch, macOS, Linux, Windows ]
|
||||
@@ -393,8 +453,9 @@ clients:
|
||||
price:
|
||||
free: true
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/dragonflylee/switchfin/releases/latest
|
||||
- type: github
|
||||
owner: dragonflylee
|
||||
repo: switchfin
|
||||
|
||||
- name: "tsukimi"
|
||||
targets: [ Linux, Windows ]
|
||||
@@ -404,32 +465,9 @@ clients:
|
||||
price:
|
||||
free: true
|
||||
downloads:
|
||||
- icon: github
|
||||
url: https://github.com/tsukinaha/tsukimi/releases
|
||||
|
||||
icons:
|
||||
github:
|
||||
single: "assets/clients/icons/github.png"
|
||||
flathub:
|
||||
single: "assets/clients/icons/flathub.png"
|
||||
apple-appstore:
|
||||
single: "assets/clients/icons/appstore.png"
|
||||
google-playstore:
|
||||
single: "assets/clients/icons/googleplay.png"
|
||||
docker-hub:
|
||||
single: "assets/clients/icons/docker.png"
|
||||
f-droid:
|
||||
single: "assets/clients/icons/fdroid.png"
|
||||
amazon-appstore:
|
||||
single: "assets/clients/icons/amazon.png"
|
||||
izzisoft:
|
||||
single: "assets/clients/icons/izzisoft.png"
|
||||
openrepos:
|
||||
single: "assets/clients/icons/openrepos.png"
|
||||
testflight:
|
||||
single: "assets/clients/icons/testflight.png"
|
||||
demo:
|
||||
single: "assets/clients/icons/demo.png"
|
||||
- type: github
|
||||
owner: tsukinaha
|
||||
repo: tsukimi
|
||||
|
||||
targets:
|
||||
- key: Browser
|
||||
@@ -491,4 +529,4 @@ types:
|
||||
- key: Reader
|
||||
badge: "📖"
|
||||
display: Reader
|
||||
section: true
|
||||
section: true
|
||||
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |