<p align="center">
  <img src="https://raw.githubusercontent.com/morr/scrying-pool/main/.github/logo.png" alt="Scrying Pool" width="128" />
</p>

<h1 align="center">Scrying Pool</h1>

<p align="center">
  <em>GM camera visibility control for FoundryVTT v14+</em>
  <br />
  <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><img src="https://img.shields.io/badge/license-CC%20BY--NC--SA%204.0-lightgrey" alt="License: CC BY-NC-SA 4.0" /></a>
  <br />
  <sub>Français · <a href="#english">English</a></sub>
</p>

---

## Français

**Scrying Pool** est un module FoundryVTT qui donne au MJ un contrôle total sur la visibilité des caméras des participants. Fini les flux vidéo désordonnés — gérez qui voit quoi depuis une interface flottante et discrète.

### Fonctionnalités

| Fonction                      | Description                                                                                                       |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| **Barre du MJ**               | Palette flottante listant tous les participants connectés, avec leur état caméra en temps réel                    |
| **Director's Board**          | Fenêtre de pilotage complète : grille de participants, actions groupées, mise en avant                            |
| **Masquer / Afficher**        | Cache ou révèle un flux à la table — par clic droit ou popover                                                    |
| **Actions groupées**          | Tout afficher, tout masquer, annuler la dernière action en un clic                                                |
| **Mise en avant (Spotlight)** | `Shift+clic` sur un participant → sa vidéo s'agrandit (×2), les autres disparaissent. `Échap` pour quitter        |
| **Réorganisation**            | Faites glisser les participants dans la barre pour les réorganiser. Double-clic sur la poignée pour réinitialiser |
| **Mosaïque / Grille**         | 6 dispositions : vertical/horizontal/mosaïque, chacune en taille S ou L                                           |
| **Formes des tuiles**         | Rond, arrondi, hexagone, octogone — appliqué aux avatars et aux vidéos                                            |
| **Bordures**                  | Largeur et couleur paramétrables pour les tuiles vidéo                                                            |
| **Préréglages**               | Sauvegardez et chargez des dispositions de visibilité, avec application automatique par scène                     |
| **Portrait personnalisé**     | Les joueurs peuvent choisir une image de remplacement quand leur caméra est indisponible                          |
| **Confidentialité**           | Panneau de consentement pour les automatismes (caméra de réaction, etc.)                                          |
| **Notifications**             | Notifications configurables (toutes, MJ seulement, silencieux)                                                    |
| **Rétablissement position**   | La position de la barre est sauvegardée automatiquement toutes les 30s et au relâché du glisser                   |

### Installation

1. Dans FoundryVTT, allez dans la **Modules**
2. Recherchez **Scrying Pool**
3. Cliquez **Installer**

### Utilisation

#### Barre du MJ (strip)

La barre flottante apparaît automatiquement quand vous vous connectez en tant que MJ. Elle liste tous les participants avec leur état :

- **Clic** → popover pour masquer/afficher ce participant
- **Clic droit** → menu contextuel (masquer/afficher)
- **Shift+clic** → mode Spotlight (vidéo ×2)
- **Glisser** la poignée ⟞ pour déplacer la barre
- **Glisser** un participant pour le réorganiser
- **Double-clic** sur la poignée → réinitialiser l'ordre des participants
- **Bouton `[+]`** → basculer taille S/L
- **Bouton `[⊞]`** → ouvrir le Director's Board

La barre se fondu dans le décor — pas de chrome visible tant que vous ne la survolez pas.

#### Director's Board

Ouvrable depuis la barre (bouton `[⊞]`) ou via `Ctrl+Shift+V`.

- Grille de tous les participants avec statut et indicateur d'opération en attente
- Boutons **Tout afficher** / **Tout masquer**
- **Undo** (apparaît après une action groupée)
- **Rétablir** (après une mise en avant Spotlight)
- Sélecteur de **disposition** (vertical/horizontal/mosaïque, S/L)
- Sélecteur de **forme** des tuiles (cercle, arrondi, hexagone, octogone)
- Contrôles de **bordure** (largeur, couleur)
- Réglages de **taille des widgets** (petite 60–200px, grande 60–400px)
- Sauvegarde/chargement/export/import de **préréglages**
- **Application automatique** par scène
- Activation/désactivation A/V
- **Bouton Réinitialiser la barre** (rétablit la position par défaut)

#### Raccourcis clavier

| Raccourci      | Action                                     |
| -------------- | ------------------------------------------ |
| `Ctrl+Shift+V` | Ouvrir/Fermer le Director's Board          |
| `Ctrl+Shift+S` | Tout afficher                              |
| `Ctrl+Shift+H` | Tout masquer                               |
| `Ctrl+Shift+P` | Mettre en avant le participant sélectionné |

### Configuration

Module accessible depuis **Paramètres → Gérer les modules → Scrying Pool**.

| Option                      | Description                                                            |
| --------------------------- | ---------------------------------------------------------------------- |
| Afficher le flux du MJ      | Quand activé, la propre caméra du MJ est visible dans la barre         |
| Verbosité des notifications | Toutes / MJ seulement / Silencieux                                     |
| Application automatique     | Activer/désactiver globalement l'application des préréglages par scène |

### Support

Pour signaler un bug ou proposer une amélioration : [ouvrir un ticket](https://github.com/morr/scrying-pool/issues).

---

## English

**Scrying Pool** is a FoundryVTT module that gives GMs full control over participant camera visibility. No more messy video feeds — manage who sees what from a discreet floating interface.

### Features

| Feature               | Description                                                                              |
| --------------------- | ---------------------------------------------------------------------------------------- |
| **GM Strip**          | Floating palette listing all connected participants with real-time camera state          |
| **Director's Board**  | Full command window: participant grid, bulk actions, spotlight                           |
| **Hide / Show**       | Hide or reveal a feed to the table — via right-click or popover                          |
| **Bulk actions**      | Show all, hide all, undo last bulk action in one click                                   |
| **Spotlight**         | `Shift+click` a participant → their video enlarges (×2), others disappear. `Esc` to exit |
| **Re-order**          | Drag participants in the strip to rearrange them. Double-click the grip to reset         |
| **Mosaic / Grid**     | 6 layouts: vertical/horizontal/mosaic, each in S or L size                               |
| **Tile shapes**       | Circle, rounded, hexagon, octagon — applied to avatars and video feeds                   |
| **Borders**           | Configurable width and color for video tiles                                             |
| **Presets**           | Save and load visibility layouts, with per-scene auto-apply                              |
| **Custom portrait**   | Players can set a fallback image when their camera is unavailable                        |
| **Privacy**           | Consent panel for automation features (reaction cam, etc.)                               |
| **Notifications**     | Configurable notification verbosity (all, GM only, silent)                               |
| **Position recovery** | Strip position auto-saved every 30s and on drag release                                  |

### Installation

1. In FoundryVTT, go to the **Modules**
2. Search for **Scrying Pool**
3. Click **Install**

### Usage

#### GM Strip

The floating strip appears automatically when you log in as GM. It lists all participants with their state:

- **Click** → popover to hide/show that participant
- **Right-click** → context menu (hide/show)
- **Shift+click** → Spotlight mode (×2 video)
- **Drag** the ⟞ handle to move the strip
- **Drag** a participant to reorder them
- **Double-click** the handle → reset participant order
- **`[+]` button** → toggle S/L size
- **`[⊞]` button** → open the Director's Board

The strip is stealthy — no chrome visible until hover.

#### Director's Board

Open from the strip (`[⊞]` button) or via `Ctrl+Shift+V`.

- Grid of all participants with status and pending-operation indicator
- **Show All** / **Hide All** buttons
- **Undo** (appears after a bulk action)
- **Restore** (after a Spotlight)
- **Layout** selector (vertical/horizontal/mosaic, S/L)
- **Shape** selector (circle, rounded, hexagon, octagon)
- **Border** controls (width, color)
- **Widget size** settings (small 60–200px, large 60–400px)
- **Preset** save/load/export/import
- Per-scene **auto-apply**
- A/V toggle
- **Reset Strip** button (restores default position)

#### Keyboard Shortcuts

| Shortcut       | Action                        |
| -------------- | ----------------------------- |
| `Ctrl+Shift+V` | Open/Close Director's Board   |
| `Ctrl+Shift+S` | Show All                      |
| `Ctrl+Shift+H` | Hide All                      |
| `Ctrl+Shift+P` | Spotlight focused participant |

### Settings

Access from **Settings → Manage Modules → Scrying Pool**.

| Option                 | Description                                                  |
| ---------------------- | ------------------------------------------------------------ |
| Show GM Self Feed      | When enabled, the GM's own camera feed is shown in the strip |
| Notification Verbosity | All / GM Only / Silent                                       |
| Auto-Apply             | Globally enable/disable per-scene preset auto-apply          |

### Support

Report bugs or request features: [open an issue](https://github.com/morr/scrying-pool/issues).

---

<p align="center">
  <sub>Made for FoundryVTT v14+ · <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a></sub>
</p>
