feat: new client icons (#159)

This commit is contained in:
Daniel
2025-02-03 12:06:23 +01:00
committed by GitHub
parent 3eef8d4a4e
commit b008abb05b
16 changed files with 449 additions and 255 deletions
@@ -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
+256 -100
View File
@@ -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 generators “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 (`![](https://img.shields.io/github/downloads/owner/repo/total)`). 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:
- Its official, in beta, open-sourced on GitHub.
- It supports `iOS` and `AppleTV`.
- Theres 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 clients `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 clients `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 clients data, determining defaults for `official` (if `oss` is under GitHubs `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 environments 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 clients `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 clients `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 ]`.
+191 -153
View File
@@ -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
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB