2026-03-23 22:27:04 +01:00
2026-03-23 22:24:24 +01:00
2026-03-23 22:24:24 +01:00
2026-03-23 22:24:24 +01:00
2026-03-23 22:24:24 +01:00
2026-03-23 22:24:24 +01:00
2026-03-23 22:24:24 +01:00
2026-03-23 22:24:24 +01:00
2026-03-23 22:27:04 +01:00
2026-03-23 22:24:24 +01:00

SeedMover

Gestionnaire de transferts dual-pane entre une seedbox et un NAS, accessible depuis navigateur et smartphone.

Fonctionnalités

Dual-pane — navigation indépendante dans chaque panneau

Multi-protocoles — Local et SFTP inclus, extensible via plugins

File d'attente — transferts séquentiels avec progression temps réel, pause et stop

Historique — suivi de tous les transferts (taille, durée, date, statut)

Connexions — ajout, édition, test depuis l'interface, persistées entre redémarrages

Panneaux par défaut — sauvegarde la vue de démarrage en un clic

Démarrage rapide

Générer une SECRET_KEY

python3 -c "import secrets; print(secrets.token_hex(32))"

Lancer

docker compose up -d

Accès : http://:5000

Configuration docker-compose.yml

Variable

Défaut

Description

SEEDBOX_PATH

/mnt/seedbox

Chemin local seedbox

NAS_PATH

/mnt/nas

Chemin local NAS

APP_USERNAME

admin

Identifiant

APP_PASSWORD

changeme

Mot de passe

SECRET_KEY

(à changer)

Clé de session Flask

CACHE_TTL

60

TTL du cache de listing (secondes)

HISTORY_MAX

50

Nombre max d'entrées dans l'historique

SESSION_LIFETIME

86400

Durée de session (secondes)

Ajouter un protocole

Créer plugins/monprotocole.py, hériter de AbstractFS, implémenter les méthodes, définir PLUGIN_NAME et PLUGIN_LABEL. Le plugin est détecté automatiquement au démarrage.

Structure

seedmover/ ├── app.py ├── plugins/ │ ├── base.py ← interface abstraite │ ├── local.py ← système de fichiers local │ └── sftp.py ← SFTP via Paramiko ├── data/ ← volume Docker (connexions, historique) ├── templates/ │ ├── index.html │ └── login.html └── docker-compose.yml

Générer une SECRET_KEY sécurisée

python3 -c "import secrets; print(secrets.token_hex(32))"

Volumes

volumes:

  • /mnt/nas/Useed/Media_useed:/mnt/seedbox:ro # seedbox, lecture seule
  • /mnt/nas/BOB4-Syno:/mnt/nas # NAS, lecture/écriture

Utilisation

Se connecter sur http://ip:5000

Naviguer dans la seedbox (panneau gauche) avec double-clic

Naviguer vers le dossier destination sur le NAS (panneau droit)

Sélectionner un ou plusieurs fichiers/dossiers côté seedbox (clic simple)

Cliquer sur ⟶ Copier vers NAS

Suivre la progression dans la file de transfert en bas

Raccourcis

Double-clic — ouvrir un dossier

Clic simple — sélectionner/désélectionner

↻ Actualiser — forcer un rechargement (bypass cache)

📁 — créer un nouveau dossier

✏ Renommer — renommer un élément côté NAS

⏸ Pause / ▶ Reprendre — suspendre le transfert en cours

⏹ Stop — annuler le transfert et supprimer le fichier partiel

Échap — fermer les modales

Entrée — valider les modales

Stack technique

Backend : Python 3.12, Flask, Flask-SocketIO, Eventlet

Frontend : HTML/CSS/JS vanilla, Socket.IO

Transport : copie par chunks de 4MB avec progression WebSocket

Notes techniques

Streaming chunk par chunk (1MB) sans buffer intermédiaire — RAM stable pendant les transferts

malloc_trim() appelé après chaque transfert pour rendre la mémoire au système

Verrou par connexion pour thread-safety Paramiko (évite les "Garbage packet")

Prefetch SFTP désactivé pour éviter le chargement du fichier entier en RAM

Description
Gestionnaire de transferts dual-pane entre une seedbox et un NAS, accessible depuis navigateur et smartphone.
Readme 66 KiB
Languages
HTML 57.6%
Python 42.2%
Dockerfile 0.2%