A modern infinite whiteboard application built with Python and PySide6.
InkFlow is currently in active development. The foundation of the application has been built, focusing on creating a scalable architecture that will support multiple drawing tools and future features.
- Smooth freehand drawing
- Rounded stroke caps
- Rounded joins for natural handwriting
- Adjustable pen width
- Automatic stroke creation using
QPainterPath
InkFlow automatically detects when the mouse is clicked without movement and draws a perfectly centered filled dot instead of creating an empty stroke.
The application currently provides a large virtual drawing area using QGraphicsScene, allowing users to freely move around while drawing.
Current scene size:
5000 × 5000 px
This will later evolve into a dynamically expanding infinite canvas.
Navigate around the canvas using:
- Middle Mouse Button + Drag
- Hold Space + Left Mouse Drag
The camera moves independently of the drawing system, allowing a smooth workflow similar to professional whiteboard applications.
Implemented mouse-wheel zoom with:
- Zoom centered around the mouse cursor
- Geometric zoom progression
- Minimum zoom limit
- Maximum zoom limit
This provides smooth navigation without distortion.
One of the major goals of InkFlow is maintaining a clean and extensible architecture.
Instead of placing all functionality inside a single Canvas class, responsibilities have been separated.
MainWindow
│
└── Canvas
│
├── Camera (Pan & Zoom)
├── Scene Management
└── Tool System
│
└── Active Tool
InkFlow has a modular tool architecture, which makes it easier to maintain.
Current hierarchy:
BaseTool
│
└── PenTool
Each tool is responsible for implementing its own:
- Mouse Press
- Mouse Move
- Mouse Release
This allows future tools to be added without modifying the core canvas.
Canvas maintains a registry of available tools.
Example:
self.tools = {
"pen": PenTool(self)
}The active tool is simply a reference to one of these objects.
self.active_tool = self.tools["pen"]This makes switching tools straightforward while preserving each tool's internal state.
InkFlow/
│
├── main.py
│
├── ui/
│ ├── main_window.py
│ └── canvas.py
│
├── tools/
│ ├── base_tool.py
│ └── pen_tool.py
│
└── assets/
- Build a modular tool system
- Keep the codebase clean and scalable
- Separate UI logic from drawing logic
- Prepare the project for future expansion
The following features are planned for future versions:
- Tool Toolbar
- Eraser Tool
- Rectangle Tool
- Circle Tool
- Line Tool
- Arrow Tool
- Text Tool
- Selection Tool
- Color Picker
- Brush Size Controls
- Undo / Redo
- Layers
- Infinite Dynamic Canvas
- Save / Load Projects
- Export to PNG
- Export to PDF
- Keyboard Shortcuts
- Custom Themes
InkFlow is being designed with long-term maintainability in mind.
Instead of building features as one large class, the project follows an object-oriented architecture where each component has a single responsibility.
This approach makes adding new tools and features significantly easier while keeping the codebase organized and maintainable.
This project is currently under development.
License information will be added once the first public release is available.