Releases: SysAdminDoc/SwiftShot
Release list
SwiftShot v2.8.0
Audit-backlog drain: all 14 verified-but-deferred findings from the v2.7.0 deep audit are now fixed end-to-end, with regression tests (54 -> 75).
Editor — correctness
- Rotate View no longer breaks mouse-to-image mapping; a shared view transform drives painting and coordinate mapping, and overlays follow it.
- Semi-transparent brush/pen/shape strokes composite over the layer instead of punching a translucency hole.
- Align panel aligns a layer's content bounding box (was a no-op that still cost an undo); already-aligned content records no undo.
- Off-canvas expansion grows LayerGroups and the selection mask.
- Clone stamp near an edge no longer paints transparent-black holes.
- Quick Mask can be cancelled with Esc (restores the prior selection).
- JPEG save asks quality once and mattes transparency onto white.
Editor — theming & performance
- The editor honours the light theme.
- Soft brush, healing and retouch are vectorized; content-aware fill shows a busy cursor.
- Panel refreshes are coalesced; marching-ants idle when hidden.
- Magnetic lasso previews the snapped edge between clicks.
Capture
- Mouse-pointer capture renders the real cursor shape (I-beam/hand/resize) via DrawIconEx.
- Scrolling capture fixes negative multi-monitor coordinates and over-trimming of repeating content.
Settings
- The Frame tab (border/shadow/rounded) is wired to a post-capture step; the Obfuscate action honours the configured strength and mode.
Install: SwiftShot-Setup.exe (installer) or SwiftShot-Portable.exe (single file, no install).
SwiftShot v2.7.0
Deep audit release: ~50 verified fixes across correctness, data safety, UX, theming, accessibility and performance. Test suite grew from 34 to 54 tests.
Highlights
Capture
- Freehand region capture masks to the drawn shape (it silently produced the bounding rectangle before), including timed captures
- Per-monitor capture is correct under 125%/mixed DPI scaling
- Timed-capture countdown is a small click-to-cancel badge that never steals focus (the old full-screen overlay blocked all interaction, defeating the feature)
- GIF output format works; failed saves surface a tray warning; camera sound plays at capture completion
Hotkeys
- Rebinding takes effect immediately - no restart
- Digits, arrows, Tab, Insert, Delete, Home/End, PageUp/Down now actually fire when recorded (previously silently dead)
- Duplicate shortcut assignments are rejected
Editor
- Unsaved changes prompt on close; unhandled errors no longer terminate the app (crash log in %APPDATA%\SwiftShot)
- Removed undeclared scipy dependency that crashed warp / magnetic lasso / Bevel & Emboss on first use in packaged builds
- Undo preserves layer masks, effects and groups; Ctrl+S no longer overwrites a stale project after switching documents
- Free Transform / Perspective dragging works; Quick Mask paints the mask, not the image; Motion Blur works at all sizes; vibrance ~1000x faster
- Settings for default color / line width / font are wired; "Reuse existing editor window" works
Theming & accessibility
- Capture history, monitor picker, scrolling capture, OCR result and context menus follow the light theme; borders visible on light surfaces
- History thumbnails and monitor cards are keyboard-accessible; monitor picker accepts 1-9 / A
Reliability
- Update notifications open the release page when clicked, plus a tray menu entry
- Event-driven clipboard watcher (no polling, no same-size misses, ignores own copies)
- Config values are type-validated; corrupt configs backed up and logged
- Uninstaller asks before deleting settings and capture history
Full details in CHANGELOG.md.
Downloads
- SwiftShot-Portable.exe - single file, no install
- SwiftShot-Setup.exe - installer with Start Menu shortcut and uninstaller
v2.6.5
SwiftShot Editor Upgrade
A Photoshop-inspired desktop image editor built with PyQt5 and Pillow. Single-file, dark-themed, auto-installs all dependencies on first run. 7,800+ lines covering tools, filters, adjustments, AI features, layer effects, and non-destructive editing — no installer or configuration required.
Quick Start
git clone https://github.com/SysAdminDoc/SwiftShot.git
cd SwiftShot
python editor.py
Windows: double-click launch.bat
First run: dependencies install automatically (PyQt5, Pillow, numpy, scipy)
Screenshots
Dark theme · Photoshop-style layout · Rulers · Histogram · Navigator · Layer effects stack
Tools
Selection Tools (M)
| Tool | Description |
|---|---|
| Rectangular Marquee | Standard rect selection with feather + AA |
| Elliptical Marquee | Ellipse selection with anti-aliasing |
| Lasso | Freehand polygon selection |
| Magnetic Lasso | Edge-snapping lasso using Sobel edge detection — click to place anchors, Enter/Ctrl+Click to close |
| Magic Wand | Tolerance-based flood fill selection |
| Select by Color | Global color selection across entire image |
Architecture
editor.py (~7,800 lines, single-file)
│
├── Bootstrap auto-installs all dependencies on first run
├── Color system Photoshop dark palette (C class)
├── QSS stylesheet ~300 lines, pixel-perfect dark theme
├── SVG icon dict 32+ tool icons via QSvgRenderer
│
├── Data model
│ ├── Layer RGBA image + mask + effects + blend mode
│ └── LayerGroup composite of child layers (live image property)
│
├── Widgets
│ ├── CanvasWidget drawing, selection, transform, overlays, guides
│ ├── LayerPanel layer stack, fx button, group/mask controls
│ ├── ChannelsPanel R/G/B/A thumbnails + visibility toggles
│ ├── PathsPanel saved paths — stroke, fill, to selection
│ ├── FxDialog non-destructive layer effects editor
│ ├── OptionsBar context-sensitive tool options bar
│ ├── PropertiesPanel tool settings (brush hardness, pen flow…)
│ ├── ColorPanel HSV sliders + hex + swatches
│ ├── HistogramWidget live channel histogram
│ ├── NavigatorPanel thumbnail + viewport + zoom
│ ├── HistoryPanel undo stack display
│ ├── AlignPanel canvas alignment
│ ├── RulerWidget pixel rulers
│ └── CommandPaletteDialog Ctrl+K fuzzy command search
│
└── ImageEditor (QMainWindow)
├── 35+ tools brush, clone, magnetic lasso, red eye…
├── 14 adjustments curves, levels, vibrance, color balance…
├── 18 filters oil paint, halftone, tilt shift, CA…
├── 7 layer effects drop shadow, glow, bevel, overlays, stroke
├── AI tools rembg, upscale, depth, detect, inpaint
└── File I/O open, save, export, .swiftshot project
Known Limitations
- Compositing recomputes the full layer stack on every paint event — performance degrades with many layers or large (4K+) images
- Text is rasterized on placement; double-click to re-edit is not yet supported
- PSD import/export is not implemented
- Layer effects are not batch-copyable between layers
- Paths panel does not persist to
.swiftshotformat yet - No ICC color profile support
FAQ
First launch is slow?
It's installing dependencies. Subsequent launches are instant.
AI background removal says "Installing rembg..."?
rembg and its ONNX runtime are being installed (~500MB total with the u2net model). This happens once and is cached locally.
Content-Aware Fill looks patchy on large selections?
The patch-match implementation samples 20 random candidates per pixel. It works well for small regions and textured backgrounds. For large solid areas, try selecting a smaller region or using the Clone Stamp.
Can I build on macOS or Linux?
Yes — pyinstaller editor.py --onefile --windowed works on all platforms. The .ps1 build scripts are Windows-specific.
What is a .swiftshot file?
A renamed zip archive. You can open it with any zip tool to access the individual layer PNGs and meta.json project file.
License
MIT — see LICENSE
Contributing
Issues and pull requests welcome at github.com/SysAdminDoc/SwiftShot
# SwiftShot EditorA Photoshop-inspired desktop image editor built with PyQt5 and Pillow. Single-file, dark-themed, auto-installs all dependencies on first run. 7,800+ lines covering tools, filters, adjustments, AI features, layer effects, and non-destructive editing — no installer or configuration required.
Quick Start
git clone https://github.com/SysAdminDoc/SwiftShot.git
cd SwiftShot
python editor.pyWindows: double-click launch.bat
First run: dependencies install automatically (PyQt5, Pillow, numpy, scipy)
Screenshots
Dark theme · Photoshop-style layout · Rulers · Histogram · Navigator · Layer effects stack
Tools
Selection Tools (M)
| Tool | Description |
|---|---|
| Rectangular Marquee | Standard rect selection with feather + AA |
| Elliptical Marquee | Ellipse selection with anti-aliasing |
| Lasso | Freehand polygon selection |
| Magnetic Lasso | Edge-snapping lasso using Sobel edge detection — click to place anchors, Enter/Ctrl+Click to close |
| Magic Wand | Tolerance-based flood fill selection |
| Select by Color | Global color selection across entire image |
All selection tools share four combination modes — New / Add / Subtract / Intersect — accessible via the options bar or Edit → Modify Selection. Per-tool feather (0–200px) and anti-aliasing are available in the options bar.
Quick Mask mode (Q) — enter to paint selections as a red rubylith overlay using any brush; exit to convert the mask back to a selection.
Paint Tools (B)
Brush · Pencil · Spray/Airbrush — all support size, opacity, hardness, and an Off-Canvas Painting option that automatically expands the canvas when strokes go past the image edge.
Retouching (S)
Clone Stamp · Healing Brush · Red Eye Removal — click a red-eye region to desaturate and darken it automatically.
Other Tools
| Tool | Key | Description |
|---|---|---|
| Move | V |
Move active layer |
| Crop | C |
Interactive crop with overlay + ratio lock |
| Measure | C flyout |
Distance and angle ruler |
| Eraser | E |
Alpha-channel erase |
| Dodge / Burn / Sponge / Smudge | — | Non-destructive tonal tools |
| Pen | P |
Smooth strokes with flow + smoothing |
| Gradient | G |
Linear and radial gradients |
| Fill Bucket | G flyout |
Flood fill with tolerance |
| Pattern Fill | G flyout |
Checkerboard, stripes, dots, grid |
| Shapes | R |
Rect · Ellipse · Line · Arrow · Triangle · Polygon · Star |
| Text | T |
Click-to-place with font/size picker |
| Eyedropper | I |
Pick color from canvas |
| Sticky Note | N |
Click-to-place annotation |
| Pan | H |
Middle-click or Alt+drag anywhere |
| Zoom | H flyout |
Zoom in / out |
Layers
- Unlimited layers with drag-and-drop reorder
- 10 blend modes: Normal, Multiply, Screen, Overlay, Darken, Lighten, Difference, Color Dodge, Color Burn, Hard Light
- Per-layer opacity and lock/visibility toggles
- Layer Masks — white/black mask, paint to reveal/hide, apply or delete, rubylith preview while painting
- Layer Groups — select 2+ layers, press
G(or Ctrl+G) to group; double-click a group to expand/collapse; Ctrl+Shift+G to ungroup - Multi-select — Ctrl+Click / Shift+Click multiple layers for bulk operations and grouping
- Layer drag-and-drop reorder within the list
Layer Effects (non-destructive)
Click the fx button in the layer panel to open the effects stack. Effects are applied live during compositing and saved with the project.
| Effect | Controls |
|---|---|
| Drop Shadow | Distance, blur, angle, opacity, color |
| Outer Glow | Blur, spread, opacity, color |
| Inner Glow | Blur, opacity, color |
| Bevel & Emboss | Depth, size, angle, highlight color, shadow color |
| Color Overlay | Opacity, color |
| Gradient Overlay | Two color stops, angle, opacity |
| Stroke | Size, position (inside/outside/center), opacity, color |
Multiple effects can be stacked on the same layer. Each effect has an enable/disable toggle. Canceling the dialog restores the original stack.
Panels
| Panel | Descrip...