MasutaYunikon d5c37e8f2c feat!: migration vers nouvelle architecture API et scraper par série
BREAKING CHANGE: suppression de torrent_final.json au profit d'un système
de fichiers par série (series/{id}.json) avec cache mémoire GitHub 6h.
Version majeure — nécessite un nouveau scraper et une mise à jour complète.

feat(api): cache mémoire GitHub TTL 6h avec invalidation via /api/update

Plus de fichiers locaux dans /config pour les torrents. Les données sont
fetchées depuis GitHub (available.json + series/{id}.json) et mises en
cache 6h. /api/update vide le cache pour forcer le rechargement.

feat(api): adaptation complète à la nouvelle structure API Fankai

- normalizeSerie/Season/Episode pour aplatir images.poster → poster_image
- Proxy wsrv.nl pour redimensionner les images (poster 300px, fanart 1280px,
  thumbnail 400px) et réduire le temps de chargement
- duration en secondes → affichage en minutes dans SerieView

feat(organize): refonte complète sans torrent_final.json

- organize-worker.ts reçoit seriesData via message au lieu de lire un fichier
- buildFileMap construit filename→{season_number,original_filename} depuis paths[]
- enrichSeriesDataWithOriginalFilenames fetche /seasons/{id}/episodes avant
  de passer les données au worker pour le renommage correct des fichiers
- Suppression de SERIE_TITLE_GITLAB_MAP (Kaï→Kai résolu côté API)
- scanMediaPath adapté : plus de torrentsPath, prend seriesData en paramètre

feat(api): matching torrents par hiérarchie série/saison/épisode

- Torrents niveau série → pack_integrale
- Torrents niveau saison → pack_saison (indexé par season_number)
- Torrents niveau épisode → episode
- Matching via paths[torrentIdx] pour résoudre episode↔fichier

feat(series-view): badge "Hors Fankai" sur épisodes de torrents manuels
feat(series-view): tooltip raw name sur boutons intégrale via :title
feat(scraper): extraction nom bencode dans raw pour torrents locaux
fix(series): boutons saison Yu-Gi-Oh via fallback season_number
fix(catalogue): état download basé sur épisodes organisés vs torrents bruts

Release-As: 2.0.0
2026-03-23 04:04:12 +01:00
2026-03-13 04:25:09 +01:00
2026-03-11 15:47:46 +01:00
2026-03-21 04:21:09 +01:00
2026-03-10 22:36:34 +01:00
2026-03-13 04:21:34 +01:00
2026-03-10 22:36:34 +01:00
2026-03-10 22:36:34 +01:00
2026-03-10 22:36:34 +01:00
2026-03-10 22:36:34 +01:00

Fankarr

Version Docker Image Size Docker Pulls GitHub Actions License Node Vue

Gestionnaire de téléchargements pour le catalogue Fankai Inspiré de Radarr/Sonarr — interface dédiée aux éditions Kai & Yabai


Catalogue

Vue catalogue : toutes les séries Fankai avec leur état d'organisation. Les badges indiquent si les fichiers sont déjà présents dans votre médiathèque Jellyfin.


Fonctionnalités

  • Catalogue complet des séries Fankai avec affiches, statut et badges d'état
  • Téléchargement en un clic vers qBittorrent — par épisode, par saison ou intégrale
  • Organisation automatique des fichiers téléchargés vers votre médiathèque (hardlink ou déplacement)
  • Suivi par épisode — badge ✓ organisé sur chaque épisode et compteur par saison
  • Notifications toast automatiques quand une organisation se termine
  • Page téléchargements avec statut d'organisation et badge erreurs avec détail au hover
  • Logs centralisés avec filtre par niveau/source, rotation automatique et clear depuis l'UI
  • Multi-client torrent — architecture extensible (qBittorrent supporté)
  • Authentification par mot de passe avec session JWT
  • Compatible Runtipi / Docker

Serie

Vue série : détail des épisodes avec leur état de disponibilité torrent et d'organisation dans Jellyfin.


Download

Vue téléchargements : suivi en temps réel de l'organisation avec détail des erreurs au survol.


Logs

Page logs : historique complet des événements avec filtres et gestion de la taille.


Données torrent — Scraper

Les données du catalogue sont récupérées depuis le repo fankarr-scraper.

Ce repo contient un pipeline de scripts Python qui collecte, parse et résout les torrents Fankai depuis les trackers publics, puis les croise avec l'API metadata de Fankai pour identifier chaque épisode. Les scripts tournent automatiquement toutes les 6 heures via GitHub Actions et publient le fichier torrent_final.json dans le repo.

Fankarr récupère ce fichier au démarrage et via le bouton Mettre à jour dans les paramètres. Aucun scraping ne se fait en local.


Installation

Docker Compose (recommandé)

Prérequis : Docker + Docker Compose, qBittorrent accessible en réseau.

services:
  fankarr:
    image: masutayunikon/fankarr:latest
    container_name: fankarr
    environment:
      - PUID=1000        # UID de votre utilisateur (id -u)
      - PGID=1000        # GID de votre utilisateur (id -g)
      - TZ=Europe/Paris  # Votre timezone
    volumes:
      - ./config:/config  # Config, logs, base de données
      - /votre/chemin:/media  # Racine de votre médiathèque (voir note hardlinks)
    ports:
      - 9898:9898
    restart: unless-stopped
docker compose up -d

⚠️ Note sur les hardlinks : Pour que le mode hardlink fonctionne, vos dossiers de téléchargement complets et votre médiathèque doivent être sur le même filesystem. La solution recommandée est de monter un seul volume racine (ex: /votre/chemin:/media) et de configurer vos chemins à l'intérieur — comme le font Radarr et Sonarr.

Vous pouvez tout à fait monter plusieurs volumes si vous le souhaitez, mais dans ce cas les hardlinks ne seront pas possibles entre deux volumes différents et Fankarr basculera automatiquement en copie.

Binaire autonome (Windows / Linux / macOS)

Téléchargez l'archive correspondant à votre système depuis les Releases GitHub :

Système Archive
Windows x64 fankarr-windows-x64.zip
Linux x64 fankarr-linux-x64.zip
macOS (Apple Silicon) fankarr-macos.zip

Extrayez l'archive — elle contient le binaire et le dossier public/ qui doivent rester ensemble :

fankarr-windows-x64/
├── fankarr.exe   ← lancer ce fichier
└── public/       ← ne pas déplacer séparément

Linux / macOS : rendre le binaire exécutable avant le premier lancement :

chmod +x fankarr
./fankarr

Fankarr sera accessible sur http://localhost:9898. Les données (config, logs, base de données) sont sauvegardées dans un dossier data/ créé automatiquement à côté du binaire.

Variables d'environnement

Variable Défaut Description
PUID 1000 UID utilisateur pour les permissions fichiers (Docker)
PGID 1000 GID utilisateur pour les permissions fichiers (Docker)
TZ — Timezone (ex: Europe/Paris)
PORT 9898 Port d'écoute du serveur
JWT_SECRET auto-généré Secret JWT — généré automatiquement dans /config/secret.key si absent
GITHUB_RAW_URL repo scraper URL du torrent_final.json à utiliser

Premier démarrage

  1. Ouvrir http://localhost:9898
  2. Créer un mot de passe à la première connexion
  3. Aller dans Paramètres → ajouter votre client qBittorrent
  4. Vérifier les chemins completePath et mediaPath
  5. Choisir le mode d'organisation : hardlink (recommandé) ou move
  6. Retourner au catalogue et télécharger

Organisation des fichiers

Fankarr organise automatiquement les fichiers terminés toutes les 30 secondes vers la structure attendue par Jellyfin :

/media/Kai/
└── Black Lagoon Henshū/
    └── Saison 1/
        ├── Black Lagoon Henshū S01E01.mkv
        ├── Black Lagoon Henshū S01E02.mkv
        └── ...

Le mode hardlink est recommandé si vos dossiers complete et media sont sur le même filesystem — les fichiers ne sont pas déplacés, qBittorrent continue de seeder.


Runtipi

Fankarr est disponible dans l'appstore personnalisé. Pour l'installer :

  1. Dans Runtipi, aller dans Paramètres → App Stores
  2. Ajouter l'URL : https://github.com/Masutayunikon/runtipi-appstore
  3. Fankarr apparaît dans le catalogue → Installer

Stack technique

Couche Technologie
Frontend Vue 3 + Vite + Tailwind CSS
Backend Express 5 + TypeScript
Auth JWT + bcrypt
Packaging Docker node:20-slim + pnpm + gosu (PUID/PGID)
Packaging binaire Bun (self-contained, pas de Node requis)

Liens

S
Description
No description provided
Readme
13 MiB
0 Stars 1 Watchers 0 Forks
Languages
Vue 50.7%
TypeScript 48%
CSS 1%
Dockerfile 0.2%