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://<ip>: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.
Languages
HTML
57.6%
Python
42.2%
Dockerfile
0.2%