greenflame.screen capture
for windows / 01

the field guide / windows

make your
point.

From your first screenshot to your next script.
Capture, annotate, and put it to work.

getting started

Choose the installer or portable download for Windows 11. Run greenflame.exe; it stays in the system tray, ready when you need it. You can take your first screenshot without editing any settings.

your first capture

  1. Launch greenflame.exe. A green flame icon appears in the system tray.
  2. Press Print Screen (or left-click the tray icon). The screen freezes and a selection overlay appears.
  3. Click and drag to draw a rectangle around whatever you want to capture.
  4. Use the toolbar to annotate, or press Ctrl+C to copy straight to the clipboard.

That's the basic flow. The rest of this page covers everything else: selection modes, annotation tools, pinned images, the full CLI, and configuration.

capture & selection

greenflame uses a capture-first model. When you trigger an interactive capture, greenflame freezes the desktop into a snapshot. You then select a region from that frozen image, not from a live view that shifts as you draw.

Your desktop selection stays still while you work. Window selection can capture the chosen window separately, including portions outside the visible desktop.

selection modes

Four ways to define what gets captured:

  • Click and drag: draw a freehand rectangle. Hold Alt to disable edge snapping.
  • Ctrl + click: select the window under the cursor. While Ctrl is held, greenflame lifts the window preview above any occluding windows. If the window extends off-screen, the full window is still captured, but only the on-desktop portion is editable; a note beneath the center size label indicates that off-screen pixels are included.
  • Shift + click: select the entire monitor under the cursor.
  • Shift+Ctrl + click: select the full virtual desktop (all monitors).

adjusting the selection

Once a region is selected, you can refine it before annotating or saving:

  • Drag the handles on the selection border to resize it. Hold Alt to disable snapping.
  • With no annotation tool active (the default), drag inside the selection to move it. Hold Alt to disable snapping.
  • Press Ctrl+K or use the toolbar button to show or hide the captured cursor, meaning the cursor as it appeared in the frozen screenshot. This affects the saved image, not the live editing pointer.
  • Press Ctrl+P or use the toolbar button to pin the current selection as a floating reference window.

moving annotations

With no annotation tool active, you can manipulate existing annotations:

  • Click and drag an annotation to select it, then drag inside its bounding box to move it.
  • Ctrl+click an annotation to add or remove it from the current multi-selection.
  • Ctrl+drag a marquee to add every touched annotation to the selection.
  • When multiple annotations are selected, drag inside the group bounding box to move them all.
  • A selected line or arrow shows draggable endpoint handles for reshaping.
  • A selected rectangle, ellipse, or obfuscate (exactly one) shows corner and side resize handles.

annotation tools

greenflame has 11 tools. Press a hotkey or click the toolbar to toggle a tool on. Pressing the same hotkey again deactivates it and returns to selection mode.

HotkeyToolDescription
BBrushFreehand drawing with configurable smoothing
HHighlighterSemi-transparent freehand stroke with auto-straighten
LLineStraight line between two points
AArrowStraight arrow between two points
RRectangleOutlined rectangle
Shift+RFilled RectangleSolid-filled rectangle
EEllipseOutlined ellipse
Shift+EFilled EllipseSolid-filled ellipse
OObfuscateBlur or pixelate a rectangular area
TTextRich text with formatting, fonts, and spell check
NBubbleAuto-numbered circle for step-by-step callouts

color, size & cursor previews

Color: With any tool other than Obfuscate active, right-click anywhere (or press Tab) to open the color selection wheel. Left-click a segment or press Enter to select it. Scroll the mouse wheel or press ↑/↓ to navigate segments without the mouse. Press Escape to dismiss without changing. For Text and Bubble, the wheel has a central hub that switches between 8 color slots and 4 font choices; pressing Tab while the wheel is open cycles between color and font views.

Size: With any sized tool active (Brush, Highlighter, Line, Arrow, Rectangle, Ellipse, Bubble, Obfuscate, or Text), use mouse-wheel up/down or Ctrl+= / Ctrl+− to change that tool's size step (1–50). Each tool remembers its own independent size setting. For Obfuscate, the size controls block_size: 1 = blur mode, 2..50 = block pixelation.

Cursor previews: Most tools show a live preview around the cursor to indicate the current stroke size:

  • Brush and Bubble: anti-aliased circular preview.
  • Highlighter, Line, Rectangle, Ellipse, and Obfuscate: anti-aliased axis-aligned square preview.
  • Arrow: square preview aligned to the current arrow direction.
  • Text: the letter "A" in the current font and size, beside the cursor.
  • Filled Rectangle and Filled Ellipse: no cursor preview.

text

With the Text tool active and no draft open, left-click inside the selection to start a text annotation. Right-click or press Tab to open the color/font wheel. Use mouse-wheel or Ctrl+=/Ctrl+− to change the text size step (1–50, mapped to 5–288 pt).

Clicking outside a draft commits it if it contains text, or discards it if empty. Committed text annotations can be selected, moved, and deleted, and re-edited. With no annotation tool active, select exactly one text annotation and double-click it to resume editing.

Spell check: Live squiggles appear under misspelled words during editing. Configure one or more BCP-47 language tags in tools.text.spell_check_languages (e.g. ["en-US", "fr-CA"]). When multiple languages are configured, a word is only flagged if all checkers agree it is misspelled. Squiggles never appear in saved images.

While editing a draft:

ShortcutAction
Ctrl+A / C / X / VClipboard operations on the draft text
Ctrl+Z / Ctrl+Shift+ZUndo / redo within the draft
Ctrl+B / I / UBold / italic / underline
Alt+Shift+5Strikethrough
InsertToggle insert / overwrite mode
Ctrl+EnterInsert a newline
EnterCommit the draft
EscapeCancel the draft, keep Text tool armed

bubble

Left-click inside the selection to place a numbered circle. The number auto-increments with each placement and decrements on undo. Right-click opens a style wheel; the central hub switches between 8 color slots and 4 font choices. The number color (black or white) is chosen automatically for best contrast against the fill.

highlighter

Draw a semi-transparent stroke to emphasize content. While drawing, holding the mouse still for 800 ms snaps the stroke to a straight bar from the start point to the cursor. After snapping, the bar tracks the mouse until you release. The snap is one-way and cannot revert to freehand.

The wait time is configurable via tools.highlighter.pause_straighten_ms. Setting it to 0 makes every stroke start as a straight bar immediately.

obfuscate

Drag out a rectangle to blur or pixelate the content underneath. block_size = 1 uses blur mode; values 2..50 use block pixelation. Obfuscated regions can be moved and resized after placement, and they recompute automatically when overlapping annotations below them change.

Obfuscate is not a security feature. Pixelated or blurred areas can sometimes be reconstructed, especially around text or strong-contrast details. If you need to permanently hide sensitive content, use a filled opaque shape instead.

The first time you activate Obfuscate (from the toolbar or by pressing O), greenflame shows a warning dialog with this message. You must click I Understand to proceed. The acknowledgement is saved to tools.obfuscate.risk_acknowledged in the config and the warning does not appear again.

saving & sharing

ShortcutAction
Ctrl+SSave directly to the configured default folder in the configured format, then close
Ctrl+Shift+SOpen Save As dialog, save, then close
Ctrl+Alt+SSave directly, copy the saved file to the clipboard, then close
Ctrl+Shift+Alt+SOpen Save As dialog, save, copy the file to the clipboard, then close
Ctrl+CCopy the selection image to the clipboard, then close
Ctrl+PPin the rendered selection as a floating reference, then close

Save As supports PNG, JPEG, and BMP. When the captured cursor is visible (toggled with Ctrl+K or the toolbar button), it is composited into the screenshot below all annotations. The cursor is never selectable or movable.

pinned images

Pinned images are frameless, always-on-top reference windows with an always-visible green halo. The halo brightens when the pin is focused. Multiple pins can coexist on screen.

  • Drag anywhere on the pin to reposition it.
  • Use the mouse wheel or Ctrl+= / Ctrl+− to zoom (25%–800%).
  • Right-click the pin for its context menu.
  • Copy and save actions include the current rotation, but on-screen opacity and the green halo are display-only; they are not baked into exported images.
ShortcutAction
Ctrl+CCopy the active pin to the clipboard
Ctrl+SSave the active pin to a file
Ctrl+Right / LeftRotate the pin right / left
Ctrl+= / Ctrl+−Zoom in / out
Ctrl+Up / DownIncrease / decrease opacity (holding repeats)
EscapeClose the active pin

command line

Use the command line to capture and save without opening the selection overlay. Target a window by title, a monitor by number, a region by coordinates, or the full desktop. Add padding and annotations from JSON, or annotate an existing image.

The examples below use Windows Command Prompt (cmd.exe) with greenflame.exe available in the current folder or on PATH. Use a JSON file to avoid shell-specific quoting when working in PowerShell.

With no arguments, greenflame starts normally in the tray. Pass any of the flags below for a one-shot capture that writes output and exits.

capture modes

At most one capture mode per invocation:

OptionMeaning
-r, --region <x,y,w,h>Capture an explicit physical-pixel region
-w, --window <name>Capture a visible top-level window by title text
--window-hwnd <hex>Capture a visible top-level window by exact hex HWND
-m, --monitor <id>Capture a monitor by 1-based id
-d, --desktopCapture the full virtual desktop
--input <path>Load an existing PNG/JPEG/BMP image (requires --annotate)
-h, --helpShow help and exit
-v, --versionShow version and exit

output options

These optional flags modify a capture:

OptionMeaning
-o, --output <path>Output file path
-t, --format <png|jpg|jpeg|bmp>Output format override
-p, --padding <n|h,v|l,t,r,b>Add synthetic padding in physical pixels
--padding-color <#rrggbb>Padding color override (requires --padding)
--annotate <json|path>Apply JSON-defined annotations to the render result
--window-capture <auto|gdi|wgc>Window-capture backend for --window / --window-hwnd
--cursorInclude the captured cursor for this invocation
--no-cursorExclude the captured cursor for this invocation
-f, --overwriteAllow replacing an existing --output file

Both --option=value and --option value forms are accepted.

--cursor and --no-cursor override the persisted capture.include_cursor config setting for one invocation only. They do not modify the config file.

padding

--padding accepts one value (n), two values (h,v), or four values (l,t,r,b). Padding is always synthetic color; it never captures extra screen pixels. When padding is present, any part of the capture area that lies outside the virtual desktop is filled with the resolved padding color instead of being clipped.

Padding color resolution:

  1. --padding-color, if provided on the command line.
  2. save.padding_color from the config file.
  3. Default black (#000000).
greenflame.exe --desktop --padding 12
greenflame.exe --monitor 2 --padding 24,12 --padding-color "#ffffff"
greenflame.exe --region 1200,100,800,600 --padding 8,16,24,32

window matching

--window <name> performs a case-insensitive substring search across visible top-level windows. If that search finds exactly one case-insensitive exact-title match, greenflame captures it automatically. If multiple windows remain ambiguous, error output lists each candidate with its HWND, window class, and rect so you can rerun with --window-hwnd.

greenflame.exe --window "Notepad" --output note.png
greenflame.exe --window-hwnd 0x0000000000123456 --output exact-window.png

capture backends

--window-capture is a CLI-only option that controls how window pixels are obtained. It applies only to --window and --window-hwnd.

ValueBehavior
autoTries Windows Graphics Capture (WGC) first. If WGC fails, prints an info line to stderr and falls back to GDI. This is the default.
gdiUses the legacy GDI desktop-capture path. Captures visible pixels from the virtual desktop and crops to the target window rect. Warns about obscured or off-screen windows.
wgcForces WGC. Does not fall back. Suppresses GDI-only warnings. Exits with code 15 if WGC is unavailable or fails.

The key difference: GDI captures what is visible on the desktop, so obscured or off-screen portions may be missing. WGC captures the window itself, even when another window is in front of it or it extends beyond the desktop. Minimized windows are rejected in all modes (exit code 13).

greenflame.exe --window "Notepad" --window-capture gdi --output note-gdi.png
greenflame.exe --window "Notepad" --window-capture wgc --output note-wgc.png

output format

greenflame resolves the output image format in this order:

  1. If --output has a supported extension (.png, .jpg, .jpeg, .bmp), that extension defines the format.
  2. If --format is provided, it defines the format.
  3. With --input, an extensionless --output preserves the probed input format.
  4. Otherwise, save.default_save_format from the config applies.

If --output extension conflicts with --format, or the extension is unsupported (e.g. .tiff), the command fails. If --output has no extension, greenflame appends one based on the resolved format.

CLI annotations

greenflame's CLI can apply annotations directly to captured or imported images using a JSON description. This turns the command line into a scriptable annotation engine, useful for build pipelines, automated documentation, and AI agent workflows.

rem Inline JSON
greenflame.exe --desktop --annotate "{\"annotations\":[{\"type\":\"arrow\",\"start\":{\"x\":20,\"y\":20},\"end\":{\"x\":200,\"y\":120},\"size\":4,\"color\":\"#ff0000\"}]}"

rem JSON file
greenflame.exe --region 100,100,400,300 --annotate marks.json --output result.png

rem Annotate an existing image and save a new copy
greenflame.exe --input screenshot.png --output annotated.png --annotate annotations.json

input rules

  • --annotate is valid with any capture mode (--region, --window, --monitor, --desktop) or with --input.
  • --input requires --annotate. It also requires either --output or --overwrite.
  • --input is incompatible with live capture modes and with --window-capture, --cursor, and --no-cursor.
  • If the value's first non-whitespace character is {, it is treated as inline JSON. Otherwise, it is treated as a file path.
  • Annotation files must be UTF-8 JSON. A UTF-8 BOM is accepted.
  • Imported images must be fully opaque. Any non-opaque alpha fails with exit code 16.

schema structure & coordinate spaces

Annotation input is a JSON object with this shape:

{
  "coordinate_space": "local",
  "color": "#ff0000",
  "highlighter_opacity_percent": 50,
  "font": { "preset": "sans" },
  "annotations": [
    { "type": "arrow", "start": {"x": 20, "y": 20}, "end": {"x": 200, "y": 120}, "size": 4 }
  ]
}

Top-level fields:

FieldRequiredDescription
annotationsYesArray of annotation objects, rendered in order (first is bottommost).
coordinate_spaceNo"local" (default) or "global". See below.
colorNoDefault color for annotations that don't specify their own. #rrggbb format.
highlighter_opacity_percentNoDefault highlighter transparency (0–100).
fontNoDefault font for text and bubble annotations.

coordinate spaces

All coordinates are integer physical pixels.

  • local: (0, 0) is the top-left of the captured region or the imported image. This is the default and works with all sources.
  • global: (0, 0) is the top-left of the virtual desktop. Valid only for live capture modes. Using "global" with --input fails with exit code 14.

Coordinates can be negative or exceed the capture bounds; annotations are not clipped to the source image. When --padding is used, annotations that extend outside the capture area are rendered over the synthetic padding.

defaults and overrides

Values resolve in this order:

  1. Annotation-level value (if present on the individual annotation)
  2. Document-level value (top-level field in the JSON)
  3. greenflame config default (from greenflame.json)

This applies to color, highlighter opacity, and font. Size resolves from the annotation to that tool’s configured default; there is no document-level size field.

annotation types

11 annotation types are available, matching the GUI tools:

TypeRequired fieldsOptional fields
linestart, endsize, color
arrowstart, endsize, color
rectangleleft, top, width, heightsize, color
filled_rectangleleft, top, width, heightcolor
ellipsecenter, width, heightsize, color
filled_ellipsecenter, width, heightcolor
brushpointssize, color
highlighterstart/end or pointssize, color, opacity_percent
obfuscateleft, top, width, heightsize
textorigin, plus text or spanssize, color, font
bubblecentersize, color, font

lines and arrows

Both use start and end as {"x": int, "y": int} points, plus an optional size for stroke width.

{
  "type": "arrow",
  "start": { "x": 50, "y": 30 },
  "end": { "x": 250, "y": 150 },
  "size": 4,
  "color": "#ff3b30"
}

rectangles and ellipses

Outlined variants accept an optional size for stroke width; when omitted, the tool’s configured size is used. Filled variants do not accept size. Rectangles use left, top, width, height. Ellipses use center, width, height.

{
  "type": "rectangle",
  "left": 10, "top": 10, "width": 200, "height": 120,
  "size": 3, "color": "#00c2ff"
}

{
  "type": "filled_ellipse",
  "center": { "x": 120, "y": 80 },
  "width": 100, "height": 60,
  "color": "#83dd00"
}

brush and highlighter

Both accept a points array of {"x": int, "y": int} objects. Brush uses the shared freehand smoothing controlled by tools.brush.smoothing_mode. Point-list Highlighter uses the same smoothing controlled by tools.highlighter.smoothing_mode.

Highlighter also supports a straight-bar form using start/end instead of points. Straight bars bypass freehand smoothing and keep their explicit geometry.

{
  "type": "highlighter",
  "start": { "x": 10, "y": 50 },
  "end": { "x": 300, "y": 50 },
  "size": 14,
  "color": "#ffe66d",
  "opacity_percent": 40
}

obfuscate

Uses rectangle coordinates. size controls the obfuscation mode: 1 = blur, 2..50 = block pixelation. Does not accept color, font, or highlighter opacity.

{
  "type": "obfuscate",
  "left": 80, "top": 30, "width": 150, "height": 40,
  "size": 8
}
CLI obfuscate annotations require tools.obfuscate.risk_acknowledged to be true in the config file. If the flag is unset or false, the command fails with exit code 18. Accept the warning once in the GUI, or set the value manually in greenflame.json.

bubble

Numbered circles placed at center. Numbers are assigned automatically by order in the array: first bubble is 1, second is 2, and so on.

{
  "type": "bubble",
  "center": { "x": 40, "y": 40 },
  "size": 12,
  "color": "#ff7a00",
  "font": { "preset": "sans" }
}

text & fonts

Text annotations support either plain text or rich text with per-span formatting.

plain text

{
  "type": "text",
  "origin": { "x": 20, "y": 20 },
  "size": 18,
  "text": "Hello\nworld"
}

rich text (spans)

Use the spans array for mixed formatting. Each span requires a text string and can toggle bold, italic, underline, and strikethrough. Spans cannot override color, font, or size; those are set at the annotation level.

{
  "type": "text",
  "origin": { "x": 20, "y": 20 },
  "size": 18,
  "color": "#ff00ff",
  "spans": [
    { "text": "Step 1", "bold": true },
    { "text": "\nCollect logs", "underline": true },
    { "text": "\nConfirm repro", "italic": true }
  ]
}
text and spans are mutually exclusive. Including both is an error. Strings use normal JSON escaping.

fonts

Fonts use a tagged union: either a preset name or an explicit installed family:

// Preset (resolves via config)
{ "preset": "mono" }

// Explicit installed font
{ "family": "Consolas" }

Available presets: sans, serif, mono, art. These resolve to the font families configured in tools.font.* (Arial, Times New Roman, Courier New, and Comic Sans MS by default).

If an explicit family is not installed on the system, the command fails with exit code 14.

colors, transparency & size

  • Colors use #rrggbb format. Alpha is not encoded in the color string.
  • Highlighter transparency uses opacity_percent on an annotation, or highlighter_opacity_percent for the document default (0–100).
  • size uses the same 1–50 step concept as the GUI.

What size controls per type:

TypeSize controls
brush, line, arrow, rectangle, ellipseStroke width
highlighterHighlighter bar width
textsize, Text point size (mapped from step 1–50 to 5–288 pt)
bubbleCircle diameter
obfuscatesize, 1 = blur, 2–50 = block pixelation
filled_rectangle, filled_ellipseNot applicable (no size field)

validation & rendering

validation

Validation is strict. greenflame does not partially apply a document. If any part of the annotation payload is invalid, the entire command fails with exit code 14.

  • Unknown properties are errors.
  • Invalid property combinations are errors.
  • Wrong types are errors.
  • Missing required fields are errors.
  • Malformed JSON is an error.

rendering order

For CLI renders, greenflame builds the output image in this order:

  1. Source image pixels.
  2. Synthetic fill for off-desktop regions (live captures only).
  3. Outer padding (when --padding is used).
  4. Annotations, in array order.

Annotations always appear on top of the final image, including any padded area. Obfuscate annotations affect the pixels beneath them and earlier annotations, and they recompute when overlapping annotations below them change.

complete example

A full annotation file that uses multiple types, document-level defaults, and per-annotation overrides:

{
  "coordinate_space": "local",
  "color": "#ff3b30",
  "highlighter_opacity_percent": 35,
  "font": { "preset": "mono" },
  "annotations": [
    {
      "type": "rectangle",
      "left": -18, "top": -12, "width": 170, "height": 90,
      "size": 3
    },
    {
      "type": "highlighter",
      "points": [
        {"x": -12, "y": 28}, {"x": 48, "y": 32},
        {"x": 132, "y": 30}, {"x": 188, "y": 36}
      ],
      "size": 11, "color": "#ffe66d"
    },
    {
      "type": "arrow",
      "start": {"x": 168, "y": 84}, "end": {"x": 24, "y": 22},
      "size": 5, "color": "#00c2ff"
    },
    {
      "type": "text",
      "origin": {"x": 12, "y": 96},
      "size": 20, "color": "#ff00ff",
      "spans": [
        {"text": "Step 1", "bold": true},
        {"text": "\nCollect\tlogs", "underline": true},
        {"text": "\nConfirm repro", "italic": true}
      ]
    },
    {
      "type": "bubble",
      "center": {"x": 8, "y": 8},
      "size": 12
    },
    {
      "type": "line",
      "start": {"x": -20, "y": 150}, "end": {"x": 220, "y": 150},
      "size": 2, "color": "#7fff00"
    },
    {
      "type": "bubble",
      "center": {"x": 196, "y": 146},
      "size": 14, "font": {"preset": "sans"}, "color": "#ff7a00"
    }
  ]
}

In this example, the rectangle inherits the document-level "#ff3b30" color, while the arrow and highlighter override it with their own. The first bubble inherits the document-level "mono" font, while the second overrides it with "sans". Negative coordinates on the rectangle and line extend the annotations beyond the top-left of the capture area.

exit codes

Non-zero codes are unique and never reused. Scripts can rely on specific codes to diagnose failures.

CodeMeaning
0Success (includes --help, --version, and "already running" tray startup)
1Failed to register application window classes
2CLI argument parse/validation failed
3Failed to create tray window
4Failed to enforce single-instance tray mode
5--region capture requested but region data is missing
6--window matched no visible window
7--window matched multiple windows (ambiguous)
8--monitor requested but no monitors are available
9--monitor id is out of range
10Output path resolution/reservation failed
11Capture/save operation failed
12Matched window became unavailable before capture
13Matched window is minimized
14--annotate input is invalid (file read, JSON, validation, or missing explicit font family)
15Forced --window-capture wgc failed (unsupported, setup/frame failure, or size mismatch)
16--input image is unreadable, unsupported format, or has transparency
17Window has WDA_EXCLUDEFROMCAPTURE display affinity; cannot be captured
18CLI obfuscate usage rejected because tools.obfuscate.risk_acknowledged is not true

keyboard reference

All shortcuts in one place.

system hotkeys

These use the Print Screen key with modifier combinations. They are also available from the tray icon's right-click context menu.

HotkeyAction
Prt ScrnStart interactive capture (select a region)
Ctrl+Prt ScrnCopy the current window to the clipboard
Shift+Prt ScrnCopy the current monitor to the clipboard
Ctrl+Shift+Prt ScrnCopy the full desktop to the clipboard
Alt+Prt ScrnRecapture the last captured region (same coordinates)
Ctrl+Alt+Prt ScrnRecapture the last captured window (wherever it is now)

The last two require a previous capture in the current session. If none exists, or the previously captured window is closed or minimized, a warning toast is shown. Direct clipboard captures honor capture.include_cursor and do not open the overlay.

overlay: annotation tools

ShortcutAction
BToggle Brush
HToggle Highlighter
LToggle Line
AToggle Arrow
R / Shift+RToggle Rectangle / Filled Rectangle
E / Shift+EToggle Ellipse / Filled Ellipse
OToggle Obfuscate
TToggle Text
NToggle Bubble
TabOpen color / font wheel for the active tool
Ctrl+= / Ctrl+−Increase / decrease active tool size

overlay: general

ShortcutAction
Ctrl+SSave to default folder
Ctrl+Shift+SSave As dialog
Ctrl+Alt+SSave + copy file to clipboard
Ctrl+Shift+Alt+SSave As + copy file to clipboard
Ctrl+CCopy selection to clipboard
Ctrl+PPin selection to desktop
Ctrl+KShow / hide captured cursor
DeleteRemove selected annotation(s)
Ctrl+ZUndo
Ctrl+Shift+ZRedo
EscapeCancel or go back

text editing

ShortcutAction
Ctrl+A / C / X / VClipboard operations on the draft
Ctrl+Z / Ctrl+Shift+ZUndo / redo within the draft
Ctrl+B / I / UBold / italic / underline
Alt+Shift+5Strikethrough
InsertToggle insert / overwrite mode
Ctrl+EnterInsert a newline
EnterCommit the draft
EscapeCancel the draft

pinned images

ShortcutAction
Ctrl+CCopy the active pin to clipboard
Ctrl+SSave the active pin to a file
Ctrl+Right / LeftRotate right / left
Ctrl+= / Ctrl+−Zoom in / out
Ctrl+Up / DownIncrease / decrease opacity
EscapeClose the active pin

configuration

greenflame reads its config from:

%USERPROFILE%\.config\greenflame\greenflame.json

The tables below list the available settings and their defaults. You only need to supply the values you want to change.

capture settings (capture.*)

KeyDefaultMeaning
capture.include_cursor false Include the captured cursor by default for live captures. Interactive captures can still toggle it with Ctrl+K.

UI settings (ui.*)

KeyDefaultMeaning
ui.show_balloonstrueShow tray toast notifications after copy/save actions.
ui.show_selection_size_side_labelstrueShow selection-size labels outside the selection (width on top/bottom, height on left/right).
ui.show_selection_size_center_labeltrueShow centered W × H size label inside the selection.
ui.tool_size_overlay_duration_ms800How long the centered tool-size overlay stays visible after a size change. 0 disables it.

tool settings (tools.*)

KeyDefaultMeaning
tools.brush.size2Brush tool size step (1–50).
tools.brush.smoothing_modesmoothFreehand brush smoothing. Accepted values: off, smooth.
tools.line.size2Line tool size step (1–50).
tools.arrow.size2Arrow tool size step (1–50).
tools.rect.size2Rectangle tool size step (1–50).
tools.ellipse.size2Ellipse tool size step (1–50).
tools.colors{}Annotation color wheel slots (indices 0–7). Object with slot-index keys, e.g. {"4": "#ff00ff"}.
tools.current_color0Active annotation color slot index (0–7).
tools.font.sansArialFont family for the sans slot (shared by Text and Bubble).
tools.font.serifTimes New RomanFont family for the serif slot.
tools.font.monoCourier NewFont family for the mono slot.
tools.font.artComic Sans MSFont family for the art slot.
tools.highlighter.size10Highlighter size step (1–50).
tools.highlighter.colors{}Highlighter color wheel slots (indices 0–5).
tools.highlighter.current_color0Active highlighter color slot index (0–5).
tools.highlighter.opacity_percent33Highlighter opacity for preview and output (0–100).
tools.highlighter.smoothing_modesmoothFreehand highlighter smoothing. off or smooth. Straightened bars bypass this.
tools.highlighter.pause_straighten_ms800Milliseconds of stillness before a stroke snaps to a straight bar. 0 = always straight.
tools.highlighter.pause_straighten_deadzone_px0Pixel threshold before the pause timer resets. 0 = any movement resets.
tools.text.size10Text tool size step (1–50, mapped to 5–288 pt).
tools.text.current_fontsansActive font slot for Text. Values: sans, serif, mono, art.
tools.text.spell_check_languages[]BCP-47 tags for spell-check (e.g. ["en-US"]). Empty = disabled.
tools.bubble.size10Bubble size step (1–50).
tools.bubble.current_fontsansActive font slot for Bubble. Values: sans, serif, mono, art.
tools.obfuscate.block_size10Obfuscate block size (1–50). 1 = blur; 2..50 = block pixelation.
tools.obfuscate.risk_acknowledgedfalseMust be true for CLI obfuscate usage.

save settings (save.*)

KeyDefaultMeaning
save.default_save_dir~/Pictures/greenflameFolder used by Ctrl+S, Ctrl+Alt+S, and CLI captures without --output.
save.last_save_as_dirfalls back to default_save_dirInitial folder for Save As dialogs.
save.default_save_formatpngDefault format for direct saves and extensionless CLI output. Values: png, jpg, bmp.
save.padding_color#000000Padding color for CLI --padding when --padding-color is not supplied.
save.filename_pattern_regionscreenshot-${YYYY}-${MM}-${DD}_${hh}${mm}${ss}Filename pattern for region captures.
save.filename_pattern_desktopscreenshot-${YYYY}-${MM}-${DD}_${hh}${mm}${ss}Filename pattern for desktop captures.
save.filename_pattern_monitorscreenshot-…-monitor${monitor}Filename pattern for monitor captures.
save.filename_pattern_windowscreenshot-…-${title}Filename pattern for window captures.

filename patterns

Filenames use Greenshot-style ${VARIABLE} placeholders:

VariableExpansionExample
${YYYY}4-digit year2026
${YY}2-digit year26
${MM}2-digit month02
${DD}2-digit day21
${hh}2-digit hour (24 h)14
${mm}2-digit minute30
${ss}2-digit second25
${title}Sanitized window title (spaces and invalid chars become _; max 50 chars; falls back to window)My_App
${monitor}1-based monitor number2
${num}6-digit zero-padded incrementing counter (next available by directory scan)000042

example configuration

{
  "capture": {
    "include_cursor": true
  },
  "ui": {
    "show_balloons": true,
    "tool_size_overlay_duration_ms": 800
  },
  "tools": {
    "font": {
      "sans": "Arial",
      "serif": "Times New Roman",
      "mono": "Courier New",
      "art": "Comic Sans MS"
    },
    "colors": { "4": "#ff00ff" },
    "current_color": 0,
    "brush": { "size": 2, "smoothing_mode": "smooth" },
    "highlighter": {
      "opacity_percent": 33,
      "pause_straighten_ms": 800
    },
    "obfuscate": { "block_size": 10, "risk_acknowledged": true },
    "text": {
      "size": 14,
      "current_font": "sans",
      "spell_check_languages": ["en-US"]
    }
  },
  "save": {
    "default_save_dir": "C:\\Users\\you\\Pictures\\greenflame",
    "default_save_format": "png",
    "filename_pattern_window": "screenshot-${YYYY}-${MM}-${DD}_${hh}${mm}${ss}-${title}"
  }
}