Jellyfin, Emby et Plex accessibles depuis Windows Explorer ou votre gestionnaire de fichiers Linux — sans synchronisation, sans copie locale.
Le problème de fond — et la réponse apportée.
Media_FS expose vos bibliothèques multimédias comme un système de fichiers natif : une lettre de lecteur sous Windows (WinFSP), un point de montage sous Linux (FUSE).
Ce que Media_FS apporte dès la v1.0.
Montage en lettre de lecteur (ex : Z:\) via le driver WinFSP. Visible dans Windows Explorer, accessible depuis n'importe quelle application Win32.
Point de montage FUSE (ex : /mnt/mediafs). Compatible avec tous les gestionnaires de fichiers et outils en ligne de commande.
Connectez plusieurs instances simultanément. Chaque serveur apparaît dans son propre sous-répertoire. Authentification par API key ou identifiants.
Les lectures déclenchent des requêtes HTTP Range vers le serveur. Seek instantané. Compatible VLC, mpv, Windows Media Player, et tout lecteur acceptant des fichiers locaux.
Pré-chargement en plusieurs chunks parallèles avec fenêtre de read-ahead configurable. Cache LRU en mémoire pour les chunks récents.
Icône dans la barre système (Windows) avec indicateur d'état. Interface web locale pour gérer les serveurs, surveiller les téléchargements actifs et vider le cache.
Choisissez votre méthode.
winfsp.dev/rel/ — téléchargez et lancez l'installateur.
Une icône apparaît dans la barre système. Clic droit → Configuration pour ajouter vos serveurs.
fuse3 (installé automatiquement comme dépendance)wget https://github.com/CCoupel/Media_FS/releases/latest/download/mediafs_X.Y.Z_linux_amd64.deb
sudo dpkg -i mediafs_X.Y.Z_linux_amd64.deb
sudo mkdir -p /mnt/mediafs
Créez le fichier de configuration :
mkdir -p ~/.config/Media_FS
cat > ~/.config/Media_FS/config.yaml << 'EOF'
mount:
mount_point: "/mnt/mediafs"
servers:
- alias: Jellyfin-Home
type: jellyfin
url: http://192.168.1.10:8096
username: cyril
api_key: "votre_api_key"
enabled: true
download:
parallel_chunks: 4
chunk_size_mb: 16
read_ahead_window_mb: 64
read_ahead_windows: 2
max_cache_mb: 1024
cache_ttl_min: 60
EOF
L'API key se trouve dans le tableau de bord Jellyfin/Emby : Administration → Clés API.
mediafs mount
Ctrl+C pour démonter. Ajoutez à ~/.bashrc ou un service systemd pour un démarrage automatique.
Le binaire est installé dans /usr/bin/mediafs. La dépendance fuse3 est déclarée dans le package.
fuse3 (installé automatiquement comme dépendance)wget https://github.com/CCoupel/Media_FS/releases/latest/download/mediafs-X.Y.Z-1.x86_64.rpm
sudo dnf install ./mediafs-X.Y.Z-1.x86_64.rpm # Fedora / RHEL / Rocky
sudo mkdir -p /mnt/mediafs
Créez le fichier de configuration :
mkdir -p ~/.config/Media_FS
cat > ~/.config/Media_FS/config.yaml << 'EOF'
mount:
mount_point: "/mnt/mediafs"
servers:
- alias: Jellyfin-Home
type: jellyfin
url: http://192.168.1.10:8096
username: cyril
api_key: "votre_api_key"
enabled: true
download:
parallel_chunks: 4
chunk_size_mb: 16
read_ahead_window_mb: 64
read_ahead_windows: 2
max_cache_mb: 1024
cache_ttl_min: 60
EOF
L'API key se trouve dans le tableau de bord Jellyfin/Emby : Administration → Clés API.
mediafs mount
Ctrl+C pour démonter. Ajoutez à ~/.bashrc ou un service systemd pour un démarrage automatique.
CGO est obligatoire — cgofuse lie contre WinFSP ou libfuse.
Windows# Staging des headers WinFSP (chemin sans espaces requis pour ld)
New-Item -ItemType Directory -Force C:\winfsp\inc\fuse, C:\winfsp\lib
Copy-Item "C:\Program Files (x86)\WinFsp\inc\fuse\*" C:\winfsp\inc\fuse\
Copy-Item "C:\Program Files (x86)\WinFsp\lib\winfsp-x64.lib" C:\winfsp\lib\libwinfsp.a
# Build (Git Bash ou WSL)
export PATH="/c/mingw64/bin:$PATH"
CGO_ENABLED=1 \
CGO_CFLAGS="-IC:/winfsp/inc/fuse" \
CGO_LDFLAGS="-LC:/winfsp/lib -lwinfsp" \
go build -o dist/mediafs.exe ./cmd/mediafs
Linux (Debian/Ubuntu)
sudo apt-get install -y libfuse-dev gcc
CGO_ENABLED=1 go build -o dist/mediafs ./cmd/mediafs
Vue d'ensemble des packages et du flux de données.
┌─────────────────────────────────────────────────────────────────┐
│ cmd/mediafs │
│ main.go · CLI subcommands · system tray bootstrap │
└───────────┬────────────────────────┬────────────────────────┘
│ │
┌────────▼────────┐ ┌─────────▼─────────┐
│ internal/vfs │ │ internal/webui │
│ cgofuse host │ │ HTTP config UI │
│ Readdir/Read │ │ /api/servers │
│ openFiles map │ │ /api/monitor │
└────────┬────────┘ └────────────────────┘
│
┌────────▼────────────────────────────────────┐
│ internal/connector │
│ Registry pattern — New(type) → Connector │
│ ┌─────────────┐ ┌───────────────────┐ │
│ │ jellyfin/ │ │ emby/ │ │
│ │ Connect() │ │ Connect() │ │
│ │ GetLibraries│ │ GetLibraries() │ │
│ │ GetItems() │ │ GetItems() │ │
│ └─────────────┘ └───────────────────┘ │
└────────┬────────────────────────────────────┘
│
┌────────▼────────┐ ┌────────────────────┐
│internal/downloader │ internal/cache │
│ HTTP Range chunks │ │ SQLite (modernc) │
│ parallel fetch │ │ items / metadata │
│ WindowCache LRU │ │ artwork blobs │
└──────────────────┘ └────────────────────┘
5 épiques, du MVP au futur.
| Épique | Statut | Contenu |
|---|---|---|
| P0 — Core VFS | ✅ Livré | WinFSP, FUSE, Jellyfin, Emby, streaming HTTP Range, download parallèle, tray+UI, multi-serveurs |
| P1.1 — Métadonnées | 📋 Planifié | Attributs étendus, fichiers NFO, artwork, cache SQLite |
| P1.2 — Shell Properties | 📋 Planifié | IPropertyStore Windows (durée, résolution, codec dans l'explorateur) |
| P3 — Plex | 📋 Planifié | Connecteur Plex (API propriétaire) |
| Infrastructure | 🔄 En cours | CLI, icônes, CI/CD, packaging DEB/RPM |
Chargées en direct depuis GitHub.