Skip to content

Releases: SysAdminDoc/SwiftShot

v2.6.5

23 Feb 19:09
ae426ee

Choose a tag to compare

SwiftShot Editor Upgrade

Version License Platform Python

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 .swiftshot format 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 Editor

Version
License
Platform
Python

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

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...

Read more

v1.1.0

07 Feb 09:51
c373e8b

Choose a tag to compare

Add files via upload