A freeform canvas tool built for solo tabletop RPG players. Place card decks, dice, sticky notes, and images on an infinite canvas, manage your hand, take notes, and save your sessions — all in one window.
Language: Python 3 + PyQt6 | License: GPL-3.0
![]() |
|
![]() |
![]() |
![]() |
![]() |
- OS: Windows 10+, Linux (most distributions), macOS (untested)
- Python: 3.9 or newer (source installs only)
- Standalone exe: Windows 10+ only — no Python required
- Download the latest release archive from the Releases page
- Extract it anywhere on your drive
- Run
SoloCanvas.exe— keep it in the same folder as yourDecks\,Dice\,Images\, andNotes\folders
- Clone or download the repository
- Run the appropriate launch script — it handles everything else automatically:
- Windows: double-click
launch.bat - Linux: run
./launch.shin a terminal
- Windows: double-click
The launch scripts are designed to get SoloCanvas running with no manual setup. On first run they create an isolated Python virtual environment, install all required packages into it, and launch the app. Your system Python installation is never modified.
- Searches
PATHfor Python 3, skipping the Windows Store stub - Creates a
.venv\folder in the SoloCanvas directory on first run - Checks for all required packages and offers to install any that are missing
- Installs packages into the virtual environment only — not system-wide
- Launches the app without a terminal window (
pythonw.exe)
- Searches
PATHfor Python 3 - Creates a
.venv/folder in the SoloCanvas directory on first run - If
venvorpipsupport is missing (common on Debian/Ubuntu), detects your package manager and offers to install the required system packages — with an explanation and confirmation prompt before requestingsudo - Supports:
apt(Debian/Ubuntu),dnf(Fedora/RHEL),pacman(Arch),zypper(openSUSE) - Installs all Python packages into the virtual environment only
- Pauses on exit so the terminal stays open until you're done
Produces a self-contained standalone exe using PyInstaller:
dist\SoloCanvas\SoloCanvas.exe
- Searches
PATHfor Python 3 dynamically — no hardcoded paths - Installs PyInstaller if needed
- Bundles all dependencies, fonts, icons, and resources
- Copies
Dice\andresources\next to the exe automatically - Creates empty
Decks\,Images\, andNotes\folders in the output
- Infinite canvas — zoom, pan, and arrange anything freely with no boundaries
- Background theming — the entire UI (toolbar, hand strip, dialogs) derives its colour from the canvas background colour
- Grid — optional dot or line grid with configurable size and snap-to-grid
- Undo / Redo — full undo history for canvas actions (
Ctrl+Z/Ctrl+Shift+Z) - Drawing tools — freehand draw and shape tools (line, rectangle, ellipse) with configurable colour, width, and opacity
- Measurement tool — drag to measure distances on the canvas with configurable scale and units. Area and cone measurement as well.
- Mini Map — floating overview centered on a selcted image item. Good for
- Multi-select — rubber-band select,
Ctrl+A, orCtrl+click; batch actions (flip, roll, rotate, delete, lock) apply to all eligible selected items with counts shown in context menus - PDF Viewer — open and page through PDF files from the Notepad window
- Deck Library — load image-based decks from the
Decks\folder; double-click to place on canvas - Drawing cards — hover over a deck and press a number key to draw to hand;
Shift+number draws directly to the canvas - Flip — flip any card or deck face-up / face-down individually or in bulk
- Shuffle — shuffle any deck or stack; animates with a shake
- Card Picker — search cards by name, drag to reorder the deck, split at a selected card, reset or shuffle order, adjust thumbnail size
- Card stacking — select multiple cards and/or decks and stack them into a new deck-like stack (
Ctrl+G); disband a stack to return cards to their original decks - Spread — spread a deck's cards horizontally on the canvas (
Ctrl+Shift+G) - Recall — return canvas cards to their decks via the Recall dialog (
Ctrl+R) - Hand strip — persistent card hand at the bottom of the window; drag cards to canvas, reorder within hand, multi-select, return to deck
- Dice Bag — place dice on the canvas from a palette of d4, d6, d8, d10, d12, d20, and dF (Fate/Fudge)
- Rolling — press
Rto roll all selected dice; double-click a die to roll it; roll animation plays on each roll - Roll Log — running history of all rolls, updated in real time; accessible from the die context menu
- Custom dice sets — load custom dice face images from the
Dice\folder; manage sets via the Dice Bag
- Drag and drop — drag image files from Explorer or your file manager directly onto the canvas
- Paste from clipboard —
Ctrl+Vpastes any image copied from a browser, editor, or file; auto-saved to your local Images folder - Image Library — browse and manage your image collection; Scene tab shows canvas images, Library tab shows all saved images
- Localise — copy externally linked images into your local library for portability
- Anchor — pin an image flat to the canvas background so it never moves or interferes with other items
- Hover preview — hover over any image to see a full-size preview (configurable)
- Resize — drag corners to resize; hold Shift to lock aspect ratio
- Rotate —
E/Qkeys or mousewheel while hovering; configurable rotation step
- Freeform notes — place resizable, rotatable sticky notes anywhere on the canvas
- Customisable appearance — set note background colour and font colour per note or from the Settings dialog
- Copy / Paste — duplicate sticky notes via
Ctrl+C/Ctrl+Vor the context menu - Lock — lock a sticky note in place to prevent accidental moves
- Text formatting — Bold (
Ctrl+B), Italic (Ctrl+I), Underline (Ctrl+U) - Font controls — choose font family and size; settings persist between sessions
- Multi-file — open, save, and switch between any number of Markdown files
- Named sessions — save and load canvas states with a name of your choice
- Thumbnail previews — each session stores a canvas screenshot; the Open Session dialog shows previews at a glance
- Autosave — automatically saves on window close; saves to the active session if named, otherwise to a timestamped autosave
- Session picker — browse and delete saved sessions from the Open dialog
- Rebindable hotkeys — every keyboard shortcut can be reassigned from the Settings dialog
- Canvas — background colour, grid style (dots / lines), grid size, snap-to-grid toggle
- Display — zoom limits, hover preview enable/disable, card dimensions, rotation step
- Sticky Notes — default font family, size, font colour, and note colour for new notes
- Measurement — scale, units, line style
- Drawing — default tool, colour, stroke width, opacity
All hotkeys are rebindable in Settings → Hotkeys. Press K at any time to open the in-app hotkey reference.
| Key | Action |
|---|---|
| Scroll wheel | Zoom in / out |
= / - |
Zoom in / out |
Ctrl+0 |
Reset zoom |
| Middle-click drag | Pan |
| Right-click drag | Pan |
G |
Toggle grid |
H |
Toggle hand strip |
M |
Toggle magnify overlay |
Escape |
Exit active tool / show startup dialog |
| Key | Action |
|---|---|
Ctrl+A |
Select all |
Ctrl+C |
Copy selected |
Ctrl+V |
Paste |
Delete |
Delete selected |
L |
Lock / unlock selected |
U |
Send selected to back |
E |
Rotate clockwise |
Q |
Rotate counter-clockwise |
F |
Flip selected cards / decks |
| Key | Action |
|---|---|
1–9 |
Draw N cards from hovered deck to hand |
R |
Shuffle selected deck(s) |
Ctrl+G |
Stack selected cards / decks |
Ctrl+Shift+G |
Spread selected deck horizontally |
Ctrl+R |
Open Recall dialog |
| Key | Action |
|---|---|
R |
Roll selected dice (simultaneously with shuffle if decks also selected) |
| Double-click | Roll die |
| Key | Action |
|---|---|
N |
Open Notepad |
D |
Open Deck Library |
I |
Open Image Library |
B |
Open Dice Bag |
K |
Open Hotkey Reference |
Ctrl+N |
New session |
Ctrl+S |
Save session |
Ctrl+O |
Open session |
Ctrl+I |
Import deck |
Ctrl+Z |
Undo |
Ctrl+Shift+Z |
Redo |
SoloCanvas loads card decks from the Decks\ folder next to main.py (or the exe).
Each deck is a subfolder containing card images and a back image:
Decks/
My Deck/
card_01.png
card_02.png
...
back.png ← must contain "back" in the filename
Supported formats: .png, .jpg, .jpeg, .bmp, .gif, .tiff, .webp
All images whose filename contains back become the deck back. All other images become cards.
SoloCanvas/
main.py ← entry point
src/ ← application source
Decks/ ← card decks (one subfolder per deck)
Dice/ ← dice SVG assets
Images/ ← localised image library
Notes/ ← notepad Markdown files
launch.bat ← Windows launch script
launch.sh ← Linux launch script
build.bat ← Windows PyInstaller build script
requirements.txt ← Python dependencies
User data (sessions, settings, autosaves) is stored in:
- Windows:
%APPDATA%\SoloCanvas\ - Linux:
~/.local/share/SoloCanvas/(or equivalent)
SoloCanvas is free software, distributed under the GNU General Public License v3.0.
Copyright © 2026 Geoffrey Osterberg
You may redistribute and/or modify it under the terms of the GPL as published by the Free Software Foundation — either version 3 of the License, or (at your option) any later version.
See LICENSE or https://www.gnu.org/licenses/ for the full text.




