-
Notifications
You must be signed in to change notification settings - Fork 0
Annotation Editor
The Annotation Editor is a full-featured image editor that opens after each capture (configurable) or can be launched independently. It provides 17 drawing tools, text formatting, color management, undo/redo, and multiple export formats.
The editor is a borderless window with custom chrome, hosting a canvas control with a left-side toolbar and bottom status bar.
Opening the editor:
- Automatically after capture (configurable)
- Via hotkey (configurable)
- From the Gallery (double-click any capture)
- From the Capture Preview (click Edit)
- Command line:
CyberSnap.exe --editor
Only one editor window can be open at a time. Opening a new capture in the editor prompts to save changes before replacing the content.
The editor supports multiple documents in tabs within the same window. Open several captures or projects simultaneously and switch between them instantly.
- New capture β When the active document is blank, it replaces it. Otherwise, it opens in a new tab.
- Open file β Opens in a new tab if a document is already active.
- Blank canvas β Creates a new blank document in a tab.
- Project files β Opens .csnp projects in separate tabs.
- Appears automatically when more than one document is open.
- Located in the horizontal ruler row to save vertical space.
- Shows document name (or "Untitled" for unsaved documents).
- Dirty indicator β A colored dot appears on tabs with unsaved changes.
- Close button β Each tab has a close button (Γ).
- Scroll β Mouse wheel scrolls through tabs when many are open.
- Soft limit: 8 tabs. A warning appears when exceeding this limit.
- Closing tabs beyond the limit returns to normal operation.
| Action | Description |
|---|---|
| Click tab | Switch to that document |
| Close button | Close the tab (prompts to save if dirty) |
| Mouse wheel | Scroll tab strip when many tabs are open |
| Ctrl + W | Close active document |
- Single document β Tab strip is hidden, only the canvas is visible.
- Multiple documents β Tab strip appears above the canvas.
- Session restore β Open tabs are remembered between sessions.
- Save prompt β Closing a dirty tab prompts to save changes.
| Tool | Description |
|---|---|
| Pan | Drag to pan the canvas |
| Move (Pick) | Select, move, and resize annotations |
| Eraser | Click annotations to delete them |
| Tool | Description | Constraints |
|---|---|---|
| Draw | Freehand stroke | β |
| Rectangle | Draw rectangles and squares | Shift = square |
| Circle | Draw ellipses and circles | Shift = circle |
| Line | Draw straight lines | Shift = 45Β° snap |
| Arrow | Draw arrows with head | Shift = 45Β° snap |
| Curved Arrow | Draw Bezier-curve arrows | β |
| Text | Add text annotations with formatting | β |
| Highlight | Semi-transparent highlight overlay | β |
| Blur | Pixelate/blur regions for privacy | β |
| Step Number | Auto-incrementing numbered badges | β |
| Magnifier | Loupe lens showing 3Γ zoom | β |
| Emoji | Place emoji glyphs from picker | Scroll to resize |
| Tool | Description |
|---|---|
| Cut Out | Remove horizontal or vertical strips |
| Crop | Crop to a rectangular region |
| Rotate 90Β° CW | Rotate canvas clockwise |
| Rotate 90Β° CCW | Rotate canvas counter-clockwise |
| Flip Vertical | Flip canvas vertically |
| Flip Horizontal | Flip canvas horizontally |
| Modifier | Effect |
|---|---|
| Shift (hold) | Constrain proportions (square/circle), snap angles (45Β°) |
| Space (hold) | Temporary Pan from any tool |
| Enter | Confirm Crop/Cut Out operation |
| Escape | Cancel current operation, deselect tool |
| Mouse wheel | Adjust size (Emoji) or zoom |
11 preset colors:
- Cyan, Blue, Purple, Red, Orange, Yellow, Green, White, Pink, Gray, Black
- 12th button opens the Color Picker Flyout
- Persists custom color to settings
- Click without custom color β opens picker
- Click with custom color β applies it directly
A floating chip near the cursor shows the current tool color and stroke width. Visible for: Draw, Arrow, Curved Arrow, Line, Rectangle, Circle, Highlight.
5 stroke widths: 2, 3, 4, 6, 10 points
Annotations scale proportionally with canvas size relative to a 1280px standard width. Larger images automatically use thicker strokes for visual consistency.
A toolbar appears above the text being edited with:
| Button | Function |
|---|---|
| B | Bold toggle |
| I | Italic toggle |
| Stroke | Text outline toggle |
| Shadow | Drop shadow toggle |
| Background | Background chip toggle |
| Font | Font family dropdown |
| β | Decrease font size |
| + | Increase font size |
| Grip | Drag to move text box |
| Align L | Left alignment |
| Align C | Center alignment |
| Align R | Right alignment |
- System fonts + favorites + recents
- 12 visible items, scrollable
- Star column to toggle favorites
- Persists recent and favorite fonts to settings
- Multiline text box with
AcceptsReturn - Enter commits text; Shift+Enter inserts newline
- Escape cancels editing
- Double-click word selection
- Corner handles resize font size while dragging
- Mouse wheel adjusts font size when editing
Text style settings persist between annotations:
- Bold (default: true), Italic (default: false)
- Stroke (default: true), Shadow (default: true)
- Background (default: false)
- Font size (default: 24), Font family (default: Segoe UI)
- Font size range: 10β120
- Click an annotation to select it (surface-scoped, not hollow interior)
- Drag to move selected annotation
- 8 resize handles: 4 corners + 4 edges
- Center knob for move-only items
Selected shapes display a rotation handle (circular arrow) above the bounding box:
- Drag to rotate the shape freely
- Shift snaps rotation to 15Β° increments
- Rotation cursor appears when hovering the handle
- New shapes are automatically selected after drawing
- Undo/Redo restores the previous selection state
Click-drag on empty space for rubber-band rectangle selection.
- Ctrl+Click to toggle items in multi-selection
- Group drag moves all selected items
- Sticky banner shows count: "{N} objects selected"
- Ctrl+A selects all annotations
- Double-click in Pick mode selects all
Pixelation-based blur for obscuring sensitive information:
- Downscales region to blocks (10px), then upscales with bilinear interpolation
- Renders against clean base bitmap (ignores other annotations)
- Uses scratch buffer for performance
Auto-incrementing numbered badges:
- Next number = max existing number + 1
- Circular badge with shadow, inner edge, and contrast text
- Ghost preview (60% opacity) follows cursor before placement
Loupe lens showing magnified detail:
- 3Γ zoom factor
- 50px source region sampled
- Circular lens with nearest-neighbor interpolation (crisp pixels)
- Crosshair at center
- Auto-positioning: flips to opposite side if near image edge
- 65% opacity ghost preview during hover
- Search box filters emoji catalog by name
- Owner-drawn grid (8 columns Γ N rows, 40px cells)
- Scrollable with mouse wheel
- Keyboard: Escape closes, Space initiates pan
- 360Γ384px popup, positioned near tool button
- Mouse wheel adjusts size (16β128px range)
- Ghost preview at 60% opacity follows cursor
- Placed at click position with scaled bitmap size
- 8 crop handles: 4 corners (L-shaped) + 4 edge midpoints (pill-shaped)
- Dark overlay outside crop region
- Dashed cyan border around crop area
- Drag from empty space to create new crop rect
- Enter key confirms crop
- Double-click inside crop confirms
- Leaving Crop tool confirms
- Escape or right-click cancels
Removes horizontal or vertical strips from the image:
- Auto-axis detection based on drag direction
- Shift locks axis
- Dark overlay on strip to remove
- Cyan border and size badge
- Confirmed/abandoned like Crop
- Accessible from the editor palette (transform tools)
8 cyan handles floating outside image edge:
- Edge handles (4): Extend/trim canvas in one direction
- Corner handles (4): Resize canvas in two directions simultaneously
- Default: extend/trim canvas (anchor opposite edge)
-
ResizeHandlesScaleContent: scale content instead - Shift at corner: toggle aspect ratio keep/break
- Confirmation dialog before applying
- Live size badge shows dimensions during drag
| Limit | Value |
|---|---|
| Minimum | 16 Γ 16 px |
| Maximum | 32768 Γ 32768 px |
| Operation | Description |
|---|---|
| Rotate 90Β° CW | Rotate canvas clockwise |
| Rotate 90Β° CCW | Rotate canvas counter-clockwise |
| Rotate 180Β° | Flip both axes |
| Operation | Description |
|---|---|
| Flip Horizontal | Mirror left-right |
| Flip Vertical | Mirror top-bottom |
β οΈ Transforms flatten annotations into the bitmap (with confirmation dialog).
| Control | Action |
|---|---|
| Zoom in | Increase zoom by 1.15Γ per click |
| Zoom out | Decrease zoom by 1.15Γ per click |
| Fit to window | Auto-scale to fit viewport |
| Actual size | 1:1 pixel mapping (100%) |
| Zoom percentage | Click to cycle presets |
- Minimum: 20%
- Maximum: 800%
- Step: 1.15Γ per click or mouse wheel notch
| Shortcut | Action |
|---|---|
| Ctrl + Plus | Zoom in |
| Ctrl + Minus | Zoom out |
| Ctrl + 0 | Fit to window |
| Ctrl + 1 | Actual size |
| Mouse wheel | Zoom in/out |
| Space + drag | Temporary pan |
- Click and drag with Pan tool to move the canvas
- Scroll bars appear when content exceeds viewport
- Command pattern with
IEditCommand(Apply()/Revert()) - Two stacks: undo and redo
- Configurable history limit (1β200 steps, default 100)
- Maximum 200 annotations per canvas
| Command | Description |
|---|---|
AddAnnotationCommand |
Add new annotation |
DeleteAnnotationCommand |
Remove annotation |
ReplaceAnnotationCommand |
Replace annotation |
TransformAnnotationCommand |
Move/resize annotation |
TransformMultipleAnnotationsCommand |
Move/resize multiple |
DeleteMultipleAnnotationsCommand |
Delete multiple |
AddMultipleAnnotationsCommand |
Add multiple |
CropCommand |
Crop canvas |
CutOutCommand |
Cut out strips |
ResizeCanvasCommand |
Resize canvas |
TransformCanvasCommand |
Rotate/flip canvas |
PasteImageCommand |
Paste image |
EraseCommand |
Eraser tool |
| Shortcut | Action |
|---|---|
| Ctrl + Z | Undo |
| Ctrl + Y | Redo |
| Ctrl + Shift + Z | Redo (alternative) |
Saves the complete editable project:
- Base bitmap + all annotations + guides
- Preserves editability of all vector elements
- Open and continue editing later
| Format | Extension | Description |
|---|---|---|
| PNG | .png |
Lossless compression, best quality |
| JPEG | .jpg |
Adjustable quality, smaller files |
.pdf |
Document export with page options |
| Option | Choices |
|---|---|
| Page size | Fit, A4, Legal, A3, Letter |
| Orientation | Portrait, Landscape |
| Margins | Configurable (cm) |
| Image layout | Fit to page, 1:1 draw |
| Span mode | Tall images sliced across pages |
| Metadata | Title, Author, Tags |
Renders the final bitmap and copies to clipboard, including saved file path reference.
| Menu Item | Action |
|---|---|
| Open image... | Open an image file |
| Paste | Paste from clipboard |
| Save project... | Save .csnp project |
| Resize canvas... | Open resize dialog |
| Transform β Rotate 90Β° CW/CCW, 180Β°, Flip H/V | Canvas transforms |
| Fit to window | Zoom to fit |
| Reset zoom | Return to 100% |
| Undo / Redo | History operations |
| Exit | Close editor |
Right-click on canvas deselects the current tool back to Move and shows "Tool deselected" banner.
- Hint area with lightbulb icon
- Dynamic text based on current tool/state
- Hidden when window width < 950px
- Coordinates display β X, Y in image space
- Zoom controls β Slider (20β800%), percentage label, reset, fit
- Toggle switches β Auto-fit on load, pan mode lock
- Brand area: Editor icon + "CyberSnap" title
- Filename display with LED status indicator:
- Amber β Unsaved changes
- Blue β New canvas (untitled)
- Green β Saved
- Window controls: Close, Maximize/Restore, Minimize
- Menu (burger), Donate (heart)
- Undo / Redo
- Gallery β Open history window
- Capture β Take new screenshot
- New / Open / Save
- Copy / Paste
- Export split-button β Main + chevron menu (PNG/JPEG/PDF)
- Share split-button β Main + chevron (providers)
When the editor opens with a blank canvas:
- Centered card with multi-layered drop shadow
- Icon: Picture frame with mountain artwork, spark badge
- Title: "Drop an image or project"
- Hint: "Double-click Β· drag and drop"
- 4 action chips: New canvas, Open, Paste, Capture
- Drag-over state with highlighted border
- Horizontal and vertical dashed cyan lines with shadow
- Hover highlight (brighter, thicker)
- Drag from rulers to create
- Remove by dragging off-canvas
- Controlled by
EditorShowRulerssetting
| Shortcut | Action |
|---|---|
| Ctrl + N | New canvas |
| Ctrl + O | Open file |
| Ctrl + S | Save project |
| Ctrl + Shift + S | Save as... |
| Ctrl + Shift + U | Share/upload |
| Ctrl + W | Close document / tab |
| Shortcut | Action |
|---|---|
| Ctrl + C | Copy to clipboard |
| Ctrl + V | Paste image |
| Ctrl + A | Select all |
| Ctrl + D | Duplicate selection |
| Delete | Delete selected |
| Escape | Deselect tool / cancel |
| Shortcut | Action |
|---|---|
| Ctrl + Plus | Zoom in |
| Ctrl + Minus | Zoom out |
| Ctrl + 0 | Fit to window |
| Ctrl + 1 | Actual size |
| Mouse wheel | Zoom in/out |
| Shortcut | Action |
|---|---|
| Ctrl + Z | Undo |
| Ctrl + Y | Redo |
| Ctrl + Shift + Z | Redo (alternative) |
Drag image files onto any part of the editor to open them. Supports the same formats as the Open dialog.
| Setting | Location | Description |
|---|---|---|
| Auto-open after capture | Settings β Capture | Launch editor automatically |
| Fit to window on open | Settings β Editor | Auto-zoom to fit canvas |
| Show rulers | Settings β Editor | Display canvas rulers |
| Show coordinates | Settings β Editor | Display cursor position |
| Show hints | Settings β Editor | Show contextual tooltips |
| Show banners | Settings β Editor | Show notification banners |
| Auto-crop controls | Settings β Editor | Auto-crop UI controls |
| Show resize handles | Settings β Editor | Display canvas resize handles |
| Resize handles scale content | Settings β Editor | Scale vs. extend on resize |
| Pan mode lock objects | Settings β Editor | Lock objects in pan mode |
| Undo limit | Settings β Editor | History depth (1β200) |
| Show scrollbars | Settings β Editor | Custom scrollbar overlays |
| Tool color | Settings β Editor | Default annotation color |
| Stroke width | Settings β Editor | Default stroke width |
| Text font size | Settings β Editor | Default text size |