{"id":21962216,"url":"https://github.com/antoniotejada/qtvtt","last_synced_at":"2025-04-23T21:20:39.299Z","repository":{"id":130016372,"uuid":"573601294","full_name":"antoniotejada/QtVTT","owner":"antoniotejada","description":"Virtual Table Top implemented in Python and Qt","archived":false,"fork":false,"pushed_at":"2023-12-01T19:47:56.000Z","size":1047,"stargazers_count":25,"open_issues_count":0,"forks_count":9,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-30T03:41:08.798Z","etag":null,"topics":["dungeon-crawler","dungeons-and-dragons","pyqt5","qt5","roleplaying-game","rpg-tool","tabletop-rpg","tabletop-rpgs","virtual-tabletop","vtt","vtt-game-systems"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/antoniotejada.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2022-12-02T21:38:45.000Z","updated_at":"2025-03-12T21:38:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"cdaaa617-d25d-4d2e-9994-54b913d5cf60","html_url":"https://github.com/antoniotejada/QtVTT","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoniotejada%2FQtVTT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoniotejada%2FQtVTT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoniotejada%2FQtVTT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoniotejada%2FQtVTT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/antoniotejada","download_url":"https://codeload.github.com/antoniotejada/QtVTT/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250515161,"owners_count":21443332,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["dungeon-crawler","dungeons-and-dragons","pyqt5","qt5","roleplaying-game","rpg-tool","tabletop-rpg","tabletop-rpgs","virtual-tabletop","vtt","vtt-game-systems"],"created_at":"2024-11-29T10:35:38.829Z","updated_at":"2025-04-23T21:20:39.281Z","avatar_url":"https://github.com/antoniotejada.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QtVTT\r\n\r\nQt Virtual Table Top \r\n\r\nVirtual Table Top written in Python and Qt\r\n\r\n## Screenshots\r\n\r\n\r\n### Out of the frying pan into the fire\r\n![image](https://user-images.githubusercontent.com/6446344/205397907-874440f5-d490-4925-bb9b-ff07636287d5.png)\r\n\r\n### Player View, DM View, Browser, and Tree\r\n\r\n![image](https://user-images.githubusercontent.com/6446344/205719486-b1cd811e-61eb-4985-a11e-a7fa2fbbe253.png)\r\n\r\n### Documentation browser with TOC, term filter and search, circular walls\r\n\r\n![image](https://user-images.githubusercontent.com/6446344/206880662-6bb845c3-a5ce-48a9-81bd-bdf7380bb8b1.png)\r\n\r\n### Clipped fog polygons, light range, hidden tokens\r\n\r\n![image](https://user-images.githubusercontent.com/6446344/207979570-083f0404-b36d-4d6a-b69e-4cd095d546f7.png)\r\n\r\n### Documentation browsing, combat tracker, encounter builder\r\n\r\n![image](https://user-images.githubusercontent.com/6446344/208770713-77b870b3-4588-45d0-a009-cec9ce1d8307.png)\r\n\r\n### Fog of war, display token initiative order\r\n\r\n![image](https://user-images.githubusercontent.com/6446344/210019679-b6cf5449-ef91-4268-881d-7705bc1dc030.png)\r\n\r\n### Shared and private handouts\r\n\r\n![image](https://user-images.githubusercontent.com/6446344/210111727-1c3b2dbb-aa3f-4fe4-9ca3-d237a61b59bc.png)\r\n\r\n### Editable walls\r\n\r\n![image](https://user-images.githubusercontent.com/6446344/210600981-3d17424b-45d8-49dd-a153-a6ebdde90abf.png)\r\n\r\n### Text Editor with outline, search, blockquote, text formats, headings, lists, image, table\r\n\r\n![image](https://user-images.githubusercontent.com/6446344/212931148-85ed2f4b-0dfc-460f-8dfb-6a0f5a398e05.png)\r\n\r\n### Playerviewport synchronized to the player view, remote view in edge app mode\r\n\r\n![image](https://github.com/antoniotejada/QtVTT/assets/6446344/715eb845-a2b9-4c71-b1fb-4c0d979ba534)\r\n\r\n### One familiar setting with encounters, combat tracker, and manually added doors and walls\r\n\r\n![image](https://github.com/antoniotejada/QtVTT/assets/6446344/5f5df624-5c5d-4aec-b389-3a98b1075f73)\r\n\r\n### Manually recreated Dyson Logos map using textured walls and [Mark Gosbell classic symbols](https://markgosbell.itch.io/classic-dungeon-map-symbols)\r\n\r\n![image](https://github.com/antoniotejada/QtVTT/assets/6446344/aa76e1c0-de5e-46aa-a1ab-533e93b34d0d)\r\n\r\n## Videos\r\n\r\n\r\n### Initial line of sight test\r\nhttps://user-images.githubusercontent.com/6446344/205396105-c2e846ed-1e78-4b48-b261-000bae25c6bb.mp4\r\n\r\n[Dungeown Scrawl v2](https://app.dungeonscrawl.com/) map imported from [One Page Dungeon by Watabou](https://watabou.itch.io/one-page-dungeon), with doors as walls, player and DM views, line of sight, and line of sight debugging.\r\n\r\n### Multiple tokens, wall \u0026 door collisions, walking around opening doors\r\nhttps://user-images.githubusercontent.com/6446344/205395528-095dee66-6fb8-4a85-9f25-d4a1b818802d.mp4\r\n\r\n### Scene creation, token resizing, token labeling, circular walls, documentation browsing, encounter builder, combat tracker\r\n\r\nhttps://user-images.githubusercontent.com/6446344/208662246-48a0f31f-b2f3-45e3-915e-3004dea4d36d.mp4\r\n\r\n### Line of sight, fog of war, light range\r\n\r\nhttps://user-images.githubusercontent.com/6446344/209599973-5bc5334e-0cb4-4e40-ab0f-aa14b97c793c.mp4\r\n\r\n### Setting up walls fron scratch, editing walls to add openings\r\n\r\nhttps://user-images.githubusercontent.com/6446344/213870729-844c23c7-9998-4427-979b-842faaaab076.mp4\r\n\r\n### Automatic wall creation\r\n\r\nhttps://user-images.githubusercontent.com/6446344/215364970-b693fa03-37bf-4a86-a693-935307eb1290.mp4\r\n\r\n### Open Dyson Logos page and automatic wall creation\r\n\r\nhttps://user-images.githubusercontent.com/6446344/217021348-e1ba535a-af18-4c77-b87b-6f586a6f1805.mp4\r\n\r\n\r\n## Features\r\n\r\n- Written in Python and using PyQt, some HTML and SVG for the HTTP serving\r\n  player's view.\r\n\r\n### Main app\r\n- Import [Dungeon Scrawl v1](https://probabletrain.itch.io/dungeon-scrawl) and [v2](https://app.dungeonscrawl.com/) maps with walls and doors\r\n- Load tokens\r\n- Move tokens with mouse or keyboard\r\n- Line of sight display any token\r\n- Wall and door collision detection for any token\r\n- Door opening/closing with proper line of sight recalculation\r\n- Player view with line of sight, exported via http (see http server)\r\n- Dockable windows for multiple monitor support\r\n- Player view resolution independent from DM resolution\r\n- Per scene music playlist\r\n- HTML Browser\r\n- Scene tree window\r\n- Creating, loading and saving scenes\r\n- Importing images, tokens, music, handouts, texts\r\n- Deleting tokens, images, walls, doors, music, handouts, texts\r\n- Cut, copy, and paste selected tokens, images, walls\r\n- Multiple item selection via rubberband\r\n- Move/scale images, tokens\r\n- Textured and variable-width visible walls\r\n- Select point on single click, full wall on double click (so it can be deleted,\r\n  moved, etc wholesale)\r\n- Editing token labels\r\n- DM fulll and view screenshots\r\n- HTML documentation browser with quick filter, table of contents and search\r\n  result navigation intra and inter documents\r\n- Grid drawing\r\n- Snap to grid\r\n- Clip line of sight to different light ranges (candles, torches, etc) \r\n- AD\u0026D2E Encounter Builder with difficulty rating and importing into the current\r\n  scene, filter monsters and add them as tokens to the current scene.\r\n- AD\u0026D2E Combat tracker for rolling initiative, hit points, attacks, damages for\r\n  the tokens in the current scene.\r\n- Encounter management: Store multiple encounters in scenes, edit via encounter\r\n  builder, add encounter to combat tracker, add/drag/copy\u0026paste other tokens to\r\n  combat tracker\r\n- Fog of war, show faded visited areas\r\n- Token tooltips with hit points, AC, THAC0, etc\r\n- Token center label with initiative order\r\n- Shared and private handouts\r\n- Create and edit walls, add points after a given point, remove a point, split\r\n  wall in two, remove empty walls\r\n- Edit doors by turning into walls back and forth\r\n- Text editor for adventure script, with realtime table of contents, search,\r\n  (some) markdown tag and keyboard shortcut formatting support, tables, and\r\n  images.\r\n- Intuitive grid cell size and origin setting\r\n- Automatic wall creation via contour detection\r\n- Open Dyson Logos page as campaign (eg https://dysonlogos.blog/2022/01/08/heart-of-darkling-frog-tower/ )\r\n- Show player viewport on DM view, synchronize to player's and remote views\r\n\r\n### HTTP server\r\n- Visualize player's view with line of sight\r\n- Periodic image autorefresh\r\n- Normal/Fullscreen\r\n- Draggable tokens with labels (just dummy for now, not sync'ed with the server)\r\n- SVG or HTML\r\n- Main page with available player views, handouts\r\n- Serve handouts\r\n\r\n## Requirements\r\n- Python 2.7\r\n- PyQt5\r\n- numpy (wall detection disabled otherwise)\r\n\r\n## Installation\r\n- Won't work as is yet, will fail to run due to missing (copyrighted) AD\u0026D 2E\r\n  data files, and hardcoded asset (fonts, default token...) and saving directory\r\n  structure.\r\n- Shouldn't be hard to hack to run with few changes, but functionality dependent\r\n  on those AD\u0026D 2E data files will fail (Documentation Browser, Encounter\r\n  Builder, Combat Tracker...)\r\n\r\n## Todo \r\n### Main app\r\n- Add sample scenes\r\n- Don't hard-code documentation/ abstract it out in rulesets/load documentation\r\n  menu\r\n- Import Universal VTT (Dungeondraft)\r\n- Import .mod/.pak (Fantasy grounds)\r\n- Invisible walls: the wall hides the tokens behind but without \"fog\" (eg to\r\n  make hiding in trees/bushes less obvious)\r\n- Window walls: the wall allows line of sight through but collides like a solid\r\n  wall\r\n- Support animated tokens/images (maps) in mp4, webm, gif, etc (eg see\r\n  https://dynamicdungeons.com/). Will need the http client to receive the map\r\n  and tokens/viz separately (also, record animated videos from DungeonDraft or\r\n  Fantasy Grounds Unity using eg XBOX game bar)\r\n- Use backfacing lines to project the fog, should give a more natural fog for trees, terrain, etc?\r\n- Export to Dungeon Scrawl for re-rendering (even re-render under the hood?) \r\n- Music objects, area, fading in / out, shuffle, ordered (see https://tabletopaudio.com/, https://www.youtube.com/@bardify)\r\n- Hide/Show objects (secret doors, one way walls, secret areas, fogged areas,\r\n  etc)\r\n- Label objects for text on maps (can work around by using tokens of numbers for\r\n  just numbers or the label of transparent tokens? Would need DM-only tag or\r\n  hide it but without too much fading?)\r\n- Layers, groups, stack objects up/down\r\n- Light sources and illumination/flickering/animated lights\r\n- Multiple floors support\r\n- Image/token browser\r\n- Shared pointers and ephemeral drawing \r\n- Wall, door, token, image, drawing, fog zone, creation/deletion\r\n- Permanent drawing (spell areas, fire splash, game-clock timer areas, grids, \r\n  areas of fog of war, etc)\r\n- Measurement tools (cone, circle, line, square)\r\n- Token states/stats/heading (stunned, game-clock timers, etc)\r\n- Campaign/scenes management\r\n- Copy paste of any object\r\n- Cross links/embedded tools in text editor (scenes, random tables, monsters,\r\n  etc)\r\n    - See https://jsigvard.com/dnd/tables.php for random tables\r\n- Markdown text import/edit\r\n- Undo/redo\r\n- Record playing/combat history\r\n- Dice rolling\r\n- Token designer (import any image, rotate, scale, tint, circle cut and draw\r\n  ring)\r\n- AD\u0026D2E spell browser\r\n- AD\u0026D2E Treasure generator\r\n- AD\u0026D2E Nested random tables\r\n- AD\u0026D2E character sheets\r\n- AD\u0026D2E character creation\r\n- AD\u0026D2E Party tracker (inventory, weight, treasure splitter...)\r\n- Record audio of local app (allow transcript? test with bluetooth micro?)\r\n- Record video of local app and/or server UI \r\n- Chat\r\n- Video\r\n- 3D View with miniatures on flat or 3D map (top, ortho)\r\n- Vector Editor (layers, blends, assets, etc) \r\n- Send shared view via dirty rects\r\n\r\n### HTTP Server\r\n- Local pointer/ephemeral drawing for signaling, etc\r\n- Local distance measuring\r\n- Local panning/zooming (won't work for 3D view/will require webgl)\r\n- Local token label/stats drawing for better text clarity\r\n- Local token roster drawing for initiative visualization, current turn, etc\r\n- Local token moving/dragging (no NPCs unless it's a DM view? no viz updates?\r\n  approve movements? local render of shadow tokens with original positions?)\r\n- Local grid drawing\r\n- Local drawing for lighter bandwidth (send background, tokens, fog polygons -\r\n  may be insecure and incompatible with 3d view)\r\n- Animated maps by pulling the mp4/webm and drawing on top\r\n- Per-player player view\r\n- Send current music (data url or fetched from http server)\r\n- Character sheet sharing (per player)\r\n- Chat\r\n- Video\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantoniotejada%2Fqtvtt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fantoniotejada%2Fqtvtt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantoniotejada%2Fqtvtt/lists"}