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
- Launch
greenflame.exe. A green flame icon appears in the system tray. - Press Print Screen (or left-click the tray icon). The screen freezes and a selection overlay appears.
- Click and drag to draw a rectangle around whatever you want to capture.
- 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.
| Hotkey | Tool | Description |
|---|---|---|
B | Brush | Freehand drawing with configurable smoothing |
H | Highlighter | Semi-transparent freehand stroke with auto-straighten |
L | Line | Straight line between two points |
A | Arrow | Straight arrow between two points |
R | Rectangle | Outlined rectangle |
Shift+R | Filled Rectangle | Solid-filled rectangle |
E | Ellipse | Outlined ellipse |
Shift+E | Filled Ellipse | Solid-filled ellipse |
O | Obfuscate | Blur or pixelate a rectangular area |
T | Text | Rich text with formatting, fonts, and spell check |
N | Bubble | Auto-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:
| Shortcut | Action |
|---|---|
Ctrl+A / C / X / V | Clipboard operations on the draft text |
Ctrl+Z / Ctrl+Shift+Z | Undo / redo within the draft |
Ctrl+B / I / U | Bold / italic / underline |
Alt+Shift+5 | Strikethrough |
Insert | Toggle insert / overwrite mode |
Ctrl+Enter | Insert a newline |
Enter | Commit the draft |
Escape | Cancel 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.
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
| Shortcut | Action |
|---|---|
Ctrl+S | Save directly to the configured default folder in the configured format, then close |
Ctrl+Shift+S | Open Save As dialog, save, then close |
Ctrl+Alt+S | Save directly, copy the saved file to the clipboard, then close |
Ctrl+Shift+Alt+S | Open Save As dialog, save, copy the file to the clipboard, then close |
Ctrl+C | Copy the selection image to the clipboard, then close |
Ctrl+P | Pin 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.
| Shortcut | Action |
|---|---|
Ctrl+C | Copy the active pin to the clipboard |
Ctrl+S | Save the active pin to a file |
Ctrl+Right / Left | Rotate the pin right / left |
Ctrl+= / Ctrl+− | Zoom in / out |
Ctrl+Up / Down | Increase / decrease opacity (holding repeats) |
Escape | Close 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:
| Option | Meaning |
|---|---|
-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, --desktop | Capture the full virtual desktop |
--input <path> | Load an existing PNG/JPEG/BMP image (requires --annotate) |
-h, --help | Show help and exit |
-v, --version | Show version and exit |
output options
These optional flags modify a capture:
| Option | Meaning |
|---|---|
-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 |
--cursor | Include the captured cursor for this invocation |
--no-cursor | Exclude the captured cursor for this invocation |
-f, --overwrite | Allow 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:
--padding-color, if provided on the command line.save.padding_colorfrom the config file.- 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.
| Value | Behavior |
|---|---|
auto | Tries Windows Graphics Capture (WGC) first. If WGC fails, prints an info line to stderr and falls back to GDI. This is the default. |
gdi | Uses 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. |
wgc | Forces 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:
- If
--outputhas a supported extension (.png,.jpg,.jpeg,.bmp), that extension defines the format. - If
--formatis provided, it defines the format. - With
--input, an extensionless--outputpreserves the probed input format. - Otherwise,
save.default_save_formatfrom 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
--annotateis valid with any capture mode (--region,--window,--monitor,--desktop) or with--input.--inputrequires--annotate. It also requires either--outputor--overwrite.--inputis 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:
| Field | Required | Description |
|---|---|---|
annotations | Yes | Array of annotation objects, rendered in order (first is bottommost). |
coordinate_space | No | "local" (default) or "global". See below. |
color | No | Default color for annotations that don't specify their own. #rrggbb format. |
highlighter_opacity_percent | No | Default highlighter transparency (0–100). |
font | No | Default 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--inputfails 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:
- Annotation-level value (if present on the individual annotation)
- Document-level value (top-level field in the JSON)
- 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:
| Type | Required fields | Optional fields |
|---|---|---|
line | start, end | size, color |
arrow | start, end | size, color |
rectangle | left, top, width, height | size, color |
filled_rectangle | left, top, width, height | color |
ellipse | center, width, height | size, color |
filled_ellipse | center, width, height | color |
brush | points | size, color |
highlighter | start/end or points | size, color, opacity_percent |
obfuscate | left, top, width, height | size |
text | origin, plus text or spans | size, color, font |
bubble | center | size, 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
}
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
#rrggbbformat. Alpha is not encoded in the color string. - Highlighter transparency uses
opacity_percenton an annotation, orhighlighter_opacity_percentfor the document default (0–100). sizeuses the same 1–50 step concept as the GUI.
What size controls per type:
| Type | Size controls |
|---|---|
brush, line, arrow, rectangle, ellipse | Stroke width |
highlighter | Highlighter bar width |
text | size, Text point size (mapped from step 1–50 to 5–288 pt) |
bubble | Circle diameter |
obfuscate | size, 1 = blur, 2–50 = block pixelation |
filled_rectangle, filled_ellipse | Not 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:
- Source image pixels.
- Synthetic fill for off-desktop regions (live captures only).
- Outer padding (when
--paddingis used). - 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.
| Code | Meaning |
|---|---|
0 | Success (includes --help, --version, and "already running" tray startup) |
1 | Failed to register application window classes |
2 | CLI argument parse/validation failed |
3 | Failed to create tray window |
4 | Failed 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 |
10 | Output path resolution/reservation failed |
11 | Capture/save operation failed |
12 | Matched window became unavailable before capture |
13 | Matched window is minimized |
14 | --annotate input is invalid (file read, JSON, validation, or missing explicit font family) |
15 | Forced --window-capture wgc failed (unsupported, setup/frame failure, or size mismatch) |
16 | --input image is unreadable, unsupported format, or has transparency |
17 | Window has WDA_EXCLUDEFROMCAPTURE display affinity; cannot be captured |
18 | CLI 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.
| Hotkey | Action |
|---|---|
Prt Scrn | Start interactive capture (select a region) |
Ctrl+Prt Scrn | Copy the current window to the clipboard |
Shift+Prt Scrn | Copy the current monitor to the clipboard |
Ctrl+Shift+Prt Scrn | Copy the full desktop to the clipboard |
Alt+Prt Scrn | Recapture the last captured region (same coordinates) |
Ctrl+Alt+Prt Scrn | Recapture 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
| Shortcut | Action |
|---|---|
B | Toggle Brush |
H | Toggle Highlighter |
L | Toggle Line |
A | Toggle Arrow |
R / Shift+R | Toggle Rectangle / Filled Rectangle |
E / Shift+E | Toggle Ellipse / Filled Ellipse |
O | Toggle Obfuscate |
T | Toggle Text |
N | Toggle Bubble |
Tab | Open color / font wheel for the active tool |
Ctrl+= / Ctrl+− | Increase / decrease active tool size |
overlay: general
| Shortcut | Action |
|---|---|
Ctrl+S | Save to default folder |
Ctrl+Shift+S | Save As dialog |
Ctrl+Alt+S | Save + copy file to clipboard |
Ctrl+Shift+Alt+S | Save As + copy file to clipboard |
Ctrl+C | Copy selection to clipboard |
Ctrl+P | Pin selection to desktop |
Ctrl+K | Show / hide captured cursor |
Delete | Remove selected annotation(s) |
Ctrl+Z | Undo |
Ctrl+Shift+Z | Redo |
Escape | Cancel or go back |
text editing
| Shortcut | Action |
|---|---|
Ctrl+A / C / X / V | Clipboard operations on the draft |
Ctrl+Z / Ctrl+Shift+Z | Undo / redo within the draft |
Ctrl+B / I / U | Bold / italic / underline |
Alt+Shift+5 | Strikethrough |
Insert | Toggle insert / overwrite mode |
Ctrl+Enter | Insert a newline |
Enter | Commit the draft |
Escape | Cancel the draft |
pinned images
| Shortcut | Action |
|---|---|
Ctrl+C | Copy the active pin to clipboard |
Ctrl+S | Save the active pin to a file |
Ctrl+Right / Left | Rotate right / left |
Ctrl+= / Ctrl+− | Zoom in / out |
Ctrl+Up / Down | Increase / decrease opacity |
Escape | Close 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.*)
| Key | Default | Meaning |
|---|---|---|
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.*)
| Key | Default | Meaning |
|---|---|---|
ui.show_balloons | true | Show tray toast notifications after copy/save actions. |
ui.show_selection_size_side_labels | true | Show selection-size labels outside the selection (width on top/bottom, height on left/right). |
ui.show_selection_size_center_label | true | Show centered W × H size label inside the selection. |
ui.tool_size_overlay_duration_ms | 800 | How long the centered tool-size overlay stays visible after a size change. 0 disables it. |
tool settings (tools.*)
| Key | Default | Meaning |
|---|---|---|
tools.brush.size | 2 | Brush tool size step (1–50). |
tools.brush.smoothing_mode | smooth | Freehand brush smoothing. Accepted values: off, smooth. |
tools.line.size | 2 | Line tool size step (1–50). |
tools.arrow.size | 2 | Arrow tool size step (1–50). |
tools.rect.size | 2 | Rectangle tool size step (1–50). |
tools.ellipse.size | 2 | Ellipse 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_color | 0 | Active annotation color slot index (0–7). |
tools.font.sans | Arial | Font family for the sans slot (shared by Text and Bubble). |
tools.font.serif | Times New Roman | Font family for the serif slot. |
tools.font.mono | Courier New | Font family for the mono slot. |
tools.font.art | Comic Sans MS | Font family for the art slot. |
tools.highlighter.size | 10 | Highlighter size step (1–50). |
tools.highlighter.colors | {} | Highlighter color wheel slots (indices 0–5). |
tools.highlighter.current_color | 0 | Active highlighter color slot index (0–5). |
tools.highlighter.opacity_percent | 33 | Highlighter opacity for preview and output (0–100). |
tools.highlighter.smoothing_mode | smooth | Freehand highlighter smoothing. off or smooth. Straightened bars bypass this. |
tools.highlighter.pause_straighten_ms | 800 | Milliseconds of stillness before a stroke snaps to a straight bar. 0 = always straight. |
tools.highlighter.pause_straighten_deadzone_px | 0 | Pixel threshold before the pause timer resets. 0 = any movement resets. |
tools.text.size | 10 | Text tool size step (1–50, mapped to 5–288 pt). |
tools.text.current_font | sans | Active 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.size | 10 | Bubble size step (1–50). |
tools.bubble.current_font | sans | Active font slot for Bubble. Values: sans, serif, mono, art. |
tools.obfuscate.block_size | 10 | Obfuscate block size (1–50). 1 = blur; 2..50 = block pixelation. |
tools.obfuscate.risk_acknowledged | false | Must be true for CLI obfuscate usage. |
save settings (save.*)
| Key | Default | Meaning |
|---|---|---|
save.default_save_dir | ~/Pictures/greenflame | Folder used by Ctrl+S, Ctrl+Alt+S, and CLI captures without --output. |
save.last_save_as_dir | falls back to default_save_dir | Initial folder for Save As dialogs. |
save.default_save_format | png | Default format for direct saves and extensionless CLI output. Values: png, jpg, bmp. |
save.padding_color | #000000 | Padding color for CLI --padding when --padding-color is not supplied. |
save.filename_pattern_region | screenshot-${YYYY}-${MM}-${DD}_${hh}${mm}${ss} | Filename pattern for region captures. |
save.filename_pattern_desktop | screenshot-${YYYY}-${MM}-${DD}_${hh}${mm}${ss} | Filename pattern for desktop captures. |
save.filename_pattern_monitor | screenshot-…-monitor${monitor} | Filename pattern for monitor captures. |
save.filename_pattern_window | screenshot-…-${title} | Filename pattern for window captures. |
filename patterns
Filenames use Greenshot-style ${VARIABLE} placeholders:
| Variable | Expansion | Example |
|---|---|---|
${YYYY} | 4-digit year | 2026 |
${YY} | 2-digit year | 26 |
${MM} | 2-digit month | 02 |
${DD} | 2-digit day | 21 |
${hh} | 2-digit hour (24 h) | 14 |
${mm} | 2-digit minute | 30 |
${ss} | 2-digit second | 25 |
${title} | Sanitized window title (spaces and invalid chars become _; max 50 chars; falls back to window) | My_App |
${monitor} | 1-based monitor number | 2 |
${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}"
}
}