{"id":46637861,"url":"https://github.com/ithardev/rpg-viewer-client","last_synced_at":"2026-03-08T02:01:42.620Z","repository":{"id":65526783,"uuid":"593215957","full_name":"ItharDev/RPG-Viewer-Client","owner":"ItharDev","description":"Official client-side application for RPG Viewer VTT","archived":false,"fork":false,"pushed_at":"2025-12-05T22:56:28.000Z","size":84411,"stargazers_count":9,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-08T20:50:37.180Z","etag":null,"topics":["client","csharp","frontend","roleplaying","rpg","socket-io","tabletop","tool","unity","vtt"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ItharDev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-25T14:05:46.000Z","updated_at":"2025-12-05T11:00:28.000Z","dependencies_parsed_at":"2024-04-21T11:40:24.753Z","dependency_job_id":"665164cb-f4d9-4b13-8852-bf92d73211a5","html_url":"https://github.com/ItharDev/RPG-Viewer-Client","commit_stats":null,"previous_names":[],"tags_count":55,"template":false,"template_full_name":null,"purl":"pkg:github/ItharDev/RPG-Viewer-Client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ItharDev%2FRPG-Viewer-Client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ItharDev%2FRPG-Viewer-Client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ItharDev%2FRPG-Viewer-Client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ItharDev%2FRPG-Viewer-Client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ItharDev","download_url":"https://codeload.github.com/ItharDev/RPG-Viewer-Client/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ItharDev%2FRPG-Viewer-Client/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30242403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T00:58:18.660Z","status":"online","status_checked_at":"2026-03-08T02:00:06.215Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client","csharp","frontend","roleplaying","rpg","socket-io","tabletop","tool","unity","vtt"],"created_at":"2026-03-08T02:01:20.983Z","updated_at":"2026-03-08T02:01:42.608Z","avatar_url":"https://github.com/ItharDev.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RPG Viewer Client\n\n![Downloads](https://img.shields.io/github/downloads/ItharDev/RPG-Viewer-Client/total)\n\nWelcome to the RPG Viewer Client! This application works hand-in-hand with the [RPG Viewer Server](https://github.com/ItharDev/RPG-Viewer-Server).\n\nThis guide will walk you through everything you need to know, from setup to running full-fledged digital adventures.\n\n## Table of Contents\n\n- [RPG Viewer Client](#rpg-viewer-client)\n  - [Table of Contents](#table-of-contents)\n  - [Installing the Application](#installing-the-application)\n    - [Windows](#windows)\n    - [Linux](#linux)\n  - [Connecting to a Server](#connecting-to-a-server)\n  - [Tuning Your Settings](#tuning-your-settings)\n  - [Authentication \\\u0026 Registration](#authentication--registration)\n  - [Running Game Sessions](#running-game-sessions)\n    - [Creating a Session](#creating-a-session)\n    - [Connecting to an Existing Session](#connecting-to-an-existing-session)\n    - [Joining a Session with a Key](#joining-a-session-with-a-key)\n  - [Inside the Session](#inside-the-session)\n    - [The Side Panel](#the-side-panel)\n    - [The Tool Panel](#the-tool-panel)\n    - [The GM's Configuration Panel](#the-gms-configuration-panel)\n  - [Scenes](#scenes)\n    - [Creating a Scene](#creating-a-scene)\n    - [Activating a Scene](#activating-a-scene)\n    - [Tuning the Grid](#tuning-the-grid)\n      - [If You Know the Dimensions](#if-you-know-the-dimensions)\n      - [If You Don't Know the Dimensions](#if-you-dont-know-the-dimensions)\n    - [Lighting Up the Scene](#lighting-up-the-scene)\n    - [Light Sources](#light-sources)\n      - [Lighting Presets](#lighting-presets)\n    - [Walls: Defining Spaces and Blocking Vision](#walls-defining-spaces-and-blocking-vision)\n      - [Placing walls](#placing-walls)\n      - [Types of Walls](#types-of-walls)\n    - [Portals: Way of Linking Areas](#portals-way-of-linking-areas)\n      - [Creating Portals](#creating-portals)\n      - [Managing Portals](#managing-portals)\n      - [Connecting Portals](#connecting-portals)\n  - [Tokens \\\u0026 Blueprints](#tokens--blueprints)\n    - [Permissions \\\u0026 Visibility](#permissions--visibility)\n      - [Permission Levels](#permission-levels)\n      - [Visibility](#visibility)\n    - [Limiting Token Vision](#limiting-token-vision)\n    - [Token Groups](#token-groups)\n    - [Token Effects](#token-effects)\n  - [Journals \\\u0026 Notes](#journals--notes)\n    - [Scene Notes](#scene-notes)\n    - [Global Journals](#global-journals)\n  - [Useful Keybinds](#useful-keybinds)\n    - [General Keybinds](#general-keybinds)\n    - [Grid \\\u0026 Scene Configuration](#grid--scene-configuration)\n    - [Wall Tools](#wall-tools)\n    - [Measuring Tools](#measuring-tools)\n    - [Ping Tools](#ping-tools)\n    - [Notes](#notes)\n    - [Token Management](#token-management)\n    - [Token Groups](#token-groups-1)\n\n## Installing the Application\n\nFind the latest release on the right-hand panel. Installation is pretty straightforward:\n\n### Windows\n\n- Download and unzip the version for Windows.\n- When prompted by Windows Defender about your mysterious new app, don't panic. If you got it from the official GitHub, you can ignore the warning.\n- Accept private network permissions if prompted — otherwise your client might not work properly.\n\n### Linux\n\n- Linux builds are available from version `v2.7.0` onward.\n- Download and unzip the version for Linux.\n- Make the downloaded file executable:\n  \n    ```\n    chmod +x RPG-Viewer.x86_64\n    ```\n- Without this, your terminal will say Permission denied.\n\n## Connecting to a Server\n\nTo connect the Client to a Server, you must have a running instance of the [RPG Viewer Server](https://github.com/ItharDev/RPG-Viewer-Server) and know its IP address and port.\n\nOpen the connection field by clicking the **Settings** button in the top left corner of the application. Enter the server address in the format `\u003cip:port\u003e`, for example:\n\n```\n127.0.0.1:4000\n```\n\nReplace `127.0.0.1` with the actual IP address of your server and `4000` with the correct port if different. The client will attempt to connect to the specified server for all further interactions.\n\n## Tuning Your Settings\n\nInside the Settings panel, you'll find an FPS slider. 30 FPS is the sweet spot for most machines — unless you're roleplaying on a toaster, then maybe try 20.\n\nPressing the **Esc** key anywhere in the application opens a panel where you can manage the application resolution and toggle fullscreen mode.\n\n## Authentication \u0026 Registration\n\nBefore you storm dungeons and conquer camps, you'll need an account. Head to the top-right corner and open the registration panel. Sign up once, and the client remembers you until you log out manually. \n\n\u003e [!NOTE]\n\u003e Forgot your password? There's no reset button yet. Changing it involves diving into the database directly. Not for the faint of heart — or the technically inexperienced.\n\n## Running Game Sessions\n\nGame Sessions are the heart of the app. Here, you can manage Scenes, Tokens, lighting, and player actions.\n\n### Creating a Session\n\nClick the Sessions panel in the top left, give your Session a name, and select a Landing Page image using the folder icon. Creating a Session without choosing the Landing Page first is not allowed. You can change the Landing Page later inside the Session ([more on that further down](#side-panel)).\n\n### Connecting to an Existing Session\n\nPick your Session from the dropdown, then click the connect button. You can copy the Session's licence key using the button on the far right — you'll need this to invite others (see below).\n\nYour latest Session is featured front and center in the pre-Session view for quick access.\n\n### Joining a Session with a Key\n\nTo join, you need that licence key from the Session's host. Paste it into the validation field between the dropdown and creation panel. If it matches, you're in.\n\n## Inside the Session\n\nWhen a Session opens, you'll see the Landing Page you picked earlier. Depending on your role (GM or player), you'll have access to different tools and panels.\n\n### The Side Panel\n\n![](https://github.com/user-attachments/assets/171a5797-9811-46b2-bb11-4e0d38b1ce81)\n\n\nThis is the big utility belt on the right. Buttons here do everything from changing Scenes to writing lore.\n\n- **Change Landing Page (GM only)**: Set a new Landing Page.\n- **Sync View  (GM only)**: Toggle this off to experiment privately. Toggle on to show players the current state.\n- **Token Effects**: For managing visual effects. Details covered in the Token section.\n- **Lighting Presets**: Manage reusable lighting setups.\n- **Journal**: For Notes, logs, and handouts.\n- **Scenes  (GM only)** Create, modify, or switch Scenes.\n- **Blueprints** Token templates.\n\n\u003e [!TIP]\n\u003e Items can be grouped into directories to keep things tidy. To move an item, click it and choose the **Select** option. This marks the item as selected. Then, click on the target folder and choose **Move here** to place the item inside it. If you want to move the item back to the root directory, click the item again and select **To root**.\n\n### The Tool Panel\n\nWhen a Scene is open, this floating toolbox appears. Here's what each mode does:\n\n- ![image](https://github.com/user-attachments/assets/8a4475ed-7545-4624-8f72-02db520b08d8) **Move**: Pan and zoom. Some tools disable movement, but you can always drag with the middle mouse.\n- ![](https://github.com/user-attachments/assets/e752b0ec-2826-46dc-acb6-b4de4849ed75) **Measure**:\n  - ![](https://github.com/user-attachments/assets/cce89eaa-0eb8-4ed7-bf97-db85e1a4240a) **Precice**: Straight-line distances for absolute positioning.\n  - ![](https://github.com/user-attachments/assets/fd13e099-c3bd-479d-8733-19a1d8d1fcc4) **Snap to Grid**:  Snaps to grid cells, handy for grid-based movement.\n  - While measuring, you can add waypoints by `Right Clicking` during the measurement.\n  - All measuring actions require holding down `Left Shift` while clicking.\n- ![](https://github.com/user-attachments/assets/343fee34-dea9-4121-8f15-3c0990b692e1) **Ping**:\n  - ![](https://github.com/user-attachments/assets/02cf72a0-0a71-4eee-bca1-a691b286c989) **Mark**: Place a marker with `Left Shift + Click`. Hold to focus everyone's view.\n  - ![](https://github.com/user-attachments/assets/bbe42143-abe3-4bcf-8a0e-424708099ad5) **Pointer**: Show a live pointer using `Left Shift + Click`. Follows your mouse and helps direct attention.\n- ![](https://github.com/user-attachments/assets/204be568-bcb7-421b-a1be-4435a92eb98e) **Notes**:\n  - ![](https://github.com/user-attachments/assets/241b2487-2600-4d01-9eed-0c58600ef3f6) **Create**: Hold `Left Shift` and click to drop a Note.\n  - ![](https://github.com/user-attachments/assets/fc724226-8719-432e-a257-84f08096b705) **Delete**: Click Notes to remove them.\n\n### The GM's Configuration Panel\n\nFor Game Masters only. When a Scene is open, this panel lets you reshape the Scene itself.\n\n- ![image](https://github.com/user-attachments/assets/5cd3c5a9-7728-4d85-88f2-bcd1e7617310) **Change Image**: Swap the Scene background. Dimensions must match.\n- ![image](https://github.com/user-attachments/assets/9a5c18fc-2d96-46e3-8874-7a14c98ef038) **Grid Settings**: Modify grid size, cell count, and colors. Read more about grid configuration [here](#tuning-the-grid).\n- ![image](https://github.com/user-attachments/assets/433783d9-c9bd-42d4-af63-a7fab88cd739) **Wall Tools**: Open [wall creation tools](#walls-defining-spaces-and-blocking-vision).\n- ![image](https://github.com/user-attachments/assets/8dda9d85-8639-4687-889a-cff2865e5165) **Lighting Tools**:  Edit [lights and fog](#lighting-up-the-Scene).\n- ![image](https://github.com/user-attachments/assets/443ecbe7-0e5e-4f0d-9f70-0c421d744883) **Portal Tools**:  Add [teleportation](#portals-way-of-linking-areas) points.\n- ![image](https://github.com/user-attachments/assets/844a458e-67b9-4f59-a542-f1c2a19d86ca) **Change View**: From this menu, you can change the current view (visible only to you). There are currently three options:\n  - ![image](https://github.com/user-attachments/assets/58d002ce-9268-4964-ae41-fd20421b3750) **Player View**:  This simulates what the selected Token would see, including lighting and fog. It's the default player experience.\n  - ![image](https://github.com/user-attachments/assets/0ed50a8f-e3a4-4a22-b95a-3f8ec026ad98) **Vision Only**: Shows the visible area based on each Token's vision range, but without applying any lighting effects. Useful for checking vision coverage.\n  - ![image](https://github.com/user-attachments/assets/e9560fa7-07ef-4cf0-8c0a-99b76b6bfdc6) **No Fog**: Completely removes fog and lighting for the GM, allowing a clear view of the entire Scene. Ideal for setup and configuration.\n- ![image](https://github.com/user-attachments/assets/d23e36ba-cd1e-4ad4-9382-eefa210bf290) **Token Groups**: Create and manage Token groups.\u003cTODO\u003e\n\n## Scenes\n\nScenes are your adventuring environments. Each one has its own lighting, Tokens, and configuration.\n### Creating a Scene\n\nFrom the Side Panel, upload an image to start a new Scene. It will then be added to your Scene list.\n\n### Activating a Scene\n\nClick the Scene, then hit **Play**. You can also rename or delete from this menu.\n\n\u003e [!TIP] \n\u003e Keep Sync View off if you don't want players seeing a half-finished dungeon.\n\n### Tuning the Grid\n\nA well-aligned grid is the core element of any grid-based system. It ensures that Tokens line up and measurements are accurate.\n\n\u003e [!IMPORTANT]\n\u003e After tweaking the grid, hit the **Save** button before switching Scenes — otherwise your changes might vanish.\n\nThere are many ways to setup the grid, but in my opinion the two best ways to achieve it are the following:\n\n#### If You Know the Dimensions\n\n1. Drag the **bottom-left grid corner** to the correct position. You can nudge it with the `Arrow Keys`; hold `Shift` while doing so for full-cell movement.\n2. Open the configuration panel and enter the exact width and height of the grid cells.\n3. Drag the **top-right corner** to stretch the grid and lock in the size.\n\n#### If You Don't Know the Dimensions\n\n1. Temporarily change the grid color to something that contrasts well with your map — bright pink is a classic.\n2. Drag **one of the corners** to a **known feature** (like a doorway or floor tile) and eyeball the estimated cell size.\n3. Stretch the **opposite corner** until the cells appear to align with map features.\n4. Adjust the **bottom-left corner** of the grid for final alignment, and input dimensions into the configuration panel if needed.\n\n### Lighting Up the Scene\n\nLighting is where the mood of your Scene is forged — from eerie crypts to sunlit forests, it's all about ambiance.\n\nThere are few fields to modify, each contributing to a different effect:\n\n- **Enabled**: This switch turns the entire lighting and vision system on or off. If you're wondering why everything's **pitch black**, check this first.\n- **Darkness Color**: This sets the color for areas your Tokens can't see. It doesn't affect lighting — it just fills in the unknown. Think of it as the color of the void.\n- **Global Lighting Color**: Applies a global light tint across the entire Scene. This is perfect for simulating daylight, torchlight, moonlight, or the dreadful green glow of goblin caverns. **Common tip:** a soft blue hue makes a convincing nighttime tone.\n\n\u003e [!NOTE]\n\u003e Like any good mood lighting, it might take a few tries to get just right. Don't worry if it's not perfect on the first pass — lighting finesse often comes with experimentation.\n\n### Light Sources\n\nLight sources are attached to Tokens or specific parts of the Scene to dynamically illuminate the surroundings based on their settings.\n\nTo place a light source, open the [Configuration Panel](#the-gms-configuration-panel), select the **Create** Tool from the Lighting section, choose a point and press `Left Shift + Click` to assign a light. You'll be able to fine-tune how it behaves, from color and intensity to range and effect.\n\nEach light has two light sources, allowing you to create a blend between the colors to create unique effects. Here are the main options for each light source:\n\n- **Enabled**: Toggles the light on or off.\n- **Direction**: Controls the direction in degrees where the light source points at. **Positive** values rotate the source **counter-clockwise** and **negative** rotates it **clockwise**.\n- **Radius**: Defines how far the light reaches from its origin point.\n- **Angle**: Defines the arc of angle for the light source. Use narrow angles for flashlights and larger for bonfires. \n- **Intensity**: Controls how strong the light appears. Higher values make the light appear brighter and more saturated.\n- **Color**: The hue of the light. Use warm tones for cozy Scenes, or sickly greens and icy blues for a more unsettling feel.\n- **Effect**: Adds a custom effect for the light source. This way you can create flickering torches or pulsating portals, drawing the attention of players.\n- **Effect Strength**: Controls the effect strength. This is the **strength** for **flickering** effect and **pulsating amount** for **pulsing** effect.\n- **Effect Frequency**: Controls how often the light flickers, or how fast the pulsating happens. For flickering, it's flickers per second, and for pulsing, it's duration of each pulse.\n\n\n\u003e [!TIP]\n\u003e Use multiple overlapping light sources with different ranges and colors to create more complex moods — like a smoky red glow near a forge.\n\nOnce you get the hang of it, lighting becomes a powerful storytelling tool. A single torch in an otherwise pitch-black dungeon can do more for tension than a paragraph of exposition.\n\n#### Lighting Presets\n\n\u003e [!WARNING] \n\u003e There is currently a known bug when creating or modifying a preset from light source panel. This causes the panel to open far left. You can still create and modify presets from the [Side Panel](#the-side-panel).\n\nLighting presets allow you to save and reuse specific lighting configurations across different Tokens or light sources. Instead of adjusting the color, intensity, and other fields manually each time, you can apply a preset to maintain consistency and speed things up.\n\nTo apply a preset, select one from the top right corner of the lighting configuration screen. This marks the current light source to use that preset. Any future changes made to the preset will automatically update all light sources using it.\n\nHowever, keep in mind:\n\n- If you manually change any field of a light source that's currently using a preset, that link will be broken.\n- Even if you revert the values to match the preset exactly, the connection is still considered broken.\n- To reassign the preset, simply select it again from the dropdown.\n  \nThis system helps maintain consistency across your Scenes while giving you the tools to tweak individual light sources as needed.\n\n\u003e [!WARNING]  \n\u003e All light presets are also available to players for **use**, **modification** and **deletion**.\n\n### Walls: Defining Spaces and Blocking Vision\n\nWalls are the unseen guardians of your Scene — defining rooms, blocking sightlines, and keeping overly curious players from wandering into the boss fight early.\n\n#### Placing walls\n\nBefore you start clicking, make sure to choose the appropriate wall type from the wall tools. Each type has its own behavior (we'll cover those in the next section).\n\nOnce you've selected a wall type, here's how to start building your dungeon:\n\n1. **Draw New Walls**: Hold `Left Shift` and drag your mouse to create a new wall segment.\n2. **Extend Existing Walls**: If you want to continue from a previously placed endpoint, hold `Left Control` and drag from that point.\n3. **Move Wall Points**: Drag any wall point with the mouse. They'll snap to nearby points automatically.\n4. **Split Walls**: Click to select a point and press `Space`. This splits the wall at that point — handy for editing just one section.\n5. **Right Click for Options**: Want to lock a door, change wall behavior, or inspect details? Right-click the point or segment.\n6. **Delete Wall Points**: Select the point and hit `Delete` or `Backspace`.\n\n\u003e [!TIP]  \n\u003e To preview what these walls actually do, switch to Player View in the Configuration Panel and drag a Token with vision around the map. You'll instantly see how your walls affect visibility and movement.\n\u003e \n\u003e Note that as a Game Master, you can freely move Tokens through walls. Players won't have this power in their hands, and moving a Token through a wall notifies you about it.\n\n#### Types of Walls\n\nWalls come in different flavors, and each one is designed to block (or not block) something. Here's the lineup:\n\n- ![image](https://github.com/user-attachments/assets/3ed8589a-37a8-4fb1-b07b-9ad634faa2d3) **Regular Walls**: The default wall type. Blocks both movement and vision, like any stone wall should.\n- ![image](https://github.com/user-attachments/assets/0dea34e8-5038-4fcf-a20d-e1569f1347b8) **Environmental Walls**: Acts like a regular wall, but also masks out everything inside the boundary. Don't go overboard. Too many of these can seriously impact performance.\n- ![image](https://github.com/user-attachments/assets/b9b10e05-af2c-4bf2-9897-b53cc111f11a) **Invisible Walls**: These block movement but let vision and light pass through. Perfect for physical barriers that characters can see through, like windows or fences.\n- ![image](https://github.com/user-attachments/assets/dfd684fe-ea46-4019-a3b0-04f80dba4217) **Regular Doors**: Functionally a wall, but with an on-screen icon that players can click to open or close the passage. `Right Click` the icon (or one of its wall points) to lock the door and deny entry.\n- ![image](https://github.com/user-attachments/assets/c2e42544-7391-4c3f-9b46-16eee606185b) **Secret Doors**: Like Regular Doors, but sneakier. These don't show an icon to players. Only the GM knows it's there — ideal for ambushes, escape routes, and secret lairs.\n- ![image](https://github.com/user-attachments/assets/574665c7-ec4a-4a66-9568-3522310a252c) **Curtains**: These block light but not movement. Useful for illusions or magical veils.\n- ![image](https://github.com/user-attachments/assets/dd689624-b6e8-40c3-a60d-fe6b453b9069) **Darkness**:  These blocks both movement and vision, and the global light from entering the enclosed area. Once the loop is closed, the area within becomes shadowed from everything, including global light.\n  \n\u003e [!NOTE] \n\u003e Darkness Walls automatically seal off the enclosed shape by connecting the last segment back to the first. This makes using them with openings like doors or windows tricky — so use sparingly.\n\n### Portals: Way of Linking Areas\n\nPortals are your go-to method for linking separate parts of the map — upstairs and downstairs, or maybe different wings of a castle.\n\n#### Creating Portals\n\nTo create a Portal, select the Portal creation view from the [Configuration Panel](#the-gms-configuration-panel), then hold `Left Shift` and click where you want the Portal to appear. You'll see a detection area pop up.\n\nThere are two modes of Portal operation:\n\n- **Proximity**: This mode keeps its ears open at all times. As soon as an active Token enters thePportal's radius, the teleportation triggers instantly. Ideal for seamless transitions between different segments.\n- **Stationary**: This mode is a bit more refined. It only activates when a Token finishes its movement inside the Portal's detection radius.\n\nPortals can be used creatively to manage complex Scenes. They're perfect for connecting floors, teleporting between distant areas, or hiding shortcuts your players won't notice.\n\n#### Managing Portals\n\nOnce placed, Portals aren't set in stone. You can:\n\n- **Move** a Portal by dragging it.\n- **Toggle** a Portal on or off by `Left Clicking` it.\n- **Configure** a Portal by `Right Clicking` it to access its settings.\n- **Delete** a Portal by selecting the Delete option in the Configuration Panel, then clicking the Portal you want to delete.\n\n\u003e [!TIP]  \n\u003e Disabled Portals don't show up for players and don't trigger teleports. Use this to control when shortcuts are revealed.\n\n#### Connecting Portals\n\nA single Portal does nothing on its own — like a bridge with no other side. To make them functional, you must connect two Portals together.\n\nHere's how:\n\n1. Open the Configuration Panel and select the Linking Tool.\n2. Click on the source portal (where the journey begins).\n3. Then click the destination portal (where it ends).\n\nA directional arrow will appear to indicate the connection.\n\nEach portal can:\n- Serve as the **source** of one connection (**must be enabled**).\n- Serve as the **destination** for multiple connections (**even when disabled**).\n\nRemoving a connected portal will automatically sever any links associated with it.\n\n\u003e [!NOTE]  \n\u003e Linking is one-directional. If you want two-way travel, you'll need to connect both portals to each other manually.\n\n## Tokens \u0026 Blueprints\n\nTokens represent characters, creatures, or objects that exist within your Scene — but unlike some systems, you can't just spawn Tokens from nothing. First, you need to create a **Blueprint**, which acts as the template. Once that's done, you can drag the Blueprint into a Scene to instantiate a **Token**.\n\nTo create a Blueprint:\n\n1. Open the Blueprints Panel from the Side Panel.\n2. Create a new Blueprint and configure it (name, image, vision, lighting, etc.).\n3. Once saved, it appears in your list of Blueprints and can be dragged into any Scene.\n\nTokens placed into the Scene are then fully configurable on their own. But here's the twist: Blueprints can optionally be **marked as Synced** from their context menu — look for the little globe icon on the right side of the Blueprint in the Side Panel.\n\nIf you drag a **Synced Blueprint** into a Scene, that Token maintains a live connection with the original. Update the Blueprint? All Tokens using it will update too. Adjust a Token that originated from it? The source Blueprint (and its other synced Tokens) update along with it.\n\n\u003e [!IMPORTANT]  \n\u003e Each Blueprint can only sync to Tokens that were created from it *after* it was marked as synced. Existing Tokens won't retroactively sync.\n\nBlueprints can also be created inside the **Public Folder**, a shared space designed for your players. Blueprints in this folder can be freely created, edited, and dragged into Scenes by players. It's a great way to let them manage their own Tokens, companions, or even bring in utility objects like illusionary spell markers, measuring tools, or custom light sources.\n\n\u003e [!TIP]  \n\u003e Use the Public Folder for anything players should have access to — it keeps the GM folder tidy and gives players just enough rope to be useful (or to hang themselves with, depending on your game).\n\n\u003e [!CAUTION]  \n\u003e If you're not using Synced Blueprints, editing a placed Token won't update the Blueprint it came from — and modifying a Blueprint won't affect existing Tokens already in a Scene.\n\n### Permissions \u0026 Visibility\n\nEvery Token and Blueprint in your game can be finely tuned for visibility and player control, giving you complete command over what your players see — and what they can do.\n\n\u003e [!NOTE]\n\u003e You might need to refresh the visibility and permission panels when opening them to refresh default permissions. If your visibility or permission panels looks empty, this might be the issue.\n\n#### Permission Levels\n\nEach player's interaction with a Token is defined by its Permission Level, which comes in three tiers:\n\n- **None (Default)**: The player has no control or visibility over the Token beyond what the game passively reveals (e.g., lighting, fog). They cannot move, select, or interact with the Token.\n- **Observer**: The player can view the world through the Token's vision (great for NPC allies or familiars), but cannot move or edit it in any way.\n- **Controller**: The player has full control over the Token. They can move it, edit its properties, delete it, and use it as their own character.\n\n\u003e [!NOTE] \n\u003e The Game Master is considered a **Controller** for **all** Tokens by default, regardless of individual permission settings.\n\n#### Visibility\n\nVisibility settings control who can see the Token at all — regardless of lighting or line-of-sight. This allows for more immersive scenarios:\n\n- Hide an invisible creature from all but one player.\n- Let one character see hidden allies, thanks to magical effects.\n- Surprise players with hidden enemies that only appear when triggered.\n\nVisibility works per player and can be configured on both Tokens and Blueprints. Tokens retain their visibility settings when placed in a Scene.\n\n\u003e [!TIP]\n\u003e A player has the ability to see invisible creatures. You configure a hidden creature to be invisible to everyone except that player. The creature appears only to them — and they now face the moral dilemma of shouting a warning or staying quiet.\n\nThese controls help ensure that only the right eyes see what they're supposed to, giving your game that layer of mystery and surprise. It also opens the door to stealth mechanics, hidden allies, and all the chaos that follows.\n\n### Limiting Token Vision\n\nLimiting Token vision is crucial for creating realism in your game. By restricting what each Token can see, you ensure that players only have information their characters would reasonably know.\n\nTo limit Token vision:\n\n- **Assign Vision Ranges:** Each Token can be given a specific vision range from its configuration panel. This determines how far the Token can see in any direction.\n  \n\u003e [!TIP]  \n\u003e You can set the global vision range from the [lighting configuration panel](#lighting-up-the-Scene).\n\n- **Configure Vision Types:** Choose between different vision types, such as normal, darkvision, or blindsight, depending on the character's abilities. These options are available in the Token's settings.\n- **Use Walls:** Walls will automatically block vision, preventing Tokens from seeing through them.\n- **Adjust Lighting:** The amount of light in a Scene affects how much a Token can see. Tokens without darkvision will be limited by darkness, while those with darkvision can see further in low-light areas.\n\n\u003e [!TIP] \n\u003e You can test Token vision by switching to the **Player View** in the Configuration Panel and clicking on a Token. This shows exactly what that Token can see, helping you fine-tune vision settings for your game.\n\n### Token Groups\n\nToken Groups are your secret weapon for timed ambushes, synchronized strikes, or just unleashing chaos with a single click. They let you group Tokens together and control them as a unit — making it easy to reveal, or hide multiple creatures or objects at once.\n\nTo group Tokens:\n\n1. Select the Tokens you want to group by clicking on them. Hold `Left Control` to multi-select.\n2. Press `Left Control` + `1`, `2`, or `3` to assign the selected Tokens to Group **1**, **2**, or **3** respectively.\n\nOnce grouped, you can manage the Token groups from the [Configuration Panel](#the-gms-configuration-panel):\n- Enable / Disable Groups: Toggle visibility and interaction for an entire group in one go.\n- Clear Group: Remove all Tokens from a group without affecting the Tokens themselves.\n\nTokens can belong to multiple groups at once, allowing for overlapping control schemes. To remove a Token from a group, simply select it and press `Left Control + [group number]` again — the same key combo unassigns it.\n\nToken Groups are perfect for preparing surprises, managing encounters, or just staying organized in a dungeon crawl.\n\n### Token Effects\n\nToken Effects are a powerful way to visually enhance your Scenes by attaching dynamic overlays **above or below** Tokens. Whether your caster is walking around with a swirling aura of fire, or your summoned spirit exudes radiant energy, effects help communicate what's happening.\n\nTo add a Token Effect, Select a Token, and assign an effect. Each effect can be:\n- Positioned **above or below** the Token.\n- Assigned an image — use a visual representation like fire, smoke, runes, or magical energy.\n- Animated with effects such as pulse, rotation, or both — perfect for auras, enchantments, or timers.\n\nEffects behave similarly to Lighting Presets — you can configure them once and apply them consistently across multiple Tokens.\n\n\u003e [!TIP]\n\u003e Use Token Effects to represent:\n\u003e \n\u003e - Ongoing spell effects (like Spirit Guardians or Darkness)\n\u003e - AoE zones that follow the Token\n\u003e - Utility indicators (radius indicators, stealth mode, etc.)\n\u003e - Light sources (glowing orbs, torches, magical lanterns)\n\n## Journals \u0026 Notes\n\nJournals and Notes are your tools for storing, sharing, and organizing written information — whether it's GM secrets, player lore, or in-game puzzles.\n\nWhile similar, they serve different purposes:\n\n- Notes are Scene-specific. They're placed directly onto the Scene and tied to that location. Perfect for handouts, environmental storytelling, or leaving clues in a dungeon.\n- Journals are global, accessible from the Journal Panel at any time, regardless of which Scene is active. They're ideal for campaign logs, player backstories, rules references, or worldbuilding material.\n\nEach Note and Journal entry features two sections: **Text** and **Image**, accessible via the toggle in the bottom right corner. If you've selected an image for the entry, that section will be shown by default when opening the Note or Journal — making this a powerful way to share visual content with your players.\n\n\u003e [!TIP]  \n\u003e Want to display a clue, handout, or spooky sketch? Just create a Journal, add your image, and hit the upward arrow icon to push it to your players. Each player can also save a local copy of that image to their Journal Panel for future reference.\n\n\u003e [!TIP]\n\u003e The text editor supports some Markdown features, like headings, text decorations and lists.\n\n### Scene Notes\n\nTo place a Note:\n\n1. Open the [Tool Panel](#the-tool-panel).\n2. Select the Note Tool.\n3. Click where you want to place the Note in the Scene while holding `Left Shift`.\n\nBy default, Notes are visible only to you. You can change this by clicking the Context Menu (the small icon to the left of the close button on the Note). This menu allows you to:\n\n- Modify the visibility.\n- Send the Note to everyone, instantly popping it open on their screens (via the upward arrow icon).\n- Save a copy to your Journal Panel, creating a static snapshot of the Note's current state.\n\n\u003e [!NOTE] \n\u003e Saving a local copy creates a separate Journal entry — it won't auto-update if the original Note changes.\n\n### Global Journals\n\nJournals are created and edited from the Journal Panel, which houses all your global entries. They're not tied to any Scene, making them perfect for persistent reference material.\n\nUse Journals to:\n\n- Track party progress.\n- Store lore handouts.\n- Keep a running GM prep document.\n- Share Session summaries with players\n\n\u003e [!TIP]  \n\u003e You can turn any Note into a Journal Entry using the save icon in the Note's context menu — great for preserving player-discovered information across Scenes.\n\nYou can also share a Journal Entry with another player or Game Master by clicking the Share button on the Journal context menu on the Side Panel. This allows you to create shared, Session-wide Journals where everyone can contribute or refer to shared information.\n\n\u003e [!NOTE] \n\u003e When sharing a Journal, if some player doesn't show up right away, click the refresh button to the left of the close button on the panel to update the list.\n\n## Useful Keybinds\n\nThere are many useful keybinds, which are not listed anywhere in the application. Here's a list of all the keybinds inside the Session:\n\n### General Keybinds\n\n| Keybind                  | Use Case / Description                                                                           |\n| ------------------------ | ------------------------------------------------------------------------------------------------ |\n| **Esc**                  | Opens the settings panel anywhere in the application to manage resolution and toggle fullscreen. |\n| **Middle Button + Drag** | Force move the camera when Left Click Dragging isn't available.                                  |\n\n### Grid \u0026 Scene Configuration\n\n| Keybind                | Use Case / Description                                      |\n| ---------------------- | ----------------------------------------------------------- |\n| **Arrow Keys**         | Nudge the grid corner for precise alignment.                |\n| **Shift + Arrow Keys** | Move the grid corner by a full cell for faster adjustments. |\n\n### Wall Tools\n\n| Keybind                     | Use Case / Description                                                           |\n| --------------------------- | -------------------------------------------------------------------------------- |\n| **Left Shift + Drag**       | Draw a new wall segment.                                                         |\n| **Left Control + Drag**     | Extend an existing wall from a selected endpoint.                                |\n| **Space**                   | Split a wall at the selected point.                                              |\n| **Delete** or **Backspace** | Delete a selected wall point.                                                    |\n| **Right Click**             | Open options for a wall point or segment (lock, change behavior, inspect, etc.). |\n\n### Measuring Tools\n\n| Keybind                           | Use Case / Description                                              |\n| --------------------------------- | ------------------------------------------------------------------- |\n| **Left Shift + Click**            | Start measuring (all measuring actions require holding Left Shift). |\n| **Right Click (while measuring)** | Add waypoints during measurement.                                   |\n\n### Ping Tools\n\n| Keybind                     | Use Case / Description                                                   |\n| --------------------------- | ------------------------------------------------------------------------ |\n| **Left Shift + Click**      | Place a marker or show a live pointer (depending on selected ping tool). |\n| **Hold Left Shift + Click** | Focus everyone's view on the marker.                                     |\n\n### Notes\n\n| Keybind                | Use Case / Description               |\n| ---------------------- | ------------------------------------ |\n| **Left Shift + Click** | Drop a Note at the clicked location. |\n\n### Token Management\n\n| Keybind                     | Use Case / Description                                                                |\n| --------------------------- | ------------------------------------------------------------------------------------- |\n| **Arrow Keys**              | Move a Token one cell at a time.                                                      |\n| **Left Alt + Drag**         | Drag Token without the grid snapping.                                                 |\n| **Left Control + Drag**     | Drag Token with pathfinding enabled, findign the best route around walls and corners. |\n| **Left Shift + Drop**       | Teleport the Token to the cursor position. Useful for cross-map transfers.            |\n| **Space**                   | Quickly toggle the Token on and off.                                                  |\n| **X**                       | Quickly add the **Dead** condition for the Token.                                     |\n| **Delete** or **Backspace** | Quickly delete the Token.                                                             |\n| **Q** and **E**             | Rotate the light source arount the Token.                                             |\n| **A** and **D**             | Rotate the Token.                                                                     |\n\n### Token Groups\n\n| Keybind                           | Use Case / Description                           |\n| --------------------------------- | ------------------------------------------------ |\n| **Left Control + Click**          | Multi-select Tokens for grouping.                |\n| **Left Control + 1/2/3**          | Assign selected Tokens to Group 1, 2, or 3.      |\n| **Left Control + [group number]** | Remove a Token from a group (toggle assignment). |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fithardev%2Frpg-viewer-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fithardev%2Frpg-viewer-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fithardev%2Frpg-viewer-client/lists"}