162 lines
7.4 KiB
Markdown
162 lines
7.4 KiB
Markdown
---
|
|
title: PlanarAlly
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, gaming, vtt, jdr, tabletop, django, python, multijoueur]
|
|
confidence: high
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=Gaming, https://www.planarally.io/]
|
|
---
|
|
|
|
# 🐉 PlanarAlly
|
|
|
|
> **Virtual Tabletop (VTT) self-hosted en Python/Django** — l'alternative open-source sérieuse à Foundry VTT pour vos parties de JDR en ligne.
|
|
|
|
## 📋 Informations Générales
|
|
|
|
| Champ | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | [planarally.io](https://www.planarally.io/) |
|
|
| **GitHub** | [Kruptein/PlanarAlly](https://github.com/Kruptein/PlanarAlly) |
|
|
| **License** | AGPL-3.0 |
|
|
| **Langage** | Python (Django) + TypeScript (client) |
|
|
| **Étoiles** | ⭐84 (catalogue) |
|
|
| **Dernière MAJ** | 2025.x (release 2025.1) |
|
|
| **Catégorie** | [[cat-gaming\|Gaming]] |
|
|
|
|
## 📝 Description
|
|
|
|
**PlanarAlly** est un **Virtual Tabletop (VTT)** self-hosted écrit en **Python/Django** côté serveur, avec un client **TypeScript** (React-like) moderne. Il permet aux maîtres du jeu (DM/MJ) et à leurs joueurs de se retrouver autour d'une table virtuelle pour jouer à **Donjons & Dragons, Pathfinder, Call of Cthulhu, ou tout autre JDR** avec cartes, tokens, mesures, et plus encore.
|
|
|
|
L'application se distingue par son **système de vision avancé** : chaque token a un champ de vision, une ligne de vue (Line of Sight) qui dépend des murs, et un **fog of war** dynamique. Le DM peut aussi définir des zones de lumière (luminosité, couleur) qui ne se révèlent aux joueurs que lorsque leurs tokens s'en approchent. C'est l'un des VTT open-source les plus aboutis sur ce point.
|
|
|
|
L'architecture est **client-serveur** : un backend Django gère l'état de la partie (synchronisation temps réel via websockets) et un client TypeScript gère le rendu canvas. Vous pouvez soit **build le client manuellement**, soit utiliser une image Docker **pré-buildée** qui embarque le client et le serveur. PlanarAlly supporte aussi les **macros** (scripts Python exécutés en jeu) et un système de **notes partagées** entre le DM et les joueurs.
|
|
|
|
**Fonctionnalités clés** :
|
|
- ✅ **Line of Sight** dynamique par token (calcul sur serveur)
|
|
- ✅ **Fog of War** révélé progressivement
|
|
- ✅ **Système d'éclairage** (zones de lumière, ombres, jour/nuit)
|
|
- ✅ **Mesures** (cases, distances configurables par map)
|
|
- ✅ **Layers multiples** : background, terrain, tokens, GM, fog
|
|
- ✅ **Notes partagées** (MJ ↔ joueurs)
|
|
- ✅ **Macros Python** côté serveur (extensibilité)
|
|
- ✅ **Templates / assets** réutilisables (blocs de donjons, marqueurs)
|
|
- ✅ **Multijoueur temps réel** via websockets
|
|
- ✅ **Partage d'écran** (optionnel, via WebRTC peer-to-peer)
|
|
- ✅ **Self-hosted 100%** : vos parties restent privées
|
|
|
|
## 🚀 Installation
|
|
|
|
### Option 1 : Docker (recommandé, client pré-buildé)
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
services:
|
|
planarally:
|
|
container_name: planarally
|
|
image: kruptein/planarally:latest # ou :v2025.1
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8443:8443"
|
|
volumes:
|
|
- ./planarally/data:/app/data # base SQLite + médias uploadés
|
|
- ./planarally/config:/app/config # config serveur
|
|
environment:
|
|
- TZ=Europe/Paris
|
|
- PA_SECRET=*** Change...t
|
|
- PA_HOST=0.0.0.0
|
|
- PA_PORT=8443
|
|
- PA_WEB_PORT=8443
|
|
```
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
Accéder à `https://IP:8443`. Le serveur utilise un certificat auto-signé par défaut — à remplacer ou à mettre derrière un reverse proxy ([[app-traefik]], [[app-caddy]]).
|
|
|
|
### Option 2 : Build manuel (client + serveur)
|
|
|
|
```bash
|
|
git clone https://github.com/Kruptein/PlanarAlly.git
|
|
cd PlanarAlly
|
|
|
|
# Backend Django
|
|
cd server
|
|
pip install -r requirements.txt
|
|
python manage.py migrate
|
|
python manage.py runserver 0.0.0.0:8000
|
|
|
|
# Client (autre terminal)
|
|
cd ../client
|
|
npm install
|
|
npm run build
|
|
# Servir le build statique via Nginx/Caddy
|
|
```
|
|
|
|
### Option 3 : Utiliser le dashboard hébergé (sans self-host)
|
|
|
|
L'équipe propose un dashboard hébergé gratuit sur [planarally.io](https://www.planarally.io/) pour ceux qui ne veulent pas auto-héberger — mais l'**auto-hébergement est l'option recommandée** pour la confidentialité de vos parties.
|
|
|
|
## ⚙️ Configuration
|
|
|
|
1. **Premier compte** : s'inscrire au premier accès sur l'UI — le premier compte créé devient administrateur.
|
|
2. **Carte** : créer un "Location" (donjon, ville, etc.), uploader une image de carte (`.jpg`/`.png`, jusqu'à ~20 Mo recommandé).
|
|
3. **Calibration** : clic droit sur la carte → "Set grid size" pour configurer la taille d'une case (ex. 5ft = 70px).
|
|
4. **Tokens** : glisser-déposer depuis la sidebar, configurer le champ de vision (portée, angle, type : normal/grand-angle/...).
|
|
5. **MJ vs Joueurs** : activer/désactiver le "fog of war" et le "DM layer" depuis le panneau de droite.
|
|
6. **Macros** : onglet "Macros" pour écrire des scripts Python qui peuvent lire/modifier l'état de la partie.
|
|
7. **Reverse proxy** : à mettre derrière [[app-traefik]] ou [[app-caddy]] avec **WebSocket** correctement relayé (Upgrade/Connection headers), sinon le multijoueur ne marche pas.
|
|
|
|
## 🔄 Alternatives
|
|
|
|
### Open Source (VTT self-hosted)
|
|
|
|
- **Foundry VTT** — Référence, ~50 USD licence unique, très riche (la cible que PlanarAlly vise)
|
|
- **Owlbear Rodeo** — Simple, gratuit pour usage basique, hébergé ou self-hosted
|
|
- **Astra** — Encore en développement, basé sur Phaser
|
|
- **Tabletop Simulator** — Non self-hosted, propriétaire
|
|
- **Roll20** — Propriétaire, hébergé
|
|
- **MapTool** — Java desktop, self-hostable, plus ancien
|
|
- **Fantasy Grounds** — Propriétaire, Unity-based
|
|
|
|
### Comparaison rapide
|
|
|
|
| Critère | PlanarAlly | Foundry VTT | Owlbear Rodeo |
|
|
| :--- | :--- | :--- | :--- |
|
|
| Prix | Gratuit (AGPL) | ~50 USD licence | Freemium |
|
|
| Self-hosted | ✅ | ✅ | ✅ (limité) |
|
|
| Line of Sight | ✅ Avancé | ✅ Très avancé | ❌ Basique |
|
|
| Fog of War | ✅ Dynamique | ✅ | ✅ |
|
|
| Lighting | ✅ Zones | ✅ Très avancé | ❌ |
|
|
| Macros | ✅ Python | ✅ JS/Slott | ❌ |
|
|
| Modules | Limité | ✅ Énorme écosystème | ❌ |
|
|
| Licence | AGPL-3.0 | Propriétaire | AGPL-3.0 |
|
|
|
|
## 🔐 Sécurité
|
|
|
|
- **HTTPS obligatoire** : les websockets et l'auth MJ/joueurs exigent TLS. Mettre derrière un reverse proxy ([[app-traefik]] / [[app-caddy]]).
|
|
- **Compte admin** : le premier compte créé est admin. Protégez-le avec un mot de passe fort + 2FA si possible.
|
|
- **`PA_SECRET`** : 32+ caractères aléatoires (`openssl rand -hex 32`).
|
|
- **Confidentialité des parties** : en self-hosted, vos parties ne transitent par aucun serveur tiers. C'est un **avantage énorme** vs Roll20/Foundry hébergé pour les campagnes sensibles.
|
|
- **Base de données** : `./data/db.sqlite3` — sauvegarder régulièrement.
|
|
- **Pas d'auth native** : pour ajouter 2FA ou OAuth, il faut passer par un proxy d'authentification ([[app-authelia]], [[app-authentik]]).
|
|
|
|
## 📚 Ressources
|
|
|
|
- [Site officiel](https://www.planarally.io/)
|
|
- [Documentation self-hosting](https://www.planarally.io/server/setup/self-hosting/)
|
|
- [GitHub Kruptein/PlanarAlly](https://github.com/Kruptein/PlanarAlly)
|
|
- [Discord communautaire](https://discord.gg/4rd4mus)
|
|
- [Blog & guides](https://www.planarally.io/blog/)
|
|
|
|
## Pages Liées
|
|
|
|
- [[cat-gaming]] — Catégorie Gaming
|
|
- [[app-traefik]] — Reverse proxy (WebSockets!)
|
|
- [[app-authelia]] — Ajouter 2FA
|
|
- [[app-foundry-vtt]] — Alternative payante (si plus tard ajoutée)
|
|
- [[recettes-docker-compose]] — Templates Docker
|
|
- [[securisation-home-lab]] — Durcir l'infra
|