Przejdź do treści
Portal poradnikowy

Floppy zamiast Trakt, Letterboxd i TV Time: jak uruchomić na własnym serwerze jeden tracker filmów, seriali, książek, gier, muzyki i podcastów

TV Time zakończył działalność w lipcu 2026 roku. Dla osób, które zapisywały tam obejrzane seriale, daty odcinków i oceny, zamknięcie usługi oznaczało konieczność przeniesienia historii. Kto nie zachował eksportu, mógł stracić dane gromadzone przez lata. Podobny problem może pojawić się przy każdej usłudze, w której użytkownik nie kontroluje bazy.

Floppy pozwala prowadzić własny tracker filmów, seriali, anime, książek, komiksów, gier, muzyki i podcastów. Aplikację uruchamia się na własnym serwerze, NAS-ie albo VPS-ie. Zamiast kilku oddzielnych dzienników otrzymujemy jedną bibliotekę z historią, ocenami, postępem i listami.

Nie jest to jednak kopia Letterboxd ani Trakt. Floppy nie odtwarza ich całej społeczności i nie zapewnia identycznych integracji. Dochodzą również obowiązki administratora: aktualizacje, bezpieczeństwo i kopie zapasowe. W zamian użytkownik kontroluje właściwą bazę historii.

Opis dotyczy Floppy v26.10.22, wydanego 23 października 2026 roku. Przykład wykorzystuje Docker Compose, SQLite i Redis oraz obraz ghcr.io/dannyvfilms/floppy:26.10.22. Konfiguracja opiera się na dokumentacji projektu; nie jest przedstawiana jako rezultat własnego testu instalacyjnego.

Floppy zamiast Trakt i Letterboxd: co obsługuje i kiedy własny tracker ma sens?

Największą zaletą Floppy jest połączenie różnych rodzajów mediów. Można śledzić obejrzane filmy i odcinki seriali, czytane książki, mangę, komiksy, gry wideo i planszowe, słuchaną muzykę oraz podcasty. Aplikacja oferuje także statystyki, kalendarz premier, własne listy i rejestrowanie ponownego korzystania z mediów.

W praktyce trzeba odróżnić trzy rodzaje informacji:

  • Historia — zapis konkretnego zdarzenia, np. obejrzenia filmu 12 października i ponownego seansu 20 października.
  • Status i postęp — informacja, czy film jest planowany, serial rozpoczęty albo książka częściowo przeczytana.
  • Collection — ewidencja posiadanych egzemplarzy, np. filmu na Blu-ray, książki papierowej albo gry w wersji cyfrowej.

To rozróżnienie ma znaczenie podczas codziennego korzystania i migracji. Film oznaczony jako obejrzany niekoniecznie ma osobny wpis w historii z dokładną datą. Podobnie dodanie pliku przez Radarr lub Sonarr nie dowodzi, że użytkownik go obejrzał.

Przykładowy sposób pracy wygląda następująco: wyszukujesz film, dodajesz go do biblioteki i oznaczasz jako planowany. Po seansie rejestrujesz obejrzenie, ustawiasz ocenę i datę. Jeśli oglądasz go ponownie, zapisujesz kolejne zdarzenie historii. Dzięki temu dwa seanse pozostają dwoma zdarzeniami, a nie jednym statusem watched.

Przy książkach i komiksach ważniejszy jest postęp czytania. Wydanie v26.10.22 obsługuje również rejestrowanie czasu czytania przez funkcję Check-in. Rozbudowano też Collection o daty, ceny, waluty oraz edycję posiadanych egzemplarzy.

Funkcja Floppy Trakt Letterboxd
Historia filmów i daty seansów Tak Tak Tak, Diary
Historia odcinków seriali Tak Tak Poza głównym zastosowaniem
Książki, gry, muzyka, podcasty Tak Poza głównym zakresem Poza głównym zakresem
Automatyczne rejestrowanie odtworzeń Wybrane integracje Rozbudowany ekosystem Nie jest główną funkcją
Społeczność i recenzje Ograniczone funkcje udostępniania Funkcje społecznościowe Rozbudowana społeczność filmowa
Własny serwer Tak Nie Nie

Floppy ma sens przede wszystkim jako prywatny dziennik mediów. Jeśli największą wartością Letterboxd są recenzje znajomych i odkrywanie filmów, pozostawienie konta nadal jest uzasadnione. Trakt będzie wygodniejszy, gdy priorytetem jest szeroka współpraca z zewnętrznymi aplikacjami bez administrowania własnym serwerem.

Floppy jest bezpłatnym oprogramowaniem open source, ale serwer generuje koszty. Jeśli masz już mini-PC, NAS albo host Proxmox, możesz wykorzystać istniejący sprzęt. Dla osobnego VPS-a rozsądnym punktem wyjścia są 2 vCPU, 4 GB RAM i około 40 GB SSD. Przykładowy budżet 20–35 zł miesięcznie oznacza 240–420 zł rocznie, bez ewentualnej opłaty za niezależne kopie danych. To orientacyjny koszt infrastruktury, nie wynik pomiaru Floppy.

Projekt obsługuje profile zasobów standard, constrained i minimal. Instalacja z 2 GB RAM jest możliwa, ale 4 GB daje większy zapas dla importów i zadań w tle. Na telefonie można zainstalować Floppy jako PWA. Nie zapewnia to pełnej pracy offline — dostęp do biblioteki i zapisywanie zmian wymagają połączenia z serwerem.

Instalacja Floppy przez Docker Compose: SQLite, Redis i bezpieczny dostęp

Poniższy wariant zakłada Linux z Docker Engine i Docker Compose v2. Dane SQLite znajdują się na lokalnym dysku, Redis pracuje w prywatnej sieci Docker, a interfejs Floppy jest dostępny początkowo tylko przez localhost. Nie trzeba otwierać publicznego portu aplikacji.

1. Przygotuj katalogi i sekret

Zaloguj się na serwer przez SSH i wykonaj:

mkdir -p "$HOME/floppy/db" "$HOME/floppy/backups"
cd "$HOME/floppy"
umask 077
printf 'SECRET=%s\n' "$(openssl rand -hex 32)" > .env
chmod 600 .env

Sekret zostanie wygenerowany lokalnie, a nie skopiowany z poradnika. Zachowaj go razem z zabezpieczoną kopią konfiguracji. Zmiana sekretu może uniemożliwić odczyt wcześniej zapisanych danych uwierzytelniających integracji.

Na potrzeby tej instalacji nie są wymagane klucze Trakt ani TMDB. Konfiguruj je później, gdy będziesz uruchamiać funkcje odpowiedniego dostawcy.

2. Utwórz plik docker-compose.yml

services:
  floppy:
    image: ghcr.io/dannyvfilms/floppy:26.10.22
    restart: unless-stopped
    stop_grace_period: 150s

    depends_on:
      redis:
        condition: service_healthy

    environment:
      SECRET: "${SECRET:?Ustaw SECRET w .env}"
      REDIS_URL: "redis://redis:6379"
      REGISTRATION: "True"
      ADMIN_ENABLED: "False"
      DEMO_ACCOUNT_ENABLED: "False"
      DEBUG: "False"
      TZ: "Europe/Warsaw"
      DB_SNAPSHOT_ENABLED: "True"

    volumes:
      - ./db:/floppy/db
      - ./backups:/floppy/backups

    ports:
      - "127.0.0.1:8000:8000"

    networks:
      - floppy-net

  redis:
    image: redis:8-alpine
    restart: unless-stopped

    command:
      - redis-server
      - --appendonly
      - "yes"
      - --save
      - ""
      - --maxmemory
      - "256mb"
      - --maxmemory-policy
      - volatile-lru

    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 3s
      retries: 10

    volumes:
      - redis_data:/data

    networks:
      - floppy-net

volumes:
  redis_data:

networks:
  floppy-net:
    driver: bridge

Obraz Floppy ma przypięte konkretne wydanie. Redis używa taga 8-alpine, który może otrzymywać aktualizacje poprawkowe. Jeśli potrzebujesz w pełni odtwarzalnego środowiska, przypnij również Redis do zweryfikowanego digestu.

Znaczenie mają trzy elementy konfiguracji:

  • ./db:/floppy/db — trwały katalog bazy SQLite, domyślnie db.sqlite3.
  • ./backups:/floppy/backups — katalog eksportów i snapshotów.
  • 127.0.0.1:8000:8000 — port dostępny tylko lokalnie na serwerze.

SQLite domyślnie wykorzystuje tryb WAL. Aktywnej bazy nie umieszczaj bezpośrednio na udziale NFS lub SMB/CIFS. Do tego celu użyj lokalnego dysku albo odpowiedniego storage blokowego. Gdy potrzebujesz oddzielnego serwera bazy, Floppy obsługuje PostgreSQL przez konfigurację DB_HOST i pozostałych zmiennych DB_*. Samo ustawienie DATABASE_URL nie jest właściwą metodą przełączania bazy.

3. Uruchom Floppy i sprawdź diagnostykę

docker compose config --quiet
docker compose up -d
docker compose ps
docker compose logs --tail=100 floppy

docker compose exec floppy \
  python manage.py floppy_preflight

Diagnostyka floppy_preflight kontroluje między innymi ścieżki danych, konfigurację, SQLite, migracje i Redis. Status FAIL wymaga usunięcia wskazanej przyczyny. Jeśli kontener restartuje się i nie można wykonać exec, użyj:

docker compose run --rm floppy \
  python manage.py floppy_preflight

Nie usuwaj plików db.sqlite3-wal ani db.sqlite3-shm jako sposobu naprawy. Mogą zawierać informacje istotne dla spójności aktywnej bazy.

4. Utwórz konto i zamknij rejestrację

Na zdalnym serwerze otwórz tunel SSH ze swojego komputera:

ssh -L 8000:127.0.0.1:8000 admin@192.0.2.10

Zastąp przykładowy adres właściwym IP. Następnie otwórz http://127.0.0.1:8000 i utwórz pierwsze konto. Po zakończeniu rejestracji zmień w Compose wartość REGISTRATION z "True" na "False", a następnie zastosuj konfigurację:

docker compose up -d

Włącz uwierzytelnianie TOTP i zachowaj kody odzyskiwania poza serwerem. W ustawieniach interfejsu możesz wybrać potrzebne rodzaje mediów i dostosować panel główny.

Do prywatnego dostępu z telefonu nadaje się WireGuard albo Tailscale. Port związany z 127.0.0.1 nie jest automatycznie dostępny przez adres VPN: należy skonfigurować odpowiednie udostępnienie usługi w tunelu. Alternatywą jest reverse proxy z HTTPS, ale wymaga osobnej kontroli domeny, zaufanych nagłówków i ochrony dostępu.

Przed importem dodaj kilka testowych filmów lub książek. Sprawdź zapis ocen i dat, wykonaj docker compose restart oraz upewnij się, że rekordy nadal istnieją. Ten prosty etap wykrywa błędny mount, zanim w bazie pojawią się tysiące pozycji.

Migracja z Trakt, Letterboxd i TV Time: import historii, backup i możliwość cofnięcia zmian

Sam import poprawnych tytułów nie potwierdza zachowania całej historii. Film obejrzany trzy razy może zostać przeniesiony jako jedna pozycja watched, bez dat dwóch wcześniejszych seansów. Podobnie odcinki specjalne mogą zostać dopasowane inaczej niż w oryginalnym trackerze.

Przed migracją przygotuj kontrolną listę danych:

Element Kontrola przed i po imporcie
Filmy Liczba unikatowych tytułów
Historia Liczba wszystkich seansów
Rewatche Daty ponownych obejrzeń
Seriale Odcinki, sezony i odcinki specjalne
Oceny Liczba oraz wybrane wartości
Watchlista Liczba pozycji i odpowiadające im statusy
Listy własne Nazwy i zawartość

Przykładowo 120 filmów i 145 seansów w źródle oraz 120 filmów i 120 seansów po imporcie oznacza rozbieżność wymagającą sprawdzenia. Same tytuły mogły zostać rozpoznane prawidłowo, ale część rewatchy nie trafiła do historii. To przykład interpretacji danych, nie wynik przeprowadzonej migracji.

Import z Trakt

Floppy obsługuje import danych z Trakt, w tym historię filmów i seriali oraz odpowiednie eksporty ZIP/JSON. Dostępny jest import profilu publicznego przez nazwę użytkownika i prywatnego przez OAuth.

Dla prywatnego konta potrzebne są TRAKT_API oraz TRAKT_API_SECRET, pochodzące z własnej aplikacji utworzonej w Trakt. Przy domenie HTTPS adres callbacku ma postać https://twoja-domena/import/trakt/private. W konfiguracji Trakt i Floppy adresy muszą być zgodne. Dla instalacji korzystającej z HTTP w sieci lokalnej dokumentacja przewiduje również device code flow.

Nie zakładaj, że import historii automatycznie odtworzy wszystkie listy. Pozycje watchlisty mogą zostać odwzorowane jako Planning, natomiast własne listy wykorzystują osobny przepływ importu. Tryb overwrite może zastępować istniejące informacje, dlatego przed jego użyciem potrzebna jest kopia bazy.

Import z Letterboxd

Floppy nie odtwarza bezpośrednio kompletnego konta Letterboxd ze wszystkimi danymi społecznościowymi. Dla historii filmowej można wykorzystać Trakt jako etap pośredni:

Eksport Letterboxd
        ↓
Import do Trakt
        ↓
Kontrola historii i dat
        ↓
Eksport danych Trakt
        ↓
Import do Floppy

Najważniejsza różnica dotyczy Watched i Diary. Watched informuje o obejrzeniu filmu, ale nie gwarantuje zachowania daty każdego seansu. Diary przechowuje poszczególne wpisy z datami. Przed dalszą migracją sprawdź, czy importer Trakt zachował rewatche, oceny oraz odpowiednie wpisy historii.

Nie wszystkie własne listy, recenzje i informacje społecznościowe muszą zostać przeniesione. Migracja przez Trakt oznacza także przekazanie danych kolejnemu dostawcy — nie jest operacją całkowicie lokalną.

Import z TV Time

TV Time zapowiedział zamknięcie po 15 lipca 2026 roku. Trakt przygotował importer przyjmujący oryginalne archiwum GDPR w formacie ZIP. Pliku nie trzeba wcześniej rozpakowywać.

  1. Zachowaj oryginalne archiwum GDPR ZIP.
  2. W Trakt przejdź do Settings → Data i wybierz import TV Time.
  3. Prześlij archiwum oraz skontroluj niedopasowane pozycje.
  4. Porównaj daty odcinków, historię filmów, oceny i watchlistę.
  5. Wyeksportuj obsługiwane dane z Trakt.
  6. Przenieś je do Floppy i ponownie porównaj wartości kontrolne.

Nie należy oczekiwać odtworzenia komentarzy, reakcji ani całej aktywności społecznościowej TV Time. Jeśli archiwum nie zostało zachowane i nie istnieje inna kopia, własny serwer nie odzyska utraconej historii.

Najpierw testowy import, potem migracja właściwa

Dużą migrację przeprowadź najpierw na oddzielnej testowej instalacji Floppy, z osobną bazą, wolumenami i nazwą projektu Compose. Nie uruchamiaj dwóch instancji korzystających z tego samego aktywnego pliku SQLite. Zachowaj oryginalny eksport, a testową instancję odizoluj od zewnętrznych webhooków i synchronizacji.

Jeśli test wykaże brakujące daty lub duplikaty, nie próbuj wielokrotnie uruchamiać importu na produkcji. Skoryguj źródło, zakres lub tryb importu. Testową instancję można odtworzyć z czystej kopii, bez ingerowania w główny dziennik.

Backup SQLite i odzyskiwanie danych

Floppy zapisuje eksporty CSV i snapshoty bazy w katalogu /floppy/backups. Eksport CSV pozwala przenosić obsługiwane dane użytkownika do działającej aplikacji. Nie zastępuje jednak pełnej bazy zawierającej konta, konfigurację i zapisane integracje.

Snapshoty SQLite są przechowywane w /floppy/backups/database/. Wbudowany harmonogram nie gwarantuje utworzenia nowego pliku natychmiast po instalacji. Przed migracją można wykonać spójną kopię online przez mechanizm SQLite Backup API:

docker compose exec -T floppy python - <<'PY'
import sqlite3
from pathlib import Path
from datetime import datetime, timezone

folder = Path("/floppy/backups/manual")
folder.mkdir(parents=True, exist_ok=True)

stamp = datetime.now(timezone.utc).strftime(
    "%Y%m%dT%H%M%SZ"
)
target = folder / f"floppy-{stamp}.sqlite3"
temp = folder / f"floppy-{stamp}.part"

source = sqlite3.connect(
    "file:/floppy/db/db.sqlite3?mode=ro",
    uri=True
)
backup = sqlite3.connect(temp)

try:
    source.backup(backup)
finally:
    backup.close()
    source.close()

check = sqlite3.connect(temp)
try:
    result = check.execute(
        "PRAGMA integrity_check"
    ).fetchone()[0]
finally:
    check.close()

if result != "ok":
    temp.unlink(missing_ok=True)
    raise SystemExit(result)

temp.replace(target)
print(target)
PY

Gotowy snapshot powinien znaleźć się w ~/floppy/backups/manual. Kontrola integralności SQLite nie zastępuje testu odtwarzania całej aplikacji. Co najmniej jedną kopię przechowuj poza serwerem, z kontrolą daty ostatniego poprawnego backupu i ograniczonymi uprawnieniami. Konfigurację zawierającą sekret oraz klucze integracji przechowuj w postaci zabezpieczonej, najlepiej zaszyfrowanej.

Aby sprawdzić odzyskiwanie, przygotuj osobną maszynę z właściwą wersją obrazu i kopią konfiguracji. Przed uruchomieniem odtwórz wybrany snapshot w pustym katalogu SQLite jako db.sqlite3, bez przypadkowych plików WAL/SHM z innej bazy. Zachowaj oryginalny SECRET, odizoluj integracje, uruchom Floppy i zweryfikuj logowanie, historię oraz oceny.

Przy aktualizacji najpierw zachowaj snapshot, konfigurację i dotychczasowy obraz. Następnie zmień tag w Compose i wykonaj:

docker compose pull floppy
docker compose up -d --force-recreate floppy
docker compose exec floppy \
  python manage.py floppy_preflight

Powrót do poprzedniego taga nie cofa migracji bazy. Bezpieczne cofnięcie aktualizacji może wymagać odtworzenia starego obrazu i pasującego do niego snapshotu.

Integracje z Plex, Jellyfin, Emby, Last.fm i Pocket Casts mogą automatyzować zbieranie zdarzeń, ale nie są jednakowymi mechanizmami. Import historyczny, scrobbling oraz synchronizacja statusu watched mogą zapisywać różne informacje. Jeśli to samo odtworzenie trafia do Floppy przez Jellyfin i ponownie przez Trakt, może powstać duplikat. Dlatego uruchamiaj jedną integrację naraz i porównuj rzeczywiste wpisy historii z liczbą wykonanych seansów.

Zacznij od zabezpieczenia pustej instalacji, a nie importowania archiwum. Dodaj dwa lub trzy rekordy, sprawdź je po restarcie, wykonaj snapshot, przenieś go poza serwer i odtwórz na oddzielnej instancji. Dopiero potem przenoś wieloletnią historię. Błąd w montowaniu SQLite lub niepoprawny import znacznie łatwiej skorygować przed dodaniem kilku tysięcy wpisów.

FAQ: najczęstsze pytania o Floppy

Czy Floppy jest darmowy?
Tak. Oprogramowanie nie wymaga abonamentu. Koszt dotyczy sprzętu, VPS-a, energii i przechowywania kopii danych.

Czy Floppy całkowicie zastępuje Trakt?
Może przejąć historię, postęp, oceny, listy i wybrane integracje. Nie oferuje identycznego ekosystemu usług ani takiej samej wygody administracyjnej.

Czy Floppy zastępuje Letterboxd?
Jako osobisty dziennik filmowy — w dużym zakresie. Nie odtwarza jednak rozbudowanej społeczności, recenzji znajomych i wszystkich funkcji odkrywania filmów.

Czy można przenieść historię z TV Time?
Tak, jeśli zachowano odpowiednie archiwum GDPR ZIP. Trakt obsługuje taki import, a następnie można przenieść zgodny zakres danych do Floppy.

Ile RAM potrzebuje Floppy?
Projekt obsługuje instalacje o ograniczonych zasobach, ale 4 GB RAM to rozsądny punkt wyjścia dla VPS-a z większymi importami i integracjami. Nie jest to gwarancja określonej wydajności.

Czy wybrać SQLite czy PostgreSQL?
Dla osobistej instalacji na lokalnym dysku SQLite jest prostsze. PostgreSQL ma więcej sensu przy oddzielnym serwerze bazy lub rozbudowanej infrastrukturze.

Czy Redis jest obowiązkowy?
W opisanej konfiguracji tak. Floppy wykorzystuje Redis między innymi do zadań w tle i cache, ale główna historia pozostaje w SQLite.

Czy Floppy działa offline na telefonie?
Nie jako pełnoprawny tracker offline. PWA wymaga połączenia z serwerem do wyszukiwania i zapisywania danych.

Czy eksport CSV jest wystarczającym backupem?
Nie. CSV nie zastępuje bazy z kontami i ustawieniami. Do odzyskania instalacji potrzebny jest poprawny snapshot oraz zachowana konfiguracja.

Dlaczego import może tworzyć duplikaty?
Przyczyną bywa ponowne importowanie danych albo jednoczesne zapisywanie odtworzeń przez różne integracje. Przed kolejnym importem porównaj daty i źródła zdarzeń.

Czy backup na tym samym VPS-ie wystarczy?
Nie jako jedyna kopia. Utrata hosta może usunąć jednocześnie bazę i lokalne snapshoty. Przechowuj również niezależną kopię poza serwerem.

Jak bezpiecznie aktualizować Floppy?
Najpierw wykonaj snapshot i zachowaj sekret oraz konfigurację. Po aktualizacji sprawdź diagnostykę, historię i integracje. Starszy obraz bez wcześniejszej bazy nie gwarantuje możliwości rollbacku.

Redakcja

Uwielbiam odkrywać ciekawe tematy i przekładać zdobytą wiedzę na przydatne poradniki. Piszę przede wszystkim z myślą o czytelnikach, którzy cenią konkret, prosty język i praktyczne rozwiązania.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *