Floatplane channel plugin for Jellyfin 10.10.x: browse, HLS proxy, cookie session, CI release
Some checks failed
release / build-release (push) Has been cancelled

- 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>
This commit is contained in:
2026-10-25 09:42:27 +01:00
commit 9e33a343ab
162 changed files with 52004 additions and 0 deletions

View File

@@ -0,0 +1,81 @@
import { Args, Channels, Resolutions, Settings } from "./types";
export const defaultResolutions: Resolutions = ["360", "720", "1080", "2160"];
export const defaultSubChannels: Record<string, Channels> = {
"59f94c0bdd241b70349eb72b": [
{
title: "TalkLinked",
skip: false,
isChannel: "(post) => post.title?.toLowerCase().includes('talklinked')",
},
{
title: "TechLinked Shorts",
skip: false,
isChannel: "(post) => post.title?.toLowerCase().includes('tl short: ')",
},
{
title: "The WAN Show",
skip: false,
isChannel: "(post) => isChannel(post, '63fe42c309e691e4e36de93d') && post.title?.toLowerCase().includes('- wan show')",
},
{
title: "LMG Livestream VODs",
skip: false,
isChannel: "(post) => post.title?.toLowerCase().includes('livestream vod – ')",
},
],
};
export const defaultArgs: Args = {
headless: false,
updateCheck: true,
plexUsername: "",
plexPassword: "",
sanityCheck: false,
dbPath: "./db",
ffmpegPath: "",
settingsPath: "",
};
export const defaultSettings: Settings = {
__SettingsWiki: "https://github.com/Inrixia/Floatplane-Downloader/blob/master/wiki/settings.md",
runQuickstartPrompts: true,
floatplane: {
videosToSearch: 5,
videoResolution: "1080",
waitForNewVideos: true,
seekAndDestroy: [],
},
maxDownloadSpeed: -1,
plex: {
sectionsToUpdate: [],
enabled: false,
token: "",
},
filePathFormatting: "./videos/%channelTitle%/%channelTitle% - S%year%E%month%%day%%hour%%minute%%second% - %videoTitle%",
extras: {
stripSubchannelPrefix: true,
downloadArtwork: true,
downloadCaptions: true,
saveNfo: true,
considerAllNonPartialDownloaded: false,
},
artworkSuffix: "",
postProcessingCommand: "",
subscriptions: {},
metrics: {
prometheusExporterPort: null,
contributeMetrics: true,
},
notifications: {
telegram: {
enabled: false,
token: "",
chatId: "",
},
discord: {
enabled: false,
webhookUrl: "",
},
},
};