Files
jellyfin-plugin-floatplane/doc/research/reference-sources/fpdl_settings.md
claude 9e33a343ab
Some checks failed
release / build-release (push) Has been cancelled
Floatplane channel plugin for Jellyfin 10.10.x: browse, HLS proxy, cookie session, CI release
- IChannel: creators -> sub-channels -> video posts (public listing API, search mapped)
- IRequiresMediaInfoCallback -> signed proxy URLs; stream controller rewrites HLS so the
  AES-128 key is fetched server-side with the session cookie, segments stay on the CDN
- delivery/info cached per token lifetime and throttled (~2/min)
- config page: paste sails.sid + validate, extra creators, quality, search test
- scripts/package.sh -> plugin folder + zip + md5 + manifest.json; Gitea release workflow
- research docs, HAR analysis (HAR itself gitignored), install-pi5.sh

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-25 09:42:27 +01:00

7.3 KiB

Settings Wiki

Defaults for any setting is defined in the Defaults File.
You can find settings under /db/setttings.json
Note: Settings can be set in settings.json, using environment variables or passed in as arguments. For more info on how this work see the section in environment variables in the Docker Wiki and Advanced Env Info

runQuickstartPrompts:
Setting this to true will cause the quickStartPrompts to run on startup.

"runQuickstartPrompts": false

Floatplane

floatplane.videosToSearch:
Number of videos to search through when looking for undownloaded videos per subscription.

"floatplane": {
    "videosToSearch": 5
}

floatplane.videoResolution:
Resolution to download the videos in. See _availableResolutions for options.

"floatplane": {
    "videoResolution": 1080
}

floatplane.waitForNewVideos:
Controls if the downloader should wait for new videos to download after finishing or just exit

"floatplane": {
    "waitForNewVideos": true
}

floatplane.seekAndDestroy:
You can put video id's here and the downloader will find, sort and download them normally.

"floatplane": {
    "seekAndDestroy": ["xL64iWbreb"]
}

General Options

filePathFormatting:
This defined the path/filename formatting for downloaded videos...
You can refer to the Path Formatting Options section in this wiki for what can be used.
Strings surounded by % will be replaced with their respective values.

"filePathFormatting": "./videos/%channelTitle%/%channelTitle% - S%year%E%month%%day%%hour%%minute%%second% - %videoTitle%"

Path Formatting Options

The following options are available to be used:

  • %channelTitle% Title of the channel the video belongs to
  • %year% Year the video was released
  • %month% Month the video was released
  • %day% Day the video was released
  • %hour% Hour the video was released
  • %minute% Minute the video was released
  • %second% Second the video was released
  • %videoTitle% Title of the video

artworkSuffix:
Suffix appended to artwork filename.
Added for Kodi support as Kodi looks for artwork in the format VideoName-thumb.png

"artworkSuffix": ""

maxDownloadSpeed:
The maximum speed to download at in mbps.

"maxDownloadSpeed": 8

postProcessingCommand:
A command to run after each video has sucessfully downloaded.
You can refer to the Path Formatting Options section in this wiki for what can be used.
Strings surounded by % will be replaced with their respective values.

"postProcessingCommand": "echo %videoTitle% > example.txt"

Extras

extras.stripSubchannelPrefix:
Removes the Subchannel prefix from the video title when a video is sorted into a subchannel.
Note that this only works for videos that are sorted using title matching for channels. Newer channel id matching will not remove any prefix.
For example:
TechLinked - SXXEXX - VideoTitle - true
vs
TechLinked - SXXEXX - TL: VideoTitle - false

"extras": {
    "stripSubchannelPrefix": true
}

extras.downloadArtwork:
Saves video thubnails alongside each video. These are required for nice thumbnails in Plex.

"extras": {
    "downloadArtwork": true
}

extras.downloadCaptions:
Saves video captions alongside each video.

"extras": {
    "downloadCaptions": true
}

extras.safeNfo:
Saves video metadata to nfo files alongside each video.

"extras": {
    "saveNfo": true
}

extras.considerAllNonPartialDownloaded:
When this is set to true the downloader will skip size checks for non .mp4 files.
This may result in files without muxed metadata and should only be used for recovery if your db is lost.

"extras": {
    "considerAllNonPartialDownloaded": true
}

Plex

Use quickstartPrompts to easily set plex settings.

plex.sectionsToUpdate:
Array of sections to update on refresh.
Each "section" is a object containing the name of the section and the server it belongs to.

"plex": {
    "sectionsToUpdate": [
        {
            "server": "ServerA",
            "section": "Floatplane"
        },
        {
            "server": "ServerB",
            "section": "Floatplane"
        }
    ]
}

plex.token:
Plex token generated from your login details for updating remote servers.

"plex": {
    "token": "xM__2bulgyDf_wulgyE5owodds"
}

Subscriptions:

All the Floatplane creators you are subscribed to.
image At the creator level you can see the creatorId and plan. You can also choose to skip a creator and not download videos from them.
You can add custom channels to a creator if you want.

First come first served, the first channel a video matches to is what it goes into, channels are checked top to bottom in the config. Videos cannot be sorted into multiple channels.

A channel is made up of a title, skip, isChannel and optionally daysToKeepVideos.
title is the nice name used for the channel.
skip can be set to true to skip downloading videos matched on the given channel.
isChannel function that returns true or false if the video should be sorted into this channel (more on this further down).
daysToKeepVideos is the optional number of days to keep videos for this channel. 2 would mean only videos released within the last two days are downloaded and any older will be automatically deleted if previously downloaded.


isChannel is a function that accepts a post which is the post the video belongs to and video which is one or more videos belonging to that post.

If it returns true the video is sorted into the channel, false and its not. This gives the flexibility to create completely custom channels based on any properties of a post or video.

For example:

{
	"title": "Creators with Technology in their Description",
	"skip": false,
	"isChannel": "(post, video) => post.creator?.description?.toLowercase()?.includes('technology')",
	"daysToKeepVideos": 5
}

Metrics:

metrics.prometheusExporterPort:
Default is null if set to a number prometheus metrics will be made availible at that port.

"metrics": {
    "prometheusExporterPort": 8080,
}

metrics.contributeMetrics:
If true metrics will be included in the aggregate dashboard.

"metrics": {
    "contributeMetrics": true
}