Self-hostingAuto-hébergement

Your Tentacle TV server, at homeVotre serveur Tentacle TV, chez vous

Tentacle TV runs its own server, which works with Jellyfin — a separate program it does not replace. It holds accounts, invites, plugins and TV pairing; Jellyfin keeps holding your media. Two ready Docker stacks or a Windows app, one guided wizard, a few minutes — remote access included. Tentacle TV fait tourner son propre serveur, qui fonctionne avec Jellyfin — un programme distinct, qu’il ne remplace pas. Il porte les comptes, les invitations, les greffons et le jumelage des TV ; Jellyfin garde vos médias. Deux piles Docker prêtes ou une app Windows, un assistant guidé, quelques minutes — accès à distance compris.

Current releaseVersion actuelle v0.0.0 Docker · no database to installaucune base à installer or a Windows appou une app Windows A few minutesQuelques minutes

Two ways to installDeux façons d’installer

The same server, the same wizard, the same apps. Pick what suits your machine.Le même serveur, le même assistant, les mêmes applications. Prenez ce qui convient à votre machine.

With DockerAvec Docker

Linux, NAS (Synology, Unraid…), Mac, or any machine with Docker Compose or Podman. Runs day and night, best for access from the Internet.Linux, NAS (Synology, Unraid…), Mac, ou toute machine avec Docker Compose ou Podman. Tourne jour et nuit, le mieux pour l’accès depuis Internet.

On a Windows PCSur un PC Windows

Tentacle Server, an app of the Microsoft Store: no Docker, no terminal. It lives next to the clock, starts with Windows, and can install Jellyfin for you.Tentacle Server, une app du Microsoft Store : sans Docker ni terminal. Elle vit près de l’horloge, démarre avec Windows et peut installer Jellyfin pour vous.

Install with Docker, in three stepsInstaller avec Docker, en trois étapes

You need a machine with Docker Compose (or Podman). Nothing to edit, no password to write, no database to install: Tentacle keeps its data in one file of its volume.Il faut une machine avec Docker Compose (ou Podman). Rien à éditer, aucun mot de passe à écrire, aucune base à installer : Tentacle garde ses données dans un fichier de son volume.

  1. Pick your stackChoisir sa pile

    Tentacle and Jellyfin. Start here if you have nothing yet: Jellyfin comes from its official image (jellyfin/jellyfin), unmodified; it is locked for you on startup and configured by the wizard.Tentacle et Jellyfin. Commencez ici si vous n’avez encore rien : Jellyfin vient de son image officielle (jellyfin/jellyfin), non modifiée ; il est verrouillé pour vous au démarrage, et l’assistant le configure.

    Terminal
    mkdir tentacle && cd tentacle
    curl -fsSLo compose.yaml https://raw.githubusercontent.com/Knaox/Tentacle-TV/main/stacks/tentacle-full/compose.yaml
    docker compose up -d

    Already running Tentacle with MariaDB? Keep your stack: the update migrates it by itself — Migrating to SQLite.Tentacle tourne déjà avec MariaDB ? Gardez votre pile : la mise à jour la migre d’elle-même — Migration vers SQLite.

  2. From home, no code — elsewhere, the setup codeDepuis la maison, pas de code — ailleurs, le code d’installation

    The first browser that reaches the server directly from your home network opens the wizard without a code. From anywhere else, the wizard asks for a one-time code that the server prints in its log — only someone with access to the machine can read it (where to find it).Le premier navigateur qui joint le serveur directement depuis le réseau de la maison ouvre l’assistant sans code. De partout ailleurs, l’assistant demande un code à usage unique que le serveur écrit dans son journal — seul qui a la main sur la machine peut le lire (où le trouver).

    Terminal
    docker compose logs tentacle

    Lost or already used? docker compose exec tentacle tentacle setup token gives a new one.Perdu ou déjà utilisé ? docker compose exec tentacle tentacle setup token en donne un neuf.

  3. Answer the wizardRépondre à l’assistant

    Open http://<your-machine>:3000. One question per screen, a few minutes in all:Ouvrez http://<votre-machine>:3000. Une question par écran, quelques minutes en tout :

    • Jellyfin configured for you — or an existing Jellyfin server connected, with its API key created automatically;Jellyfin configuré pour vous — ou un serveur Jellyfin existant relié, sa clé d’API créée d’office ;
    • your administrator account, the metadata language, your libraries (Movies and Shows proposed);votre compte administrateur, la langue des métadonnées, vos bibliothèques (Films et Séries proposés) ;
    • remote access, optional, tested from the outside — then where to drop your files, and the apps.l’accès à distance, facultatif, testé depuis l’extérieur — puis où déposer vos fichiers, et les applications.

    Each screen has its page in the documentation, with screenshots: the wizard’s “Need help?” opens it.Chaque écran a sa page dans la documentation, captures à l’appui : le « Besoin d’aide ? » de l’assistant l’ouvre.

Configuration

Optional settingsRéglages facultatifs

Every value has a working default. To change one, create a .env file next to compose.yaml (the stack’s .env.example lists them all), add the line, then run docker compose up -d again. Jellyfin and its API key are set in the wizard.Chaque valeur a un défaut qui marche. Pour en changer une, créez un fichier .env à côté de compose.yaml (le .env.example de la pile les liste toutes), ajoutez la ligne, puis relancez docker compose up -d. Jellyfin et sa clé d’API se règlent dans l’assistant.

Variable RoleRôle DefaultDéfaut
MEDIA_PATHTentacle + Jellyfin stack: your media folder (Jellyfin sees it as /media)Pile Tentacle + Jellyfin : votre dossier des médias (Jellyfin le voit en /media)./media
TENTACLE_PORTTentacle’s port on this machineLe port de Tentacle sur cette machine3000
JELLYFIN_PORTTentacle + Jellyfin stack: Jellyfin’s portPile Tentacle + Jellyfin : le port de Jellyfin8096
PUID · PGIDThe account owning your files — never rootLe compte propriétaire de vos fichiers — jamais root1000
TZTime zoneFuseau horaireEurope/Paris
TENTACLE_VERSIONPin a version to update only when you decideUne version figée, pour ne mettre à jour que quand vous le décidezlatest
Architecture

Who talks to whomQui parle à qui

The apps only ever talk to your Tentacle server. It proxies Jellyfin, so Jellyfin itself never needs to be exposed.Les applications ne parlent qu’à votre serveur Tentacle. Il relaie Jellyfin : Jellyfin n’a jamais besoin d’être exposé.

AppsApplications Web · macOS · Windows Linux · iOS · Android Apple TV · Android TV LG webOS one account, everywhereun compte, partout Tentacle TV serverServeur Tentacle TV /api/* accounts, invites, tickets,comptes, invitations, tickets, pairing, plugins, configjumelage, greffons, config /api/jellyfin/* proxy: browsing, streaming,relais : navigation, lecture, watch stateétat de visionnage Jellyfin your media, untouchedvos médias, intacts SQLite tentacle.db, one filetentacle.db, un fichier
A TV pairs once through a public relay (pair.tentacletv.app): it receives your server’s address and a token, then talks to your server directly. Une TV se jumelle une fois via un relais public (pair.tentacletv.app) : elle reçoit l’adresse de votre serveur et un jeton, puis parle directement à votre serveur.
LayerCoucheTechnologyTechnologie
WebReact 19, Vite 6, Tailwind CSS, Framer Motion
DesktopBureauElectron (Windows, macOS, Linux), mpv
MobileReact Native, Expo, NativeWind
TVReact Native — ExoPlayer/Media3 (Android TV), AVPlayer (tvOS); LG webOS: web client served by your serverReact Native — ExoPlayer/Media3 (Android TV), AVPlayer (tvOS) ; LG webOS : client web servi par votre serveur
BackendFastify 5, Prisma 6, SQLite
VideoVidéohls.js (web), mpv (desktopbureau), react-native-video
LanguageLangageTypeScript, strict
NextEnsuite

Now connect your screensBranchez maintenant vos écrans

Install the apps and sign in with your server address. On a TV, pair with a four-character code — nothing to type on the remote.Installez les applications et connectez-vous avec l’adresse de votre serveur. Sur une TV, jumelez avec un code à quatre caractères — rien à taper à la télécommande.